한 가지 일만 하는 프로그램

거북이 한 마리 움직이는 데 왜 프로그램이 두 개나 필요할까?

화면을 누르면 다음 장으로 넘어갑니다

나누기

로봇 프로그램을 작은 조각으로

로봇은 카메라를 읽고, 길을 찾고, 바퀴를 돌리는 일을 한꺼번에 합니다. 이것을 큰 프로그램 하나에 다 넣으면 고치기도, 다시 쓰기도 어렵습니다. 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편에서 자세히 봅니다.

다음 편

지금 내 컴퓨터에는 어떤 노드가 돌고 있을까요?

2편지금 어떤 노드가 돌고 있나 3강 목록