한 가지 일만 하는 프로그램
거북이 한 마리 움직이는 데 왜 프로그램이 두 개나 필요할까?
화면을 누르면 다음 장으로 넘어갑니다
나누기
로봇 프로그램을 작은 조각으로
로봇은 카메라를 읽고, 길을 찾고, 바퀴를 돌리는 일을 한꺼번에 합니다. 이것을 큰 프로그램 하나에 다 넣으면 고치기도, 다시 쓰기도 어렵습니다. ROS 2는 일마다 작은 프로그램으로 나누고, 그 하나하나를 노드(node)라고 부릅니다.
/camera, /planner 같은 이름은 설명을 위해 붙인 예입니다.
거북이
2강의 거북이도 노드 둘이었습니다
거북이 창을 띄운 turtlesim_node는 거북이를 그리고 움직이는 일만 합니다. 키보드를 읽는 일은 turtle_teleop_key가 따로 맡습니다. 그래서 2강에서 터미널도 두 개가 필요했습니다.
이름
실행 파일과 노드 이름은 다릅니다
ros2 run 패키지 실행파일은 프로그램을 실행합니다. 실행된 프로그램은 ROS 안에서 노드 이름으로 불립니다. turtle_teleop_key를 실행하면 노드 이름은 /teleop_turtle입니다.
실행 파일 하나가 노드를 여럿 만들 수도 있습니다. 지금 도는 노드 이름은 2편에서 직접 확인합니다.
좋은 점
하나가 멈춰도 나머지는 돕니다
따로 실행한 노드는 서로 다른 프로그램입니다. 한 노드가 오류로 멈춰도 다른 노드는 계속 돌고, 멈춘 노드만 고쳐 다시 켜면 됩니다. 잘 만든 노드는 다른 로봇에서도 그대로 다시 씁니다.
흩어져도
노드는 다른 컴퓨터에 있어도 됩니다
노드끼리는 네트워크로 이야기합니다. 그래서 로봇에 실린 컴퓨터의 노드와 내 노트북의 노드가 한 시스템처럼 이어집니다. 무거운 계산은 성능 좋은 컴퓨터에 맡길 수 있습니다.
같은 네트워크에 있고 ROS_DOMAIN_ID가 같아야 서로 보입니다(2강 8편).
대화
노드는 메시지를 주고받습니다
나뉜 노드들은 데이터를 주고받으며 함께 일합니다. 키보드 노드가 "앞으로 가라"는 메시지(message)를 보내면 거북이 노드가 받아서 움직입니다. 노드와 그 사이의 연결을 함께 그린 것이 ROS 그래프입니다(1강 6편).
가운데 네모 /turtle1/cmd_vel이 토픽입니다. 3편에서 자세히 봅니다.
다음 편