[rclpy] QoSProfile

About_work·2024년 2월 5일
0

ros2

목록 보기
13/41

rclpy.qos.QoSProfile은 ROS 2에서 Quality of Service (QoS) 설정을 관리하는 데 사용됩니다. QoS 설정은 ROS 2 통신(메시지 발행 및 구독)의 신뢰성, 지속성, 전달 속도 등을 제어하는 중요한 매개변수들을 정의합니다. 이를 통해 네트워크의 다양한 조건과 요구 사항에 맞게 통신을 최적화할 수 있습니다.

QoSProfile 사용법

QoSProfile 객체를 생성할 때는 다음과 같은 QoS 설정을 지정할 수 있습니다:

  • history: 메시지의 저장 방식을 결정합니다. KEEP_LAST는 최근 N개의 메시지를 저장하고, KEEP_ALL은 모든 메시지를 저장합니다. (KEEP_LAST)
  • depth: historyKEEP_LAST로 설정된 경우, 저장할 메시지의 수를 지정합니다. (10)
  • reliability: 메시지 전달의 신뢰성을 설정합니다. RELIABLE은 모든 메시지가 도착하도록 보장하고, BEST_EFFORT는 가능한 최선을 다하지만 일부 메시지가 유실될 수 있음을 의미합니다. (RELIABLE)
  • durability: 메시지의 지속성을 설정합니다. VOLATILE은 지속성이 없음을, TRANSIENT_LOCAL은 구독자가 연결될 때 이전에 발행된 메시지를 받을 수 있음을 의미합니다. (VOLATILE)

예제

구독자를 생성할 때 QoSProfile을 사용하는 예제는 다음과 같습니다:

import rclpy
from rclpy.node import Node
from std_msgs.msg import String
from rclpy.qos import QoSProfile

class MySubscriber(Node):
    def __init__(self):
        super().__init__('my_subscriber')
        
        # 사용자 정의 QoS 설정
        qos_profile = QoSProfile(depth=10, reliability=QoSProfile.ReliabilityPolicy.RELIABLE)
        
        self.subscription = self.create_subscription(
            String,
            'topic',
            self.listener_callback,
            qos_profile)

    def listener_callback(self, msg):
        self.get_logger().info('Received message: "%s"' % msg.data)

def main(args=None):
    rclpy.init(args=args)
    my_subscriber = MySubscriber()
    rclpy.spin(my_subscriber)
    my_subscriber.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()

이 예제에서는 depth를 10으로, reliabilityRELIABLE로 설정하여 사용자 정의 QoSProfile을 생성하고, 이를 create_subscription 메소드의 인자로 전달하여 구독자를 생성합니다. 이렇게 함으로써, 구독자는 최대 10개의 최신 메시지를 저장하고, 발행자와의 통신이 신뢰성 있게 이루어지도록 설정됩니다.

profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글