rclpy.qos.QoSProfile
은 ROS 2에서 Quality of Service (QoS) 설정을 관리하는 데 사용됩니다. QoS 설정은 ROS 2 통신(메시지 발행 및 구독)의 신뢰성, 지속성, 전달 속도 등을 제어하는 중요한 매개변수들을 정의합니다. 이를 통해 네트워크의 다양한 조건과 요구 사항에 맞게 통신을 최적화할 수 있습니다.
QoSProfile
객체를 생성할 때는 다음과 같은 QoS 설정을 지정할 수 있습니다:
history
: 메시지의 저장 방식을 결정합니다. KEEP_LAST
는 최근 N개의 메시지를 저장하고, KEEP_ALL
은 모든 메시지를 저장합니다. (KEEP_LAST)depth
: history
가 KEEP_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으로, reliability
를 RELIABLE
로 설정하여 사용자 정의 QoSProfile
을 생성하고, 이를 create_subscription
메소드의 인자로 전달하여 구독자를 생성합니다. 이렇게 함으로써, 구독자는 최대 10개의 최신 메시지를 저장하고, 발행자와의 통신이 신뢰성 있게 이루어지도록 설정됩니다.