미리 정해 둔 프로필
라이다 토픽을 구독했는데 왜 아무것도 안 올까?
센서 데이터
센서는 지금 값이 중요합니다
센서 데이터는 모두 받는 것보다 제때 받는 것이 중요할 때가 많습니다. 잡히는 즉시 가장 새 값을 받고, 몇 개쯤 잃어도 괜찮습니다. 2편의 Best effort가 어울리는 데이터입니다.
프로필
자주 쓰는 조합에 이름이 있습니다
정책을 하나하나 고르기는 번거롭습니다. 그래서 ROS 2는 쓰임새별로 잘 맞는 정책을 묶어 미리 정해 둔 프로필(predefined profile)을 줍니다. rclpy에서는 rclpy.qos에 있습니다.
숫자 10만 넘길 때 쓰이는 것이 기본(default) 프로필입니다(1편).
sensor_data
기본값과 두 군데가 다릅니다
qos_profile_sensor_data는 Reliability를 Best effort로, Depth를 5로 줄인 프로필입니다. 잃어도 다시 보내지 않고, 오래된 메시지를 많이 쌓아 두지 않습니다.
코드
프로필 이름을 그대로 넘깁니다
숫자 10을 넣던 자리에 프로필을 넣으면 됩니다. 퍼블리셔도 같습니다. 센서를 직접 내보내는 노드라면 발행 쪽도 이 프로필로 맞추는 경우가 많습니다.
예시 코드입니다. on_scan은 직접 만든 콜백 메서드 이름입니다.
흔한 실수
기본값으로 구독하면 끊길 수 있습니다
센서 드라이버는 흔히 Best effort로 발행합니다. 여기에 숫자 10, 곧 Reliable로 구독하면 5편의 규칙대로 끊깁니다. 구독 쪽을 qos_profile_sensor_data로 두면 발행이 Reliable이든 Best effort든 이어집니다.
따라 하기
명령줄에서도 프로필 이름을 씁니다
터미널 1에서 ros2 topic pub /chatter std_msgs/msg/String "{data: hi}" --qos-profile sensor_data를 실행하고, 터미널 2에서 ros2 topic info /chatter -v로 확인합니다. 발행 쪽 Reliability가 BEST_EFFORT로 보입니다.
출력 일부만 보였습니다. ros2 topic echo에도 --qos-profile 옵션이 있습니다.
다음 편