ROS 그래프 한눈에
로봇 하나에 프로그램이 몇 개나 돌고 있을까?
점과 선
노드는 점, 토픽은 잇는 길
한 가지 일을 맡는 프로그램이 노드(node)이고, 노드끼리 데이터를 주고받는 이름 붙은 길이 토픽(topic)입니다. 키보드 노드가 토픽에 명령을 올리면 거북이 노드가 받아 움직입니다.
2편의 "작은 프로그램으로 나누기"가 바로 노드입니다. 자세히는 3강에서 봅니다.
ROS 그래프
지금 도는 전부가 한 그래프
동시에 돌면서 데이터를 주고받는 노드들과 그 연결 전체를 ROS 그래프(ROS graph)라고 합니다. 로봇이 지금 어떻게 돌아가는지는 이 그래프 한 장으로 보입니다.
/listener는 설명을 위해 붙인 노드 이름입니다. 토픽 말고 다른 연결은 다음 편에서 봅니다.
로봇이라면
로봇의 그래프는 훨씬 큽니다
15강에서 도는 그래프의 뼈대입니다. 라이다는 거리를 재 /scan으로 내보내고, /map은 지도를 그리는 노드(SLAM)나 저장한 지도를 내는 노드가 냅니다. 내비게이션은 둘을 보고 속도 명령 /cmd_vel을 바퀴로 보냅니다.
15강에서는 먼저 SLAM으로 지도를 그리고, 저장한 지도로 바꿔 달립니다. 점선은 지도를 그릴 때만 쓰는 길입니다. 노드 이름은 역할로 줄였습니다.
살아 있다
노드가 들어오고 나갑니다
그래프는 실행 중에도 바뀝니다. 새 노드를 띄우면 같은 이름의 토픽에 저절로 이어지고, 노드를 끄면 그 자리만 빠집니다. 다른 노드를 다시 켤 필요가 없습니다.
따라 하기
그래프를 명령으로 엿봅니다
거북이와 키보드 노드를 띄운 채로 새 터미널에서 ros2 node list와 ros2 topic list를 칩니다. 그래프의 점(노드)과 길(토픽)이 이름으로 나옵니다.
설치(2강)와 거북이 띄우기(2강 4·5편)를 마친 뒤에 해 보세요.
그림으로
rqt_graph로 한눈에 봅니다
이름 목록보다 그림이 빠를 때는 rqt_graph를 띄웁니다. 지금 도는 노드와 그 사이 토픽을 화살표로 그려 줍니다. 무엇이 무엇과 이어졌는지 막힐 때 가장 먼저 여는 도구입니다.
2강 6편에서 직접 띄워 봅니다.
다음 편