센서 통신 프로토콜
이 섹션에서는 센서의 검출 데이터를 외부로 전송하기 위한 ROS, UDP와 같은 센서 통신 프로토콜 정보를 설명한다.
센서 종류별로 지원하는 통신의 메시지 프로토콜 및 데이터 구조에 대해 설명한다.
Camera
시뮬레이터에서는 카메라 센서의 통신으로 ROS, UDP, Apollo를 지원한다.
ROS
카메라 센서에서 전송하는 ROS 메시지의 프토토콜 정보은 아래와 같다.
Default Topic Name : /image_jpeg/compressed
Message: sensor_msgs/CompressedImage (sensor_msgs/CompressedImage Documentation)
FrameID : Camera
카메라의 Depth 이미지는 다른 GT 타입과 달리 ROS 메시지가 아래와 같다.
Default Topic Name : /image
Message: sensor_msgs/Image (http://docs.ros.org/en/noetic/api/sensor_msgs/html/msg/Image.html)
FrameID : Camera
UDP
카메라 센서에서 전송하는 UDP 메시지 프토토콜 정보는 아래와 같다.
23.R1.0 에서는 카메라 센서의 UDP 패킷 구조가 아래와 같이 바뀌었다.
Timestamp (8 bytes) 정보 추가
Raw Image Data를 JPEG 압축하여 전송. 같은 Resolution이더라도 매번 Packet의 크기, 개수 변동이 생길 수 있음.
JPEG Packet의 크기가 64987 Byte가 넘어가면 64987Byte씩 여러 Packet으로 나누어 전송
전송 데이터 패킷 구조
Header (3byte) : Packet Header 값.“MOR”
Timestamp (8byte) : TotalSecond(4byte) + Millisecond(4byte)
Index (4byte) : 해당 Packet 내 JPEG Data Block의 순서
Size (4byte) : 해당 Packet 내 JPEG Data Block의 크기
Partial JPEG Data (가변, 최대 64,987byte) : JPEG 압축된 이미지의 일부 데이터
Tail (2byte) : Packet의 Tail 값. “AI”. 마지막 Packet인 경우 “EI”
2D/3D BBox 데이터 패킷 구조
23.R1.0 에서는 카메라 센서의 2D/3D BBox 데이터를 UDP 전송 기능을 제공한다.
UDP 패킷에는 Traffic Light를 제외한 Vehicle, Pedestrian, Obstacle 객체에 대한 2D/3D BBox 데이터 정보가 함께 전송된다.
ObjectX Data에 해당하는 Packet의 크기가 64987 Byte가 넘어가면 64987Byte씩 여러 Packet으로 전송
UDP Packet Field (총 (115 x N) + 13 byte)
Header (3byte) : Packet 데이터 종류 설명
“BOX” 로 고정 값
Timestamp (8byte) : TotalSecond(4byte) + Millisecond(4byte)
Index (4byte)
Size (4byte)
Object1 Data Block (96 + 16 + 3 = 115 byte) : Object 별 정보가 담긴 Block
3D BBOX (4x3x8 = 96 byte) : 3D BBOX의 8-point 코너값 출력
2D BBOX (4x4 = 16 byte) : 2D BBOX의 표현 값 출력
Class (3 byte) : 해당 Object의 Tag 정보
Tail (2byte) : Packet의 Tail 값. “EO”
3D LiDAR
시뮬레이터에서는 3D 라이다 센서의 통신으로 ROS, UDP를 지원한다.
ROS
설정 방법은 카메라와 동일하며 아래와 같은 메시지 프로토콜을 따른다.
Message Type : sensor_msgs/PointCloud2 (https://docs.ros.org/en/melodic/api/sensor_msgs/html/msg/PointCloud2.html)
Default Topic Name : /lidar3D
Velodyne 공식 드라이버의 PointCloud2 정의와 동일
Velodyne 3D 라이다 모델은 시뮬레이터에서 ROS 통신을 지원하지 않으므로 아래와 같은 방법으로 통신한다.
UDP통신으로 velodyne_LiDAR에서 나오는 데이터를 velodyne package를 이용하여sensor_msgs/PointCloud2로 변환
roslaunch velodyne_pointcloud 32e_points.launch rpm:={RPM Value}
{RPM Value} 는 설정한 Rotation Rate에 대응하는 값 입력
RPM = Rotation Rate * 60e
예시) 5Hz 설정 시 → 300 입력
RPM 미입력 시 Default 값인 600(10Hz)으로 설정됨.
UDP
시뮬레이터에 제공하는 3D LiDAR Protocol은 아래의 Velodyne의 Protocol을 그대로 따른다.

GPS
설정 방법은 카메라와 동일하며 아래와 같은 메시지 프로토콜을 따른다.
ROS
Message Type : morai_msgs/GPSMessage
Default Topic : /gps
타입 설명 : GPS정보
UDP
설정 방법은 카메라 센서와 동일하며 아래와 같은 프로토콜을 따른다.


NMEA0183 Protocol을 따르고, RMC/GGA sentence 두가지 format으로 동시에 들어온다.
Format Type(char): GPRMC/GPGGA. Format의 종류를 나타낸다.
Time(float) : GPS 정보가 들어올 때의 time stamp.
차량 위치 정보(Lat/Long/Alt, float) : GPS 센서에서 측정한 위도/경도/고도.
IMU
ROS
설정 방법은 카메라와 동일하며 아래와 같은 메시지 프로토콜을 따른다.
Message Type : sensor_msgs/Imu
Default Topic : /Imu
타입 설명 : IMU정보
UDP
설정 방법은 카메라 센서와 동일하며 아래와 같은 프로토콜을 따른다.

전체 패킷 크기 : 107 Bytes
데이터 크기 : 80 Bytes
Orientation(ori_*)
방향을 나타내는 데이터이며 Quaternian이다.
Angular Velocity(ang_vel_*)
각속도를 나타내는 데이터이며 rad/s 단위이다.
Linear Acceleration(lin_acc_*)
가속도를 나타내는 데이터이며 m/s^2 단위이다.
Radar
ROS
Message Type : morai_msgs/RadarDetections.msg
Default Topic : /radar
타입 설명 : radar정보
Header header
uint16 point_id
float32 x
float32 y
float32 z
float32 azimuth
float32 rangerate
float32 rcs
Radar(for RVIZ visualization)
Message Type : sensor_msgs/PointCloud
Default Topic : /radar
타입 설명 : radar pcd정보

