ros2 topic pub

키보드 노드 없이 명령 한 줄로 거북이를 움직일 수 있을까?

명령 모양

세 가지를 차례로 적습니다

ros2 topic pub 뒤에 토픽 이름, 메시지 타입, 보낼 값을 차례로 적습니다. 토픽과 타입은 5편의 ros2 topic info로 확인한 그대로 씁니다.

pub은 publish(발행)의 줄임입니다. 이 명령도 잠깐 퍼블리셔 노드 하나를 만들어 보냅니다.

값 적기

값은 YAML로 적습니다

보낼 값은 5편 echo에서 본 모양 그대로를 YAML로 적습니다. 명령줄에서는 한 줄로 쓰려고 중괄호 {}로 묶습니다. 바꾸고 싶은 칸만 적어도 됩니다.

Twist 메시지는 4강 5편에서 자세히 봅니다.

따라 하기

이 명령을 그대로 복사합니다

아래 한 줄을 그대로 복사해 ③ 터미널에 붙여 넣습니다.

ros2 topic pub /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"

그림은 화면 폭 때문에 나눠 적었습니다. 키보드 노드는 꺼도 되고 켜 두어도 됩니다.

결과

앞으로 가며 돌아 원을 그립니다

앞으로 가면서(linear.x 2.0) 동시에 왼쪽으로 돌기(angular.z 1.8) 때문에 거북이는 원을 그립니다. pub은 기본으로 1초에 한 번씩 같은 메시지를 계속 보냅니다. 멈출 때는 Ctrl+C를 누릅니다.

turtlesim은 1초 넘게 명령이 오지 않으면 멈춥니다. 그래서 계속 보내야 계속 움직입니다.

주의

빈칸 하나만 틀려도 실패합니다

YAML은 콜론 뒤에 꼭 빈칸을 둡니다. x:2.0처럼 붙이면 x:2.0을 통째로 이름 하나로 읽어 버립니다. 괄호 짝이 안 맞거나 바깥 따옴표가 없어도 실패합니다. 그래서 손으로 치지 말고 복사한 뒤 숫자만 고칩니다.

한 번만

한 번만 보낼 수도 있습니다

--once는 메시지 하나만 보내고 끝냅니다. -w 2는 받는 쪽이 둘(거북이와 5편의 echo) 잡힐 때까지 기다렸다가 보내라는 뜻입니다. 더 자주 보내려면 --rate 10처럼 1초에 몇 번 보낼지 적습니다.

echo를 껐다면 -w 2 없이 씁니다. --once만 쓰면 받는 쪽 하나를 기다립니다.

다음 편

명령은 1초에 한 번 보냈습니다. 거북이 위치는 몇 번 올까요?

7편얼마나 자주 오나 3강 목록