Durability
지도는 한 번만 보내는데, 나중에 켠 RViz는 어떻게 받을까?
Volatile
기본값에서는 지나간 메시지를 못 받습니다
Durability(지속성)는 지나간 메시지를 남겨 둘지 정합니다. 기본값 VOLATILE은 아무것도 남기지 않습니다. 그래서 구독자가 늦게 합류하면, 그 전에 발행된 메시지는 받을 길이 없습니다.
Transient local
발행 쪽이 들고 있다가 건넵니다
TRANSIENT_LOCAL이면 발행 쪽이 보낸 메시지를 들고 있다가, 늦게 합류한 구독자에게 건네줍니다. 단, 구독 쪽도 Transient local을 요청해야 지난 메시지를 받습니다.
ROS 1의 latch와 비슷한 기능입니다. 발행 노드가 꺼지면 들고 있던 메시지도 사라집니다.
얼마나
다시 보내는 양은 depth만큼입니다
발행 쪽은 History와 Depth만큼만 들고 있습니다(3편). Depth가 3이면 최근 3개를 늦게 온 구독자에게 다시 보냅니다. 마지막 값 하나만 있으면 되는 데이터는 Depth를 1로 둡니다.
어디에 쓰나
/tf_static과 /map이 이렇게 옵니다
로봇 몸체와 센서 사이처럼 변하지 않는 좌표 관계는 /tf_static으로 한 번만 보냅니다(12강 6편). 지도 서버도 지도를 /map에 보내 둡니다. 둘 다 Transient local, Depth 1이라 나중에 켠 노드도 받습니다.
따라 하기
먼저 보내고, 나중에 엿들어 봅니다
터미널 1에서 ros2 run tf2_ros static_transform_publisher --frame-id world --child-frame-id box를 실행합니다. 몇 초 뒤 터미널 2에서 ros2 topic echo /tf_static을 실행하면, 이미 지나간 변환이 바로 나옵니다.
출력 일부만 보였습니다. 명령은 12강 6편에서 자세히 봅니다.
RViz
지도가 안 보이면 Durability부터
15강 3편에서 RViz로 지도를 볼 때, 지도가 늦게 오거나 아예 안 보일 수 있습니다. 이때 Map 표시의 Topic 아래 Durability Policy를 Transient Local로 맞추면, 이미 발행된 지도도 받아 옵니다.
다음 편