sensor_msgs

라이다는 한 바퀴 돌며 잰 거리 수백 개를 어떻게 보낼까?

표준 센서 메시지

센서 메시지는 sensor_msgs에 있습니다

센서마다 표준 메시지가 정해져 있습니다. 그래서 어느 회사 라이다든 LaserScan으로 내보내면, RViz 같은 도구가 같은 방식으로 받아 그립니다.

오른쪽은 TurtleBot3에서 쓰는 토픽 이름입니다(14강). 3D 라이다는 PointCloud2를 씁니다.

LaserScan

거리를 각도 순서대로 늘어놓습니다

라이다는 angle_min에서 angle_max까지, angle_increment 간격마다 거리를 잽니다. 각도는 라이다 프레임(header.frame_id)의 x축이 0이고(보통 로봇 앞), 반시계 방향이 +입니다.

그림은 빔을 줄여 그렸습니다. 실제 라이다는 한 바퀴에 수백 개를 잽니다.

ranges 배열

i번째 거리는 i번째 빔입니다

잰 거리는 float32[] ranges 배열에 순서대로 들어갑니다. i번째 값의 각도는 angle_min + i × angle_increment입니다.

아무것도 맞히지 못한 빔은 inf로 올 수 있습니다. range_min~range_max 밖의 값은 버리라고 정의 파일에 적혀 있습니다.

따라 하기

LaserScan을 펼쳐 봅니다

ros2 interface show sensor_msgs/msg/LaserScan을 쳐 보세요. 맨 앞 header에는 잰 시각과 라이다 프레임 이름이 들어갑니다(4편).

Header 안쪽 네 줄은 줄였습니다. 실제 /scan은 14강 8편에서 봅니다.

Image

사진은 한 줄로 편 바이트 배열입니다

Image는 크기 height·width, 픽셀 형식 encoding, 한 줄의 바이트 수 step, 그리고 픽셀을 위 줄부터 이어 붙인 uint8[] data로 사진을 담습니다.

640×480 rgb8이면 step은 1920, data는 921,600바이트입니다.

크기

센서 메시지는 크고 자주 옵니다

사진 한 장은 속도 명령 수만 개 크기이고, 카메라는 이것을 1초에 수십 장 보냅니다. 센서 토픽은 ros2 topic bw(3강 7편)로 양을 확인하는 습관을 들이세요.

데이터 칸만 어림한 크기입니다. 센서용 전달 설정은 11강 6편에서 봅니다.

다음 편

토픽 말고 서비스와 액션에도 모양이 있을까요?

8편인터페이스는 세 종류 4강 목록