def __init__(self): super().__init__("simple_publisher") logger = self.get_logger() self._num = 0 period = self.declare_parameter("period", 1.0) depth = self.declare_parameter("qos_depth", 5) logger.info("param period={}" .format(period.get_parameter_value().double_value)) logger.info("param qos_depth={}" .format(depth.get_parameter_value().integer_value)) profile = QoSProfile(depth=depth.get_parameter_value().integer_value) profile.reliability = QoSReliabilityPolicy.BEST_EFFORT profile.durability = QoSDurabilityPolicy.TRANSIENT_LOCAL profile.liveliness = QoSLivelinessPolicy.AUTOMATIC self._pub = self.create_publisher(SimpleMsg, "sample_topic", profile) self.create_timer( period.get_parameter_value().double_value, self.on_timer_callback) logger.info("publisher start!")
def __init__(self): super().__init__('sonar2', namespace='') # Params #____________________________________________ # Publishers #____________________________________________ # toCpu2 # Qos profile qos_profile_toCpu2 = QoSProfile( history=QoSHistoryPolicy.KEEP_LAST, durability=QoSDurabilityPolicy.SYSTEM_DEFAULT, reliability=QoSReliabilityPolicy.SYSTEM_DEFAULT, depth=15) # Additional qos settings qos_profile_toCpu2.liveliness = QoSLivelinessPolicy.SYSTEM_DEFAULT qos_profile_toCpu2.deadline.sec = 0 qos_profile_toCpu2.deadline.nsec = 0 qos_profile_toCpu2.lifespan.sec = 0 qos_profile_toCpu2.lifespan.nsec = 0 qos_profile_toCpu2.liveliness_lease_duration.sec = 0 qos_profile_toCpu2.liveliness_lease_duration.nsec = 0 qos_profile_toCpu2.avoid_ros_namespace_conventions = False self.publisher_toCpu2 = self.create_publisher( Distance, 'topic/path/s2', qos_profile=qos_profile_toCpu2) self.timer_toCpu2 = self.create_timer(0.0, self.publisher_call_toCpu2) self.i = 0
def _getQoSProfile(self): profile = QoSProfile(depth=10) profile.reliability = QoSReliabilityPolicy.RMW_QOS_POLICY_RELIABILITY_BEST_EFFORT profile.durability = QoSDurabilityPolicy.RMW_QOS_POLICY_DURABILITY_VOLATILE profile.liveliness = QoSLivelinessPolicy.RMW_QOS_POLICY_LIVELINESS_AUTOMATIC profile.deadline = Duration() profile.lifespan = Duration() return profile
def _getQoSProfile(self): profile = QoSProfile( history=QoSHistoryPolicy.RMW_QOS_POLICY_HISTORY_KEEP_ALL) profile.reliability = QoSReliabilityPolicy.RMW_QOS_POLICY_RELIABILITY_RELIABLE profile.durability = QoSDurabilityPolicy.RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL profile.liveliness = QoSLivelinessPolicy.RMW_QOS_POLICY_LIVELINESS_AUTOMATIC profile.deadline = Duration() profile.lifespan = Duration() return profile
def __init__(self): super().__init__('node3', namespace='name/space3') # Params #____________________________________________ # Publishers #____________________________________________ # Subscribers #____________________________________________ # sub1 # Qos profile qos_profile_sub1 = QoSPresetProfiles.SYSTEM_DEFAULT.value self.subscriber_sub1 = self.create_subscription( M1, 'topic/path1', self.subscriber_call_sub1, qos_profile=qos_profile_sub1) self.subscriber_sub1 #_____ # Servers #____________________________________________ # Clients #____________________________________________ # c2 # Qos profile qos_profile_c2 = QoSProfile( history=QoSHistoryPolicy.KEEP_ALL, durability=QoSDurabilityPolicy.SYSTEM_DEFAULT, reliability=QoSReliabilityPolicy.RELIABLE, depth=0) # Additional qos settings qos_profile_c2.liveliness = QoSLivelinessPolicy.SYSTEM_DEFAULT qos_profile_c2.deadline.sec = 0 qos_profile_c2.deadline.nsec = 0 qos_profile_c2.lifespan.sec = 0 qos_profile_c2.lifespan.nsec = 0 qos_profile_c2.liveliness_lease_duration.sec = 0 qos_profile_c2.liveliness_lease_duration.nsec = 0 qos_profile_c2.avoid_ros_namespace_conventions = False self.client_c2 = self.create_client(Addtwo, 'service2', qos_profile=qos_profile_c2)
def __init__(self): super().__init__("simple_subscription") logger = self.get_logger() self._num = 0 depth = self.declare_parameter("qos_depth", 5) logger.info("param qos_depth={}".format( depth.get_parameter_value().integer_value)) profile = QoSProfile(depth=depth.get_parameter_value().integer_value) profile.reliability = QoSReliabilityPolicy.BEST_EFFORT profile.durability = QoSDurabilityPolicy.TRANSIENT_LOCAL profile.liveliness = QoSLivelinessPolicy.AUTOMATIC self.create_subscription(SimpleMsg, "sample_topic", self.on_message_callback, profile) logger.info("subscription start!")
def __init__(self): super().__init__('node2', namespace='name/space2') # Params #____________________________________________ # Publishers #____________________________________________ # pub1 # Qos profile qos_profile_pub1 = QoSPresetProfiles.SYSTEM_DEFAULT.value self.publisher_pub1 = self.create_publisher( M1, 'topic/path1', qos_profile=qos_profile_pub1) self.timer_pub1 = self.create_timer(10.0, self.publisher_call_pub1) self.i = 0 #_____ # Subscribers #____________________________________________ # Servers #____________________________________________ # Clients #____________________________________________ # c1 # Qos profile qos_profile_c1 = QoSProfile( history=QoSHistoryPolicy.KEEP_ALL, durability=QoSDurabilityPolicy.SYSTEM_DEFAULT, reliability=QoSReliabilityPolicy.RELIABLE, depth=0) # Additional qos settings qos_profile_c1.liveliness = QoSLivelinessPolicy.SYSTEM_DEFAULT qos_profile_c1.deadline.sec = 0 qos_profile_c1.deadline.nsec = 0 qos_profile_c1.lifespan.sec = 0 qos_profile_c1.lifespan.nsec = 0 qos_profile_c1.liveliness_lease_duration.sec = 0 qos_profile_c1.liveliness_lease_duration.nsec = 0 qos_profile_c1.avoid_ros_namespace_conventions = False self.client_c1 = self.create_client(Addtwo, 'service1', qos_profile=qos_profile_c1) #_____ # Action Servers #____________________________________________ # as2 self.action_server_as2 = ActionServer( self, Dec, 'as2', execute_callback=self.action_execute_call_as2, goal_callback=self.action_goal_call_as2, cancel_callback=self.action_cancel_call_as2) #_____ # Action Clients #____________________________________________ # ac1 self.action_client_ac1 = ActionClient(self, Increase, 'ac1')
def main(args=None): # Argument parsing and usage parser = get_parser() parsed_args = parser.parse_args() # Configuration variables qos_policy_name = parsed_args.incompatible_qos_policy_name qos_profile_publisher = QoSProfile(depth=10) qos_profile_subscription = QoSProfile(depth=10) if qos_policy_name == 'durability': print('Durability incompatibility selected.\n' 'Incompatibility condition: publisher durability kind <' 'subscripition durability kind.\n' 'Setting publisher durability to: VOLATILE\n' 'Setting subscription durability to: TRANSIENT_LOCAL\n') qos_profile_publisher.durability = \ QoSDurabilityPolicy.RMW_QOS_POLICY_DURABILITY_VOLATILE qos_profile_subscription.durability = \ QoSDurabilityPolicy.RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL elif qos_policy_name == 'deadline': print( 'Deadline incompatibility selected.\n' 'Incompatibility condition: publisher deadline > subscription deadline.\n' 'Setting publisher durability to: 2 seconds\n' 'Setting subscription durability to: 1 second\n') qos_profile_publisher.deadline = Duration(seconds=2) qos_profile_subscription.deadline = Duration(seconds=1) elif qos_policy_name == 'liveliness_policy': print('Liveliness Policy incompatibility selected.\n' 'Incompatibility condition: publisher liveliness policy <' 'subscripition liveliness policy.\n' 'Setting publisher liveliness policy to: AUTOMATIC\n' 'Setting subscription liveliness policy to: MANUAL_BY_TOPIC\n') qos_profile_publisher.liveliness = \ QoSLivelinessPolicy.RMW_QOS_POLICY_LIVELINESS_AUTOMATIC qos_profile_subscription.liveliness = \ QoSLivelinessPolicy.RMW_QOS_POLICY_LIVELINESS_MANUAL_BY_TOPIC elif qos_policy_name == 'liveliness_lease_duration': print( 'Liveliness lease duration incompatibility selected.\n' 'Incompatibility condition: publisher liveliness lease duration >' 'subscription liveliness lease duration.\n' 'Setting publisher liveliness lease duration to: 2 seconds\n' 'Setting subscription liveliness lease duration to: 1 second\n') qos_profile_publisher.liveliness_lease_duration = Duration(seconds=2) qos_profile_subscription.liveliness_lease_duration = Duration( seconds=1) elif qos_policy_name == 'reliability': print( 'Reliability incompatibility selected.\n' 'Incompatibility condition: publisher reliability < subscripition reliability.\n' 'Setting publisher reliability to: BEST_EFFORT\n' 'Setting subscription reliability to: RELIABLE\n') qos_profile_publisher.reliability = \ QoSReliabilityPolicy.RMW_QOS_POLICY_RELIABILITY_BEST_EFFORT qos_profile_subscription.reliability = \ QoSReliabilityPolicy.RMW_QOS_POLICY_RELIABILITY_RELIABLE else: print('{name} not recognised.'.format(name=qos_policy_name)) parser.print_help() return 0 # Initialization and configuration rclpy.init(args=args) topic = 'incompatible_qos_chatter' num_msgs = 5 publisher_callbacks = PublisherEventCallbacks( incompatible_qos=lambda event: get_logger('Talker').info(str(event))) subscription_callbacks = SubscriptionEventCallbacks( incompatible_qos=lambda event: get_logger('Listener').info(str(event))) try: talker = Talker(topic, qos_profile_publisher, event_callbacks=publisher_callbacks, publish_count=num_msgs) listener = Listener(topic, qos_profile_subscription, event_callbacks=subscription_callbacks) except UnsupportedEventTypeError as exc: print() print(exc, end='\n\n') print('Please try this demo using a different RMW implementation') return -1 executor = SingleThreadedExecutor() executor.add_node(listener) executor.add_node(talker) try: while talker.publish_count < num_msgs: executor.spin_once() except KeyboardInterrupt: pass rclpy.shutdown() return 0
def __init__(self): super().__init__('cpu', namespace='') # Params #____________________________________________ # Publishers #____________________________________________ # toActuators # Qos profile qos_profile_toActuators = QoSPresetProfiles.SYSTEM_DEFAULT.value self.publisher_toActuators = self.create_publisher( Twist, 'topic/path/act', qos_profile=qos_profile_toActuators) self.timer_toActuators = self.create_timer( 0.0, self.publisher_call_toActuators) self.i = 0 #_____ # Subscribers #____________________________________________ # fromSonar1 # Qos profile qos_profile_fromSonar1 = QoSProfile( history=QoSHistoryPolicy.KEEP_LAST, durability=QoSDurabilityPolicy.SYSTEM_DEFAULT, reliability=QoSReliabilityPolicy.SYSTEM_DEFAULT, depth=15) # Additional qos settings qos_profile_fromSonar1.liveliness = QoSLivelinessPolicy.SYSTEM_DEFAULT qos_profile_fromSonar1.deadline.sec = 0 qos_profile_fromSonar1.deadline.nsec = 0 qos_profile_fromSonar1.lifespan.sec = 0 qos_profile_fromSonar1.lifespan.nsec = 0 qos_profile_fromSonar1.liveliness_lease_duration.sec = 0 qos_profile_fromSonar1.liveliness_lease_duration.nsec = 0 qos_profile_fromSonar1.avoid_ros_namespace_conventions = False self.subscriber_fromSonar1 = self.create_subscription( Distance, 'topic/path/s1', self.subscriber_call_fromSonar1, qos_profile=qos_profile_fromSonar1) self.subscriber_fromSonar1 #_____ # fromSonar2 # Qos profile qos_profile_fromSonar2 = QoSProfile( history=QoSHistoryPolicy.KEEP_LAST, durability=QoSDurabilityPolicy.SYSTEM_DEFAULT, reliability=QoSReliabilityPolicy.SYSTEM_DEFAULT, depth=15) # Additional qos settings qos_profile_fromSonar2.liveliness = QoSLivelinessPolicy.SYSTEM_DEFAULT qos_profile_fromSonar2.deadline.sec = 0 qos_profile_fromSonar2.deadline.nsec = 0 qos_profile_fromSonar2.lifespan.sec = 0 qos_profile_fromSonar2.lifespan.nsec = 0 qos_profile_fromSonar2.liveliness_lease_duration.sec = 0 qos_profile_fromSonar2.liveliness_lease_duration.nsec = 0 qos_profile_fromSonar2.avoid_ros_namespace_conventions = False self.subscriber_fromSonar2 = self.create_subscription( Distance, 'topic/path/s2', self.subscriber_call_fromSonar2, qos_profile=qos_profile_fromSonar2) self.subscriber_fromSonar2
def __init__(self): super().__init__('node1', namespace = '') # Params #____________________________________________ # p1 - INTEGER_ARRAY # Description: self.param_p1 = self.declare_parameter('p1', 32, descriptor=ParameterDescriptor(name='p1', type=7, description='', additional_constraints='', read_only=False, floating_point_range=[], integer_range=[])) # You can use your parameter p1 with type INTEGER_ARRAY # with self.get_parameter('p1')._value # You can also use your parameter from terminal or yaml file. #_____ # Publishers #____________________________________________ # Subscribers #____________________________________________ # sub1 # Qos profile qos_profile_sub1 = QoSPresetProfiles.SYSTEM_DEFAULT.value self.subscriber_sub1 = self.create_subscription(M1, 'topic/path1', self.subscriber_call_sub1, qos_profile = qos_profile_sub1) self.subscriber_sub1 #_____ # Servers #____________________________________________ # s1 # Qos profile qos_profile_s1 = QoSProfile(history = QoSHistoryPolicy.KEEP_ALL, durability = QoSDurabilityPolicy.SYSTEM_DEFAULT, reliability = QoSReliabilityPolicy.RELIABLE, depth =0) # Additional qos settings qos_profile_s1.liveliness = QoSLivelinessPolicy.SYSTEM_DEFAULT qos_profile_s1.deadline.sec = 0 qos_profile_s1.deadline.nsec = 0 qos_profile_s1.lifespan.sec = 0 qos_profile_s1.lifespan.nsec = 0 qos_profile_s1.liveliness_lease_duration.sec = 0 qos_profile_s1.liveliness_lease_duration.nsec = 0 qos_profile_s1.avoid_ros_namespace_conventions = False self.server_s1 = self.create_service(Addtwo, 'service1', self.server_call_s1, qos_profile = qos_profile_s1) #_____ # s2 # Qos profile qos_profile_s2 = QoSProfile(history = QoSHistoryPolicy.KEEP_ALL, durability = QoSDurabilityPolicy.SYSTEM_DEFAULT, reliability = QoSReliabilityPolicy.RELIABLE, depth =0) # Additional qos settings qos_profile_s2.liveliness = QoSLivelinessPolicy.SYSTEM_DEFAULT qos_profile_s2.deadline.sec = 0 qos_profile_s2.deadline.nsec = 0 qos_profile_s2.lifespan.sec = 0 qos_profile_s2.lifespan.nsec = 0 qos_profile_s2.liveliness_lease_duration.sec = 0 qos_profile_s2.liveliness_lease_duration.nsec = 0 qos_profile_s2.avoid_ros_namespace_conventions = False self.server_s2 = self.create_service(SetBool, 'service2', self.server_call_s2, qos_profile = qos_profile_s2) #_____ # Clients #____________________________________________ # Action Servers #____________________________________________ # as1 self.action_server_as1 = ActionServer(self, Increase, 'as1', execute_callback=self.action_execute_call_as1, goal_callback=self.action_goal_call_as1, cancel_callback=self.action_cancel_call_as1) #_____ # Action Clients #____________________________________________ # ac2 self.action_client_ac2 = ActionClient(self, Dec, 'ac2')