UDP 통신 메세지
본 섹션에서는 시뮬레이터에서 지원하는 통신에 따라, 주고받는 메시지의 종류 및 데이터 구조 등에 대한 UDP 메시지 프로토콜에 대해 기술한다.
UDP 통신 메시지
Network Settings 에서 제공하는 Ego Network 및 Simulator Network 에서 UDP 통신으로 주고받는 메시지 타입, 각 메시지의 패킷 구조 및 데이터 크기와 같은 세부 프로토콜 정보를 설명한다.
Ego Network
Ego Network 로 전송되는 UDP 메시지 및 각 메시지 별 프로토콜 정보는 아래와 같다.
Ego Ctrl Cmd
메시지 정의: 차량 제어 메시지 (User → SIM)
메시지 프로토콜:
전체 패킷 크기 : 59 Bytes
데이터 크기 : 27 Bytes
Name | Type | Field | Lenth [byte] | Units | Value | Description |
|---|---|---|---|---|---|---|
start_indicator | byte | 0 | 1 | - | 0x23 | “#” |
header_name | byte[] | 1-12 | 12 | - | “MoraiCtrlCmd” |
|
doller_indicator | byte | 13 | 1 | - | 0x24 | “$” |
data_length | uint32_t | 14-17 | 4 | - |
| |
aux_data | byte[12] | 18-29 | 12 | - |
| |
ctrl_mode | byte | 30 | 1 | - | 1 : Keboard, 2 : AutoMode | |
gear | byte | 31 | 1 | - |
| |
cmd_type | byte | 32 | 1 | - | 제어 방식을 결정하는 인덱스
| |
velocity | float | 33-36 | 4 | km/h | 종방향 속도 제어
| |
acceleration | float | 37-40 | 4 | m/s2 | 종방향 가속도 제어
| |
accel | float | 41-44 | 4 | - | 가속 페달 입력값 (0 ~ 1) | |
brake | float | 45-48 | 4 | - | 종방향 브레이크 제어 명령
| |
front_steer | float | 49-52 | 4 | deg | 전륜 조향 제어 명령
| |
rear_steer | float | 53-56 | 4 | - | 후륜 조향 제어 명령
| |
tail01 | byte | 57 | 1 | - | 0x0D |
|
tail02 | byte | 58 | 1 | - | 0x0A |
|
23.R.10 에서는 종방향 속도 제어 방식이 가속도 제어 방식으로 변경되어 속도 증가 시에는 1m/s2의 제한, 속도 감소 시에는 -2m/s2의 제한이 걸리도록 하여 한번에 갑자기 속도가 증가하거나 감속하여 채터링이 발생하는 현상을 방지했다. 따라서 아래 그림과 같이 불연속적인 속도 입력에 대한 반응 시간은 느려지나 안정적으로 목표 속도로 수렴하도록 변경되었다.
.png?inst-v=f813e1d3-ceac-44d7-9531-fdeef7cab880)
Ground Vehicle Direct Ctrl Cmd
메시지 정의: Wheel-based Ground Vehicle (차량 및 로봇)을 직접 제어하기 위한 메시지 (User → SIM)
메시지 프로토콜
전체 패킷 크기: 85 Bytes
데이터 크기: Header(33byte) + Payload(52byte)
Header
msg_type : 65
Name | Type | Field | Lenth [byte] | Description |
|---|---|---|---|---|
header_version | uint32_t | 0-3 | 4 | default: 0 |
msg_type | uint32_t | 4-7 | 4 | 메시지 별 상이 |
msg_size | uint32_t | 8-11 | 4 | default: 0 |
protocol_type | uint8_t | 12 | 1 | default: 0 |
send_count | uint16_t | 13-14 | 2 | default: 0 |
msg_frames | uint32_t | 15-18 | 4 | default: 0 |
frame_size | uint32_t | 19-22 | 4 | default: 0 |
frame_pos | uint32_t | 23-26 | 4 | default: 0 |
frame_index | uint32_t | 27-30 | 4 | default: 0 |
reserved_01 | uint8_t | 31 | 1 | default: 0 |
reserved_02 | uint8_t | 32 | 1 | default: 0 |
Payload
Name | Type | Field | Lenth [byte] | Description |
|---|---|---|---|---|
steer_type | uint32_t | 33-36 | 4 | Table 1 참조 |
throttle | float | 37-40 | 4 | -1~1 |
skid_steering | float | 41-44 | 4 | -1~1 |
steer_angle | float[10] | 45-84 | 4*10 | -1~1 |
steer_type
Table 1 참조
throttle
종방향 전진/후진 엑셀 제어 명령
steer type == SKID_STEERING(1), ACKERMANN_STEERING(2)일 경우 차량의 전/후진 입력
sign : 방향을 의미함 [+(전진) / -(후진)]
value : throttle 입력 [1(최대) ~ 0(최소)]
steer type : ZERO_TURN (3)일 경우 zero turn 시 차량의 회전 방향 및 크기에 대한 입력
sign : 방향을 의미함 [+(우회전) / -(좌회전)]
value : 회전량에 대한 throttle 입력 [1(최대) ~ 0(최소)]
skid_steering
steer type == SKID_STEERING (1) 일 때 사용 가능한 횡방향 제어 명령
sign : 방향을 의미함 [+(우회전) / -(좌회전)]
value : 회전량에 대한 throttle 입력 [1(최대) ~ 0(최소)]
steer_angle
steer type == ACKERMANN_STEERING (2) 일 때 사용 가능한 횡방향 조향 제어 명령
sign : 방향을 의미함 [+(휠 조향 우회전) / -(휠 조향 좌회전)]
value : 조향각 입력 [1(최대) ~ 0(최소)]
실제 제어 값 = 원하는 조향 값 (degree) / 최대 조향각
최대 조향각은 차량의 Dynamics 제원을 따른다.최대 10축까지 대한 조향값을 받도록 array 구성. Dynamics 제원을 따른다.
Ground Vehicle State Ctrl Cmd
메시지 정의: Wheel-based Ground Vehicle (차량 및 로봇)의 Target State 제어를 위한 메시지 (User → SIM)
메시지 프로토콜
전체 패킷 크기: 41 Bytes
데이터 크기: Header (33byte) + Payload (8byte)
Header
msg_type : 66
Name | Type | Field | Lenth [byte] | Description |
|---|---|---|---|---|
header_version | uint32_t | 0-3 | 4 | default: 0 |
msg_type | uint32_t | 4-7 | 4 | 메시지 별 상이 |
msg_size | uint32_t | 8-11 | 4 | default: 0 |
protocol_type | uint8_t | 12 | 1 | default: 0 |
send_count | uint16_t | 13-14 | 2 | default: 0 |
msg_frames | uint32_t | 15-18 | 4 | default: 0 |
frame_size | uint32_t | 19-22 | 4 | default: 0 |
frame_pos | uint32_t | 23-26 | 4 | default: 0 |
frame_index | uint32_t | 27-30 | 4 | default: 0 |
reserved_01 | uint8_t | 31 | 1 | default: 0 |
reserved_02 | uint8_t | 32 | 1 | default: 0 |
Payload
Name | Type | Field | Lenth [byte] | Description |
|---|---|---|---|---|
TargetLongitudinalVelocity | float | 33-36 | 4 | m/s |
TargetAngularVelocity | float | 37-40 | 4 | rad/s |
TargetLongitudinalVelocity
속도 제어시 타겟 종방향 속도
m/s
TargetAngularVelocity
속도 제어시 타겟 각속도
rad/s
Ghost Ctrl Cmd
메시지 정의: Ghost Mode를 이용한 Ego 차량을 제어하기 위한 메시지 (User → SIM)

메시지 프로토콜
전체 패킷 크기: 63 Bytes
데이터 크기: 32 Bytes
전체 패킷 구조
Name | Type | Field | Lenth [byte] | Units | Value | Description |
|---|---|---|---|---|---|---|
start_indicator | byte | 0 | 1 | - | 0x23 | “#” |
header_name | byte[] | 1-11 | 11 | - | “EgoGhostCmd” |
|
doller_indicator | byte | 12 | 1 | - | 0x24 | “$” |
data_length | uint32_t | 13-16 | 4 | - | 32 |
|
aux_data | byte[12] | 17-28 | 12 | - | - |
|
position_x | float | 29-32 | 4 | - |
|
|
position_y | float | 33-36 | 4 | - |
|
|
position_z | float | 37-40 | 4 | - |
|
|
rotation_x | float | 41-44 | 4 | - |
| roll |
rotation_y | float | 45-48 | 4 | - |
| pitch |
rotation_z | float | 49-52 | 4 | - |
| yaw |
speed | float | 53-56 | 4 | km/h |
| 차량의 속력 |
steer angle | float | 57-60 | 4 | deg |
| 차량의 앞바퀴 조향 각도 |
tail01 | byte | 61 | 1 | - | 0x0D |
|
tail02 | byte | 62 | 1 | - | 0x0A |
|
Trajectory Tracking Cmd 26.R1.0 UPDATE
메시지 정의 : 특정 Trajectory를 추종하도록 Ego 차량을 제어하기 위한 메시지 (User → SIM)
메시지 프로토콜
전체 패킷 크기 : 최대 531 Bytes (Trajectory 30개 기준)
데이터 크기 : 최대 490 Bytes
Name | Type | Field | Len [byte] | Units | Value | Description |
|---|---|---|---|---|---|---|
start_indicator | byte | 0 | 1 | - | 0x23 | “#” |
header_name | byte[] | 1-21 | 21 | - | “TrajectoryTrackingCmd” | Packet Header |
doller_indicator | byte | 22 | 1 | - | 0x24 | “$” |
data_length | int | 23-26 | 4 | - | 해당 Packet내 Data의 크기 | |
aux_data | byte | 27-38 | 12 | - | 0x00 | 추가 데이터 필드 |
timestamp_sec | int | 39-42 | 4 | s |
| |
timestamp_nanosec | int | 43-46 | 4 | ns | ||
sequence | byte | 47 | 1 | - | 0-255 | |
trajectory_count | uint8_t | 48 | 1 | - | 0-30 | |
trajectories | Trajectory[] | 49-528 (max) | 480 (max) | - | ENU 좌표계 기준 Global Position | |
tail01 | byte | 529 | 1 | - | 0x0D | |
tail02 | byte | 530 | 1 | - | 0x0A |
Trajectory
Name | Type | Len [byte] | Units | Value | Description |
|---|---|---|---|---|---|
point | Point | 12 | - | ||
t | float | 4 | s | 이전 point에서 이번 point까지의 목표 도달 시간 |
Point
Name | Type | Len [byte] | Units | Value | Description |
|---|---|---|---|---|---|
x | float | 4 | m | ENU 좌표계 기준 Global Position | |
y | float | 4 | m | ENU 좌표계 기준 Global Position | |
z | float | 4 | m | ENU 좌표계 기준 Global Position |
Trajectory 입력 사양
Point : ENU 좌표계 Global Position, 단위는 m
ground vehicle의 z값은 지면의 높이를 고려하여 적절한 값을 사용하기를 권장한다.
point 사이의 간격이 0.1 m 이내인 경우, 해당 구간은 정지 구간으로 인식한다.
입력 가능한 두 점 사이의 최대 delta yaw는 다음과 같다.
차량 : -90 ~ 90 deg
드론 : -180 ~ 180 deg (전방위)
로봇(skid) : 해당사항 없음 (미개발)
t : 이전 point에서 이번 point까지의 목표 도달 시간, 단위는 second, 최소 입력값은 0.01 s
입력 시 주의사항
구간 간격을 너무 짧게 하지 않도록 주의해야 한다.
vehicle의 전체 길이보다 짧게 구간을 줄 경우, 정확한 제어 추종이 불가능하다.
가급적 직선 구간, 곡선 구간을 구분하고 곡선 구간은 충분히 분할해야 한다.
두 점 사이의 delta yaw가 클수록, 간격이 클수록 사용자가 원하는 path와 vehicle의 path가 달라진다.
경로가 달라질수록, 곡률 속도 계획에 따라 Time에 맞게 도달하기 어려워진다.
곡선 구간에서는 최소 회전 반경과 그 때의 최대 속도를 고려하여 시간과 거리를 정해야 한다.
회전 반경과 최대 속도는 vehicle의 제원에 따른다.
주행 중 새로운 Trajectory 입력 시, heading과 velocity를 충분히 고려해야 한다.
입력 상황에서의 heading 및 velocity에 따라, 경로를 지나치거나 point에 도달하지 못 할 수 있다.
위 사항이 지켜지지 않았을 경우, 비정상적이거나 원하지 않는 동작을 할 수 있다.
Drone Attitude Ctrl 26.R1.0 UPDATE
메시지 정의 : 드론의 자세를 제어하기 위한 메시지
메시지 프로토콜
전체 패킷 크기 : 62 Bytes
데이터 크기 : 25 Bytes
Name | Type | Field | Len [byte] | Units | Value | Description |
|---|---|---|---|---|---|---|
start_indicator | byte | 0 | 1 | - | 0x23 | “#” |
header_name | byte[] | 1-17 | 17 | - | “DroneAttitudeCtrl” | Packet Header |
doller_indicator | byte | 18 | 1 | - | 0x24 | “$” |
data_length | int | 19-22 | 4 | - | 25 | 해당 Packet내 Data의 크기 |
aux_data | byte | 23-34 | 12 | - | 0x00 | 추가 데이터 필드 |
timestamp_sec | int | 35-38 | 4 | s |
| Pass (true) / Fail (false) |
timestamp_nanosec | int | 39-42 | 4 | ns | ||
sequence | byte | 43 | 1 | - | 0-255 | |
roll | float | 44-47 | 4 | deg | ENU좌표계 기준 (-30 ~ 30 deg) | |
pitch | float | 48-51 | 4 | deg | ENU좌표계 기준 (-30 ~ 30 deg) | |
yaw | float | 52-55 | 4 | deg | ENU좌표계 기준 | |
altittude | float | 56-59 | 4 | m | ENU좌표계 기준 Global Position | |
tail01 | byte | 60 | 1 | - | 0x0D | |
tail02 | byte | 61 | 1 | - | 0x0A |
Ego Vehicle Status
Sync Mode 사용 시 unix timestamp 가 아닌 시뮬레이터 시작 시간 기준으로 계산을 한다.
메시지 정의 : Ego 차량을 제어하기 위한 메시지
메시지 프로토콜
전체 패킷 크기 : 245 Bytes
데이터 크기 : 216 Bytes
Name | Type | Field | Len [byte] | Units | Value | Description | |
|---|---|---|---|---|---|---|---|
| 1 | start_indicator | byte | 0 | 1 | - | 0x23 | “#” |
| 2 | header_name | byte[] | 1-9 | 9 | - | “MoraiInfo” |
|
| 3 | doller_indicator | byte | 10 | 1 | - | 0x24 | “$” |
| 4 | data_length | uint32_t | 11-14 | 4 | - | 189 |
|
| 5 | aux_data | byte[12] | 15-26 | 12 | - | - |
|
| 6 | timestamp_sec | uint32_t | 27-30 | 4 | s |
| Unix timestamp (1970/01/01) 으로 부터 경과된 초단위 시간 (seconds) |
| 7 | timestamp_nanosec | uint32_t | 31-34 | 4 | ns |
| timestamp의 소수 단위 초를 nanoseconds로 표현
|
| 8 | ctrl_mode | byte | 35 | 1 | - |
|
|
| 9 | gear | byte | 36 | 1 | - |
|
|
| 10 | signed_velocity | float | 37-40 | 4 | km/h |
| 차량 진행 방향 속도 |
| 11 | map_data_id | int | 41-44 | 4 | - |
| DigitalTwin Map = 0 ~ 9999 Virtual Map = 10000 ~ 19999 |
| 12 | accel | float | 45-48 | 4 | - |
| 가속 페달 입력값 (0 ~ 1) |
| 13 | brake | float | 49-52 | 4 | - |
| 브레이크 페달 입력값 (0 ~ 1) |
| 14 | size_x | float | 53-56 | 4 | m |
| 오브젝트의 크기 |
| 15 | size_y | float | 57-60 | 4 | m |
| 오브젝트의 크기 |
| 16 | size_z | float | 61-64 | 4 | m |
| 오브젝트의 크기 |
| 17 | overhang | float | 65-68 | 4 | m |
| Ego 차량의 OverHang |
| 18 | wheelbase | float | 69-72 | 4 | m |
| Ego 차량의 WheelBase |
| 19 | rear_overhang | float | 73-76 | 4 | m |
| Ego 차량의 Rear OverHang |
| 20 | posX | float | 77-80 | 4 | m |
| 차량의 위치 |
| 21 | posY | float | 81-84 | 4 | m |
| 차량의 위치 |
| 22 | posZ | float | 85-88 | 4 | m |
| 차량의 위치 |
| 23 | roll | float | 89-92 | 4 | deg |
| 차량의 회전 |
| 24 | pitch | float | 93-96 | 4 | deg |
| 차량의 회전 |
| 25 | yaw | float | 97-100 | 4 | deg |
| 차량의 회전 |
| 26 | velocity_x | float | 101-104 | 4 | km/h |
| 차량의 현재 속도 |
| 27 | velocity_y | float | 105-108 | 4 | km/h |
| 차량의 현재 속도 |
| 28 | velocity_z | float | 109-112 | 4 | km/h |
| 차량의 현재 속도 |
| 29 | angular_velocity_x | float | 113-116 | 4 | deg/s |
| 차량의 중심 기준 회전 각속도 |
| 30 | angular_velocity_y | float | 117-120 | 4 | deg/s |
| 차량의 중심 기준 회전 각속도 |
| 31 | angular_velocity_z | float | 121-124 | 4 | deg/s |
| 차량의 중심 기준 회전 각속도 |
| 32 | accel_x | float | 125-128 | 4 | m/s² |
| 차량의 가속도 벡터 |
| 33 | accel_y | float | 129-132 | 4 | m/s² |
| 차량의 가속도 벡터 |
| 34 | accel_z | float | 133-136 | 4 | m/s² |
| 차량의 가속도 벡터 |
| 35 | front_steer_angle | float | 137-140 | 4 | deg |
| 차량의 현재 앞 바퀴 조향 각도 |
| 36 | rear_steer_angle | float | 141-144 | 4 | deg | 차량의 현재 뒷 바퀴 조향 각도 | |
| 37 | link_id | byte[] | 145-182 | 38 | - |
| 차량이 위치한 Mgeo Link 의 ID |
| 38 | tire_lateral_force_fl | float | 183-186 | 4 | N |
| Tire force - 앞축 왼쪽 휠 |
| 39 | tire_lateral_force_fr | float | 187-190 | 4 | N |
| Tire force - 앞축 오른쪽 휠 |
| 40 | tire_lateral_force_rl | float | 191-194 | 4 | N |
| Tire force - 뒷축 왼쪽 휠 |
| 41 | tire_lateral_force_rr | float | 195-198 | 4 | N |
| Tire force - 뒷축 오른쪽 휠 |
| 42 | side_slip_angle_fl | float | 199-202 | 4 | deg |
| 사이드 슬립 앵글 - 앞축 왼쪽 휠 |
| 43 | side_slip_angle_fr | float | 203-206 | 4 | deg |
| 사이드 슬립 앵글- 앞축 오른쪽 휠 |
| 44 | side_slip_angle_rl | float | 207-210 | 4 | deg |
| 사이드 슬립 앵글- 뒷축 왼쪽 휠 |
| 45 | side_slip_angle_rr | float | 211-214 | 4 | deg |
| 사이드 슬립 앵글- 뒷축 오른쪽 휠 |
| 46 | tire_cornering_stiffness_fl | float | 215-218 | 4 | N/deg |
| Cornering Stiffness - 앞축 왼쪽 휠 |
| 47 | tire_cornering_stiffness_fr | float | 219-222 | 4 | N/deg |
| Cornering Stiffness - 앞축 오른쪽 휠 |
| 48 | tire_cornering_stiffness_rl | float | 223-226 | 4 | N/deg |
| Cornering Stiffness - 뒷축 왼쪽 휠 |
| 49 | tire_cornering_stiffness_rr | float | 227-230 | 4 | N/deg |
| Cornering Stiffness - 뒷축 오른쪽 휠 |
| 50 | distance_left_lane_boundary | float | 231-234 | 4 | m | 가장 가까운 Link의 좌측 차선 경계선까지의 거리 (원본 데이터에 차선 경계 정보가 없으면 미출력) | |
| 51 | distance_right_lane_boundary | float | 235-238 | 4 | m | 가장 가까운 Link의 우측 차선 경계선까지의 거리 (원본 데이터에 차선 경계 정보가 없으면 미출력) | |
| 52 | cross_track_error | float | 239-242 | 4 | m | 좌측 차선 거리 − 우측 차선 거리 (원본 데이터에 차선 경계 정보가 없으면 미출력) | |
| 53 | tail01 | byte | 243 | 1 | - | 0x0D |
|
| 54 | tail02 | byte | 244 | 1 | - | 0x0A |
|
Object Info
23.R1.0 에서는 UDP 통신의 Object Info 메시지의 데이터 구조가 아래와 같이 변경되었다.
데이터 패킷 앞에 Timestamp (8 Bytes) 추가
Timestamp는 패킷 내 각 오브젝트마다 추가하지 않고 한 패킷 당 한번만 추가하여 전송
메시지 정의: 사용자가 배치한 주변 물체에 대한 정보를 나타내는 메시지

메시지 프로토콜
전체 패킷 크기 : 2160 Bytes
데이터 크기 : 2120 Bytes (106 Bytes * 20)
데이터는 주변 차량, 보행자, Object 를 현재 자신의 차량의 거리가 가까운 순으로 총 20개 Object 의 데이터를 얻을 수 있다.
Object 아이디(인덱스) 정보(Objid, short)
데이터 설명 : Object 의 Unique ID 를 나타내는 정보
Object 타입 정보(ObjType, short)
데이터 설명 : Object 의 타입을 나타내는 정보이다.
Ego Vehicle : -1 (ROS 의 경우 Ego Type 을 -1 로 정의 중 이여서 추가 하였음)
보행자 : 0
주변 차량 : 1
Object : 2
Object 위치 정보(posXYZ, float)
데이터 설명 : Object 의 위치를 나타내는 정보이며 단위는 m 이다.
Object 회전 정보(Heading, float)
데이터 설명 : Object 의 회전을 나타내는 정보이며 단위는 deg 이다.
Object 크기 정보 (sizeXYZ, float)
데이터 설명 : Object 의 크기를 나타내는 정보이며 단위는 m 이다.
Object Overhang 정보 (4byte / Overhang / float)
데이터 설명 : Object 의 Overhang 정보
Object Wheelbase 정보 (4byte / Wheelbase/ float)
데이터 설명 : Object 의 Wheelbase 정보
Object Rear Overhang 정보 (4byte / Rear Overhang / float)
데이터 설명 : Object 의 Rear Overhang 정보
Object 의 속도 정보 (4Byte * 3 / Velocity_XYZ / float)
데이터 설명 : Object 의 현재 속도를 나타내는 정보이며 단위는 km/h 이다.
float x
float y
float z
Object 의 acceleration (4Byte * 3 / Accel_XYZ / float)
Object 의 가속도 벡터 ( m/s2 )
float x
float y
float z
Object 가 위치한 Mgeo Link 의 ID 정보 ( 38 byte / Link ID / String)
NPC만 Mgeo Link 의 ID 정보 출력, 타 Object 는 출력하지 않음
Get TrafficLight Status
메시지 정의: 신호등 상태 정보를 나타내는 메시지

메시지 프로토콜
전체 패킷 크기 : 48 Bytes
데이터 크기 : 16 Bytes
trafficLightIndex
메시지 설명 : 신호등의 ID
trafficLightType
메시지 설명 : 신호등의 종류
3구(R-Y-G) : 0
3구(R-Y-GLeft) : 1
4구(R-Y-GLeft-G) : 2
3구(Y-Y-Y) : 100
trfficLightStatus
메시지 설명 : 신호등의 신호 상태
Red : 1
Yellow : 4
Green : 16
GreenLeft : 32
Green with GreenLeft : 48
Yellow with Green : 20
Yellow with GreenLeft : 36
Red with Yellow: 5
default : -1
Set TrafficLight Ctrl
메시지 정의: 신호등 상태를 제어하는 메시지

메시지 프로토콜
전체 패킷 크기 : 46 Bytes
데이터 크기 : 14 Bytes
trafficLightIndex
메시지 설명 : 신호등의 ID
trafficLightStatus
메시지 설명 : 신호등의 신호 상태를 설정함
Red : 1
Yellow : 4
Green : 16
GreenLeft : 32
Green with GreenLeft : 48
Yellow with Green : 20
Yellow with GreenLeft : 36
Red with Yellow: 5
default : -1
Collision Data
23.R1.0 에서는 UDP 통신의 Collision Data 메시지의 데이터 구조가 아래와 같이 변경되었다.
ObjType앞 Timestamp (8 Bytes) 추가Timestamp 는 패킷 내 각 오브젝트마다 추가하지 않고 한 패킷 당 한번만 추가하여 전송
특정 오브젝트에 대한 실제 출력되는 데이터에는 Timestamp 를 포함하지 않음

메시지 정의: Ego 차량과의 충돌 데이터를 나타내는 메시지

메시지 프로토콜
전체 패킷 크기 : 181 Bytes
데이터 크기 : 148 (28*5 + 8) Bytes
Timestamp 정보
오브젝트 타입 정보 (2byte / ObjType / short)
데이터 설명 : Ego Vehicle 과 충돌한 오브젝트의 타입을 나타내는 정보이다.
Ego Vehicle : -1
보행자 : 0
주변 차량 : 1
오브젝트 : 2
오브젝트 아이디 (인덱스) 정보(2byte / Objid / short)
데이터 설명 : Ego Vehicle 과 충돌한 오브젝트의 Unique ID 를 나타내는 정보
오브젝트 위치 정보 (4byte / posXYZ / float)
데이터 설명 : Ego Vehicle 과 충돌한 오브젝트의 위치를 나타내는 정보이며 단위는 m 이다.
글로벌 오프셋 정보 (4byte / posXYZ / float)
global_offset_x
global_offset_y
global_offset_z
Get Intersection Status
메시지 정의: 교차로 상태 정보

통신 프로토콜
전체 패킷 크기 : 37 Bytes
데이터 크기 : 8 Bytes
교차로 인덱스 (2 byte / IntIndex / short)
교차로의 인덱스 나타냄
교차로 상태 (2 byte / IntStatus / short)
교차로의 상태를 나타냄
현재 교차로 상태로 지난 시간 (4 byte / IntTime / float)
intersection_status_time
Set Intersection Status
메시지 정의: 교차로 제어 정보

메시지 프로토콜
전체 패킷 크기 : 40 Bytes
데이터 크기 : 8 Bytes
교차로 인덱스 (2 byte / IntIndex / short)
교차로의 인덱스 나타냄
교차로 상태 (2 byte / IntStatus / short)
교차로의 상태
세팅한 교차로 상태의 지난 시간 (4 byte / IntTime / float)
intersection_status_time
Scenario Load
메시지 정의 : 시나리오 .json 파일을 Load

메시지 프로토콜
전체 패킷 크기 : 69 Bytes
데이터 크기 : 37 Bytes
file_name (30 byte / filename / string)
불러올 .json 형식의 파일 이름 결정
30 byte 이내여야 하며 .json 은 붙이지 않는다.
파일이름이 30 byte 이하인 경우 남는 byte 수 (30 Byte - 파일이름 Byte) 만큼 공백으로 처리해서 Byte 수를 맞춰 보내준다.
delete_all (1 byte / delete_all /bool )
True : Ego 를 제외한 Scenario Data 를 Delete 하고 Load
False : 모든 Scenario Data Load
delete_all 이 False 일 때 아래의 Load Option 을 사용해서 원하는 Scenario Data Load 가능
load_network_connection_data (1 byte / network /bool )
True : network connection Load
False : network connection Load 안 함
load_ego_vehicle_data (1 byte / ego_vehicle /bool )
True : Ego Scenario Data Load
False : Ego Scenario Data Load 안 함
load_surrounding_vehicle_data (1 byte / npc_vehicle /bool )
True : NPC Vehicle Scenario Data Load
False : NPC Vehicle Scenario Data Load 안 함
load_pedestrian_data (1 byte / pedestrian /bool )
True : pedestrian Scenario Data Load
False : pedestrian Scenario Data Load 안 함
load_object_data (1 byte / object /bool )
True : Object Scenario Data Load
False : Object Scenario Data Load 안 함
set_pause (1 byte / pause /bool )
True : Scenario Load 후 Pause 상태로 유지 (Esc 키를 입력하여 Play 상태 전환 가능)
False : Scenario Load 후 바로 Play 상태로 전환
SaveSensorData
메시지 정의: 현재 센서의 데이터를 저장

메시지 프로토콜
전체 패킷 크기 : 125 Bytes
데이터 크기 : 91 Bytes
is_custom_file_name (1 byte / custom / bool)
false 실행 시 시뮬레이터 파일의 SaveFile\SensorData 경로에 Data 저장
custom_file_name (30 byte / file name / String)
(is_custom_file_name : true 설정 시 사용) 저장할 file 이름
file_dir (60 byte / file dir/ String)
(is_custom_file_name : true 설정 시 사용) 저장할 file 의 경로
SaveSensorData 는 SIM 의 UDP 네트워크 설정 시 아래의 Sensor Sync Data 와 이름만 다를 뿐 동일한 메시지이다.

Sensor Control
메시지 정의 : 센서의 위치를 Control

메시지 프로토콜
전체 패킷 크기: 59 Bytes
데이터 크기: 26 Bytes
sensor_index (2 byte / Sensor Index/ int)
위치를 제어할 센서 인덱스 번호 이름
센서 Index 는 아래 사진과 같이 센서 옆에 적혀있는 번호로 한다.
센서 위치 정보 (4 byte / posXYZ / float)
데이터 설명: 센서의 위치를 나타내는 정보이며 단위는 m 이다.
센서 회전 정보 (4 byte *3 / Roll Pitch Heading / float)
데이터 설명: 센서의 회전을 나타내는 정보이며 단위는 deg 이다.
Turn Signal Lamp Control
메시지 정의: 방향 지시등 제어

통신 프로토콜
전체 패킷 크기 : 33 Bytes
데이터 크기 : 2 Bytes
trunSignal (1byte / turnSignal / byte)
0 : No Signal
1 : Left Signal
2 : Right Signal
emergencySignal (1byte / emergencySignal / byte)
0 : No Signal
1 : Emergency Signal
Simulator Network
Simulator Network 로 전송되는 UDP 메시지 및 각 메시지 별 프로토콜 정보는 아래와 같다.
Multi Ego Setting
메시지 정의
Multi_Ego 제어 명령 (User → SIM)
여러 대의 Ego 차량의 위치, 회전, 속도, 기어 등을 세팅할 수 있게 하는 메시지

메시지 프로토콜
전체 패킷 크기: 683 Bytes
데이터 크기: 648 Bytes (4 + 4 + 32 Bytes * 20)
전체 패킷 구조
Name | Value | Type | Field | Lenth [byte] | Description |
|---|---|---|---|---|---|
start_indicator | 0x23 | byte | 0 | 1 | “#” |
header_name | “MultiEgoSetting” | byte[] | 1-14 | 15 |
|
doller_indicator | 0x24 | byte | 15 | 1 | “$” |
data_length | 648 | uint32_t | 16-19 | 4 |
|
aux_data | - | byte[12] | 20-31 | 12 |
|
num_of_ego |
| int32_t | 32-35 | 4 | 제어할 차량의 개수 |
camera_index |
| int32_t | 36-39 | 4 | 어떤 차량에 카메라를 고정 시킬지 정함. 차량 인덱스 번호를 적는다. |
[Data] x 20 | |||||
tail01 | 0x0D | byte | 681 | 1 |
|
tail02 | 0x0A | byte | 682 | 1 |
|
Body Data (32 Bytes)
Name | Value | Type | Field | Lenth [byte] | Description | Unit |
|---|---|---|---|---|---|---|
ego_index |
| int16_t | 40-41 | 2 | 차량의 인덱스 번호 |
|
g_pos_x |
| float | 42-45 | 4 | 차량의 position | m |
g_pos_y |
| float | 46-49 | 4 | 차량의 position | m |
g_pos_z |
| float | 50-53 | 4 | 차량의 position | m |
g_roll |
| float | 54-57 | 4 | 차량의 rotation | deg |
g_pitch |
| float | 58-61 | 4 | 차량의 rotation | deg |
g_yaw |
| float | 62-65 | 4 | 차량의 rotation | deg |
speed |
| float | 66-69 | 4 | 차량의 속력 | km/h |
gear |
| byte | 70 | 1 | 기어모드 변경 | enum |
ctrl_mode |
| byte | 71 | 1 | 제어하는 방식 | enum |
Gear Mode
Name | Value | Description |
|---|---|---|
Parking | 1 | 주차 |
Rear | 2 | 후진 |
Neutral | 3 | 중립 |
Drive | 4 | 주행 |
Ctrl_Mode
Name | Value | Description |
|---|---|---|
Keyboard | 1 | 사용자가 키보드를 이용하여 Ego 차량을 제어 |
Automode | 2 | 자율주행 로직으로 네트워크를 통해서 Ego 차량을 제어 |
NPC Vehicle Collision Data
메시지 정의: NPC 차량의 충돌 데이터를 나타내는 메시지

메시지 프로토콜
전체 패킷 크기 : 1156 Bytes
데이터 크기 : 1120 Bytes(112 Bytes * 10)
데이터는 주변 차량, 보행자, 오브젝트를 현재 자신의 차량의 거리가 가까운 순으로 총 20개 오브젝트의 데이터를 얻을 수 있다.
1번 오브젝트 타입 정보(ObjType, short)
데이터 설명 : 오브젝트의 타입을 나타내는 정보이다.
Ego Vehicle : -1
보행자 : 0
주변 차량 : 1
오브젝트 : 2
1번 오브젝트 아이디 (인덱스) 정보 (2byte / Objid / short)
데이터 설명: Ego Vehicle 과 충돌한 오브젝트의 Unique ID 를 나타내는 정보
1번 오브젝트 위치 정보 (posXYZ, float)
데이터 설명: 오브젝트의 위치를 나타내는 정보이며 단위는 m 이다.
1번 오브젝트 회전 정보 (Heading, float)
데이터 설명: 오브젝트의 회전을 나타내는 정보이며 단위는 deg 이다.
1번 오브젝트 크기 정보 (sizeXYZ, float)
데이터 설명: 오브젝트의 크기를 나타내는 정보이며 단위는 m 이다.
1번 오브젝트 속도 정보(4Byte * 3 / Velocity_XYZ / float)
데이터 설명 : NPC의 현재 속도를 나타내는 정보이며 단위는 km/h 이다.
float x
float y
float z
1번 오브젝트의 acceleration (4Byte * 3 / Accel_XYZ / float)
차량의 가속도 벡터 ( m/s2 )
float x
float y
float z
2번 오브젝트 타입 정보 (ObjType, short)
데이터 설명 : 오브젝트의 타입을 나타내는 정보이다.
Ego Vehicle : -1
보행자 : 0
주변 차량 : 1
오브젝트 : 2
1번 오브젝트 아이디 (인덱스) 정보 (2byte / Objid / short)
데이터 설명 : Ego Vehicle 과 충돌한 오브젝트의 Unique ID 를 나타내는 정보
2번 오브젝트 위치 정보 (posXYZ, float)
데이터 설명 : 오브젝트의 위치를 나타내는 정보이며 단위는 m 이다.
2번 오브젝트 회전 정보 (Heading, float)
데이터 설명 : 오브젝트의 회전을 나타내는 정보이며 단위는 deg 이다.
2번 오브젝트 크기 정보 (sizeXYZ, float)
데이터 설명 : 오브젝트의 크기를 나타내는 정보이며 단위는 m 이다.
2번 오브젝트 속도 정보(4Byte * 3 / Velocity_XYZ / float)
데이터 설명 : NPC의 현재 속도를 나타내는 정보이며 단위는 km/h 이다.
float x
float y
float z
2번 오브젝트의 acceleration (4Byte * 3 / Accel_XYZ / float)
차량의 가속도 벡터 ( m/s2 )
float x
float y
float z