std_msgs

숫자 하나 보내려고 메시지를 새로 만들어야 할까?

감싸기

기본 타입 하나를 data 칸에 담습니다

std_msgs 패키지에는 기본 타입 하나만 감싼 메시지가 있습니다. String, Int32, Float64, Bool 같은 것들이고, 필드는 모두 data 하나뿐입니다.

따라 하기

글자 한 줄을 보내고 받아 봅니다

터미널 1에서 ros2 topic pub으로 보내고, 터미널 2에서 ros2 topic echo /chatter로 받습니다. 1초에 한 번씩 data: hello가 찍힙니다.

보내는 명령 전체: ros2 topic pub /chatter std_msgs/msg/String "{data: hello}". 터미널 1의 출력은 줄였고, 멈출 때는 Ctrl+C입니다.

코드에서는

코드에서도 같은 이름으로 꺼냅니다

타입 이름의 /를 .으로 바꾸면 파이썬에서 불러올 이름이 됩니다. 메시지를 만든 뒤 필드에 값을 넣는 방식도 명령줄과 같습니다.

퍼블리셔 노드는 6강 5편에서 직접 만듭니다.

한계

숫자만으로는 뜻이 전해지지 않습니다

Float64의 0.5는 받는 쪽이 무엇인지 알 수 없습니다. 같은 0.5도 Twist의 linear.x에 있으면 "앞으로 초속 0.5 m"로 읽힙니다.

그래서 std_msgs의 정의 파일 주석은 이 타입들을 Foxy부터 권하지 않고, 뜻이 드러나는 메시지를 쓰라고 적어 두었습니다.

계속 쓰는 것

std_msgs에서 꾸준히 쓰는 것은 Header

Header는 혼자 쓰기보다 다른 메시지 안에 들어가 "언제, 무엇을 기준으로 잰 값인지"를 적는 칸입니다. 다음 편에서 자세히 봅니다.

ColorRGBA는 색, Empty는 칸이 없는 "신호만" 메시지입니다.

고르는 순서

타입은 이 순서로 고릅니다

먼저 뜻이 맞는 표준 타입을 찾고, 없으면 내 타입을 만듭니다. String, Float64 같은 단순 타입은 지금처럼 명령줄로 연습하거나 시험할 때 편합니다.

다음 편

그 값은 언제 잰 것일까요?

4편언제 찍힌 데이터인가 4강 목록