Skip to main content
Skip table of contents

센서 통신 프로토콜

이 섹션에서는 센서의 검출 데이터를 외부로 전송하기 위한 ROS, UDP와 같은 센서 통신 프로토콜 정보를 설명한다.


센서 종류 별로 지원하는 통신의 메시지 프로토콜 및 데이터 구조에 대해 설명한다.

Camera

시뮬레이터에서는 카메라 센서의 통신으로 ROS, UDP, Apollo 를 지원한다.

ROS

카메라 센서에서 전송하는 ROS 메시지의 프로토콜 정보는 아래와 같다.

카메라의 Depth 이미지는 다른 GT 타입과 달리 ROS 메시지가 아래와 같다.

 

UDP

카메라 센서에서 전송하는 UDP 메시지 프로토콜 정보는 아래와 같다.

23.R1.0 에서는 카메라 센서의 UDP 패킷 구조가 아래와 같이 바뀌었다.

  • Timestamp (8 bytes) 정보 추가

  • Raw Image Data를 JPEG 압축하여 전송. 같은 Resolution이더라도 매번 Packet의 크기, 개수 변동이 생길 수 있음

  • JPEG Packet의 크기가 64987 Byte가 넘어가면 64987Byte씩 여러 Packet으로 나누어 전송

데이터 패킷 구조

카메라 센서 데이터를 전송하는 일반적인 UDP 패킷 구조는 아래와 같다.

  • Header (3byte) : Packet Header 값. “MOR”

  • Timestamp (8byte) : TotalSecond(4byte) + Nanosecond(4byte) 24.R1.0 UPDATE

  • Index (4byte) : 해당 Packet 내 JPEG Data Block의 순서

  • Size (4byte) : 해당 Packet 내 JPEG Data Block의 크기

  • Partial JPEG Data (가변, 최대 64,979byte) : JPEG 압축된 이미지의 일부 데이터 24.R1.0 UPDATE

  • Tail (2byte) : Packet의 Tail 값. “AI”. 마지막 Packet인 경우 “EI”

 

2D/3D BBox 데이터 패킷 구조

23.R1.0 에서는 카메라 센서의 2D/3D BBox 데이터를 UDP 전송 기능을 제공한다.

  • Traffic Light을 제외한 Vehicle, Pedestrian, Obstacle 객체에 대한 2D/3D BBox 데이터 정보가 하나의 UDP 패킷에 가 함께 전송된다.
    해당 객체가 카메라 뷰에 존재하는 경우에만 송신된다.

ObjectX Data에 해당하는 Packet의 크기가 64987 Byte가 넘어가면 64987Byte씩 여러 Packet으로 전송

UDP protocol.png
  • 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”

2D LiDAR

시뮬레이터에서는 2D 라이다 센서의 통신으로 ROS, UDP를 지원한다.

ROS

설정 방법은 카메라와 동일하며 아래와 같은 메시지 프로토콜을 따른다.

UDP

2D LiDAR 에서 전송하는 UDP 메세지 프로토콜 정보는 아래와 같다.

2D LiDAR 센서 프로토콜은 각 제조사 별로 상이하다.

2D LiDAR를 전송하는 UDP 패킷 구조는 아래와 같다.

  • 2D LiDAR Model

    • MORAI LiDAR

데이터 패킷 구조

  1. MORAI LiDAR

    1. Total Size : 1107 byte

    2. Payload Size : 1080 byte

Name

Value

Type

Field

Len [byte]

Description

Units

1

start_indicator

0x23

byte

0

1

“#”

 

2

header_name

“2DLidar”

byte[7]

1-7

7

 

 

3

doller_indicator

0x24

byte

8

1

“$”

 

4

data_length

1080

uint32_t

9-12

4

 

 

5

 

aux_data

tx

 

float

13-16

4

 

 

6

ty

 

float

17-20

4

 

 

7

heading

 

float

21-24

4

 

 

8

Payload

 

byte[1080]

25-1104

3 * 360

 

 

9

tail01

0x0D

byte

1105

1

 

 

10

tail02

0x0A

byte

1106

1

 

 

3D LiDAR

시뮬레이터에서는 3D 라이다 센서의 통신으로 ROS, UDP를 지원한다.

 

ROS

설정 방법은 카메라와 동일하며 아래와 같은 메시지 프로토콜을 따른다.

3D LiDAR ROS 데이터 수신 방법은 2가지가 있다. 24.R2.0 UPDATE

  1. 시뮬레이터에서 3D LiDAR을 설치 후, Sensor Network 를 ROS 로 설정하는 방법

  2. 시뮬레이터에서 3D LiDAR을 설치 후 Sensor Network 를 UDP 로 설정한 뒤, Velodyne pkg 를 이용해서 ROS 로 변환하는 방법

    1. Velodyne_pointcloud 설치
      $ sudo apt-get install ros-{$ROS_DISTRO}-velodyne

    2. roslaunch 실행

      1. VLP16인 경우
        $roslaunch velodyne_pointcloud VLP16_points.launch

      2. HDL32인 경우
        $roslaunch velodyne_pointcloud 32e_points.launch

      3. HDL64인 경우
        $roslaunch velodyne_pointcloud 64e_S3.launch

        1. 3D LiDAR 설정 방법에 관련해서는 기존 Velodyne 공식 드라이버 대로 진행하되, HDL64에 한해서는 아래 Github링크 etc 폴더 내에 "64e_s3-xiesc.yaml" 파일을 사용한다.

          1. HDL64 yaml 파일 24.R2.0 UPDATE

    3. 실행한 3D LiDAR의 pointcloud에 RPM값 입력하기 (예: HDL32)
      roslaunch velodyne_pointcloud 32e_points.launch rpm:={RPM Value}

{RPM Value} 는 설정한 Rotation Rate에 대응하는 값 입력

◦ RPM = Rotation Rate * 60e

◦ 예시) 5Hz 설정 시 → 300 입력

◦ RPM 미 입력 시 Default 값인 600 (10Hz)으로 설정됨

Veloview에서 RPM값 확인 시, Veloview의 버전에 따라 "No RPM" 현상발생할 수 있다. 24.R2.0 UPDATE

: 업데이트 된 Veloview 5.x 버전을 사용 시 RPM 값이 출력 되지 않을 수 있으나, Veloview 4.1.3 버전에서는 정상 출력 되는 것을 확인

UDP

시뮬레이터에 제공하는 3D LiDAR Protocol은 아래의 Velodyne의 Protocol을 그대로 따른다.

image-20240131-013128.png

 

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

설정 방법은 카메라와 동일하며 아래와 같은 메시지 프로토콜을 따른다.

 

UDP 24.R2.2 UPDATE

설정 방법은 카메라 센서와 동일하며 아래와 같은 프로토콜을 따른다.

imudatapacket.png
  • UDP Packet Field (총 107 byte)

    • Header (9 byte) : Packet Header 값. “#IMUData$“

    • Size (4 byte) : 해당 Packet 내 IMU Data 의 크기 값. “80“

    • Aux Data(12 byte) : 추가 데이터 필드. 고정 값 “0”

    • IMU Data(32 + 24 + 24 = 80 byte) : IMU Data Block

      • Orientation (8 x 4 = 32 byte) : IMU Sensor 의 자세값. Quaternion으로 표현

      • Angular Velocity (8 x 3 = 24 byte) : IMU Sensor 의 각속도 값. (rad/s)

      • Linear Acceleration (8 x 3 = 24 byte) : IMU Sensor 의 선가속도 값. (m/s²)

    • Tail (2 byte) : Packet 의 Tail 값. “0x0D, 0x0A“

 

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 정보

 

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.