통신 메시지 프로토콜
본 섹션에서는 시뮬레이터에서 지원하는 통신에 따라, 주고받는 메시지의 종류 및 데이터 구조 등에 대한 메시지 프로토콜에 대해 기술한다.
ROS 통신 메시지
Network Settings에서 제공하는 Ego Network 및 Simulator Network에서 ROS 통신 방식에 따라 주고받는 메시지 타입 및 메시지 토픽, 메시지 구조에 대해 설명한다.
ROS 메세지 파일 다운로드 링크
개발용 Linux 환경에 직접 다운로드 가능하도록 아래 GitHub 링크를 제공한다. 24.R1.0 UPDATE
Ego Network
통신 방식: Publish - Subscribe Model
Ego Ctrl Cmd
차량 제어 명령
MoraiCmdController
Message Type : morai_msg/CtrlCmd
Default Topic : /ctrl_cmd
타입 설명 : Ego 차량을 제어하기 위한 메시지
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | longlCmdType | int32 | 제어 방식을 결정하는 인덱스 | |
2 | accel | float64 | - | 차량의 가속 패달 값을 의미하며 0~1 범위를 가진다. |
3 | brake | float64 | - | 차량의 브레이크 패달 값을 의미하며 0~1범위를 가진다. |
4 | steer angle | float64 | rad | 차량 앞 바퀴 각도(Wheel Angle)을 의미하며 Rad 단위이다. |
5 | speed | float64 | km/h | (Only active if CmdType == 2) |
6 | acceleration | float64 | m/s2 | (Only active if CmdType == 3) |
23.R1.0에서는 아래의 신규 모델 Controller에 대한 CtrlCmd 메시지가 추가되었다.
WeBOTCmdController
WeBOTCmdController
Message Type : geometry_msgs/Twist
Default Topic : /commands/vel
Ground Vehicle Direct Ctrl Cmd 24.R1.0 UPDATE
차량 및 로봇에 대한 제어 명령 (User → Sim)
Message Type : morai_msg/GVDirectCmd
Default Topic : /gv_direct_cmd
타입 설명 : Wheel-based Ground Vehicle을 직접 제어하기 위한 메세지
No | Name | Type | Len [byte] | Description |
---|---|---|---|---|
1 | steer_type | uint32_t | 4 | Table 1 참조 |
2 | throttle | float | 4 | -1~1 |
3 | skid_steering | float | 4 | -1~1 |
4 | steer_angle | float[10] | 40 | -1~1 |
Ground Vehicle State Ctrl Cmd 24.R1.0 UPDATE
차량 및 로봇의 target State 제어 명령 (User → Sim)
Message Type : morai_msg/GVStateCmd
Default Topic : /gv_state_cmd
타입 설명 : Wheel-based Ground Vehicle의 Target State 제어를 위한 메세지
No | Name | Type | Len [byte] | Description |
---|---|---|---|---|
1 | TargetLongitudinalVelocity | float | 4 | m/s |
2 | TargetAngularVelocity | float | 4 | rad/s |
Ghost Ctrl Cmd
차량 제어 명령
Ghost Mode Ego
Message Type : morai_msgs/GhostMessage
Default Topic : /ghost_ctrl_cmd
타입 설명 : Ghost Mode 이용 Ego 차량을 제어하기 위한 메세지
Ghost Mode : 차량을 원하는 위치에 생성 할 수 있는 모드이다.
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | position | m | ego 차량의 위치 지정 (X, Y, Z) | |
2 | rotation | deg | ego 차량의 회전 지정 (roll, pitch, yaw) | |
3 | speed | float64 | km/h | ego 차량의 속도 |
4 | steer_angle | float64 | deg | ego 차량 앞바퀴 조향 각도 |
NPC Ghost Cmd
차량 제어 명령
Ghost Mode NPC
Message Type : morai_msgs/NpcGhostCmd
Default Topic : /NpcGhost_Topic
타입설명 : NPC Ghost mode에서 Npc Vehicle을 생성(Control) 하는 메세지
Name | Type | Unit | Remarks |
---|---|---|---|
header | Header | - | |
npc_list | - | NPC Ghost Vehicle 정보 |
Npc Ghost Info
NpcGhostInfo는 NPCGhostCmd에서 사용하는 목록으로 ROS Topic 이 없음.
ROS message details
Message Type: morai_msgs/NpcGhostInfo
NOTE 차량의 위치 값은 ENU 좌표계로 입력함.(x: east, y: north, z: up)
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | unique_id | int32 | - | Npc Ghost Vehicle의 unique_id 값 (e.g. 2,3,4..) |
2 | name | string | - | Npc Ghost Vehicle의 모델 이름 (e.g 2016_Kia_Niro(HEV)) |
3 | position | m | Npc Ghost Vehicle의 위치 지정 (X, Y, Z) | |
4 | rpy | deg | Npc Ghost Vehicle의 회전 지정 (roll, pitch, yaw) |
Ego Vehicle Status
차량 상태 정보
MoraiInfoPublisher (Sim → User)
Message Type : morai_msgs/EgoVehicleStatus
Default Topic : /Ego_topic
타입 설명 : 제어 차량의 상태 정보를 나타내는 메시지
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | header | Header | - | Message header |
2 | unique_id | int32 | - | 오브젝트의 unique id 값 |
3 | acceleration | m/s2 | ego 차량의 현재 가속도 벡터 값 | |
4 | position | m | ego 차량의 현재 위치 | |
5 | velocity | m/s | ego 차량의 현재 속도 벡터 값 | |
6 | heading | float64 | deg | 차량의 heading(deg)를 나타냄. |
7 | accel | float32 | - | 차량의 가속 패달의 상태 값 0~1 범위를 가진다. |
8 | brake | float32 | - | 차량의 브레이크 패달의 상태 값 0~1 범위를 가진다. |
9 | wheel_angle | float32 | deg | 차량의 현재 앞 바퀴 각도(Wheel Angle) 값 |
Object Info
주변 물체 정보
MoraiObjectInfoPublisher (Sim → User)
Message Type : morai_msgs/ObjectStatusList
Default Topic : /Object_topic
타입 설명 : 사용자가 배치한 주변 물체들에 대한 정보를 나타내는 메시지
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | header | Header | - | |
2 | num_of_npcs | int32 | - | 사용자가 배치한 npc 차량의 개수. |
3 | num_of_pedestrian | int32 | - | 사용자가 배치한 pedestrian의 개수. |
4 | num_of_obstacle | int32 | - | 사용자가 배치한 obstacle(static objects)의 개수. |
5 | npc_list | - | npc 차량 정보 ( 아래의 ObjectStatus 타입 참고) | |
6 | pedestrian_list | - | pedestrian 정보 ( 아래의 ObjectStatus 타입 참고) | |
7 | obstacle_list | - | obstacle 정보 ( 아래의 ObjectStatus 타입 참고) |
Object Status
ObjectStatus 는 MoraiObjectInfoPublisher 에서 사용하는 목록으로 ROS Topic 이 없음.
ROS message details
Message Type: morai_msgs/ObjectStatus
NOTE 차량의 위치 값은 ENU 좌표계로 표시됨.(x: east, y: north, z: up)
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | unique_id | int32 | - | 물체의 unique id 값 |
2 | type | int32 | - | 0: Pedestrian, 1: NPC vehicle, 2: Static object (obstacle), -1: Ego-vehicle |
3 | name | string | - | 물체의 이름 |
4 | heading | float64 | - | 물체의 heading(deg)를 나타냄. |
5 | velocity | km/h | 물체의 현재 속도 벡터 값 | |
6 | acceleration | m/s2 | 물체의 현재 가속도 벡터 값 | |
7 | size | m | 물체의 크기 (width, length, height) | |
8 | position | m | 물체의 현재 위치 |
Collision Data
충돌 정보
CollisionData (Sim → User)
Message Type : morai_msgs/CollisionData
Default Topic : /CollisionData
타입 설명 : Ego 차량과의 충돌 데이터를 나타내는 메시지
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | header | Header | - | |
2 | global_offset_x | float32 | The x-axis position of the collided object w.r.t the map coordinate system | |
3 | global_offset_y | float32 | The y-axis position of the collided object w.r.t the map coordinate system | |
4 | global_offset_z | float32 | The z-axis position of the collided object w.r.t the map coordinate system | |
5 | collision_object | - | Ego 와 충돌한 Object 정보 |
Get TrafficLight Status
신호등 상태 정보
TLStatusPublisher (Sim → User)
Message Type : morai_msgs/GetTrafficLightStatus
Default Topic : /GetTrafficLightStatus
타입 설명 : TrafficLight 에 대한 정보를 나타내는 메시지
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | header | Header | - | |
2 | trafficLightIndex | string | - | TrafficLight 의 unique index 값 |
3 | trafficLightType | int16 | - | TrafficeLight의 LightType 값 0: Red/Yellow/Green |
4 | trafficLightStatus | int16 | - | TrafficeLight의 Status 값 1: Red Combined lights (multiple lights on simultaneously) can be applied using standard bitwise operations |
Set TrafficLight Control
신호등 상태 제어
TLCtrlSubscriber (User → Sim)
Message Type : morai_msgs/SetTrafficLight
Default Topic : /SetTrafficLight
타입 설명 : TrafficLight의 상태를 제어하기 위한 메시지
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | trafficLightIndex | string | - | TrafficLight 의 unique index 값 |
2 | trafficLightStatus | int16 | - | TrafficeLight의 Status 값 1: Red |
Get Intersection Status
교차로 정보
IntersectionStatusPublisher (Sim → User)
Message Type : morai_msgs/IntersectionStatus
Default Topic : /InsnStatus
타입 설명 : 교차로 신호등 정보
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | header | Header | - | |
2 | intersection_index | int32 | - | 교차로 index |
3 | intersection_status | int16 | - | 교차로 상태 |
4 | intersection_status_time | float32 | - | 현재 교차로 상태로 지난 시간(s) |
Set Intersection Control
교차로 제어
IntersectionControlSubscriber (User → Sim)
Message Type : morai_msgs/IntersectionControl
Default Topic : /InsnControl
타입 설명 : 교차로 신호등 제어 정보
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | header | Header | - | |
2 | intersection_index | int32 | - | 교차로 index |
3 | intersection_status | int16 | - | 교차로 상태 |
4 | intersection_status_time | float32 | - | 현재 교차로 상태로 지난 시간(s) |
Scenario Load
MORAISLSubscriber (User → Sim)
Message Type : morai_msgs/ScenarioLoad
Default Topic : /ScenarioLoad
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | file_name | string | - | load 할 Scenario_file_name |
2 | delete_all | bool | - |
|
3 | load_network_connection_data | bool | - |
|
4 | load_ego_vehicle_data | bool | - |
|
5 | load_surrounding_vehicle_data | bool | - |
|
6 | load_pedestrian_data | bool | - |
|
7 | load_object_data | bool | - |
|
8 | set_pause | bool | - |
|
SaveSensorData
센서 Data 저장
SensorSyncDataSubscriber (User → Sim)
Message Type : morai_msgs/SaveSensorData
Default Topic : /SaveSensorData
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | is_custom_file_name | bool | - | Determines if the save file name is custom input by the user |
2 | custom_file_name | string | - | The custom save file name input by the user |
3 | file_dir | string | - | The full path string of the save file |
Turn Signal Lamp Control
Lamps
Message Type : morai_msgs/Lamps
Default Topic : /lamps
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | header | Header | - | |
2 | turnSignal | int8 | - | 0: No signal, 1: Left turn signal, 2: Right turn signal |
3 | emergencySignal | int8 | - | 0: No signal, 1: Emergency lamps on |
Replay Info
Replay Info Publisher
MoraiReplayInfoPublisher (Sim → User)
Message Type : morai_msgs/ReplayInfo
Default Topic : /ReplayInfo_topic
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | header | Header | - | |
2 | ego_acc | float64 | - | 차량의 가속 패달 값을 의미하며 0~1 범위를 가진다. |
3 | ego_brake | float64 | - | 차량의 브레이크 패달 값을 의미하며 0~1범위를 가진다. |
4 | ego_steer | float64 | deg | 차량 앞 바퀴 각도(Wheel Angle)을 의미하며 degree 단위이다. |
5 | orientation | - | Current orientation | |
6 | linear_acceleration | Current acceleration | ||
7 | angular_velocity | Current angular velocity | ||
8 | num_of_npcs | int32 | - | 사용자가 배치한 npc 차량의 개수. |
9 | num_of_pedestrian | int32 | - | 사용자가 배치한 pedestrian의 개수. |
10 | num_of_obstacle | int32 | - | 사용자가 배치한 obstacle(static objects)의 개수. |
11 | npc_list | - | npc 차량 정보 | |
12 | pedestrian_list | - | pedestrian 정보 | |
13 | obstacle_list | - | obstacle 정보 |
SensorPoseSubscriber
Message Type : morai_msgs/SensorPosControl
Default Topic : /SensorPosControl
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | sensor_index | int16 | - | 위치를 제어할 센서 인덱스 번호 이름 |
2 | pose_x | float32 | m | |
3 | pose_y | float32 | m | |
4 | pose_z | float32 | m | |
5 | roll | float32 | rad | Sensor roll angle |
6 | pitch | float32 | rad | Sensor pitch angle |
7 | yaw | float32 | rad | Sensor yaw angle |
통신 방식: Service Model
Service 통신 방식으로 주고받는 ROS 메시지 프로토콜에 대한 설명한다.
ROS 통신으로 시뮬레이터를 제어하는데 있어서, Pub/Sub방식 뿐 아니라 아래와 같은 Service 방식 또한 지원한다.
기본 구조
ROSBAG 호출 메시지
Morai SimProcService Provider(User → Sim)
Service Name : /Morai_SimProc
srv : morai_msgs/MoraiSimProcSrv
Request Message Type : morai_msgs/MoraiSimProcHandle
int8 sim_process_status
0x01(Play)
0x10(Pause)
0x20(Stop - replay 모드에서만 사용 replay를 완전 종료)
아래 부터 mode = 0x10 (replay 모드) 일 때만 사용 가능하다.
short replay_option
0x0001 (load file)
0x0010 (target)
0x0100 (start time)
0x1000 (배속 조절)
파일을 새로 로드 하고 target을 지정하고 싶으면
0x0011 (start time은 default로 0초부터 시작)
리플레이 중에 target을 지정하고 시작지점을 변경하고자 할 때
0x0110 (리플레이 중이 아니라면 SimProcStatus에서 에러 result를 보낸다.)
string rosbag_file_name
short replay_target_option
0x0001 (Ego)
0x0010 (NPC)
0x0100 (Pedestrian)
float start_time(millisecond)
int32 replay_speed (추가)
배속 값(1배속, 2배속…)
Response Message Type : morai_msgs/MoraiSrvResponse
bool result : Service request 에 대한 결과
이벤트 제어 요청 메시지
Morai Event Cmd Service Provider (User → Sim)
Service Name : /Service_MoraiEventCmd
srv : morai_msgs/MoraiEventCmdSrv
Request Message Type : morai_msgs/EventInfo
int8 option : 이벤트 제어를 요청하는 필드 옵션
1 : ctrl_mode
2 : gear
4 : lamps
8 : set_pause
int32 ctrl_mode : 차량의 control mode 제어
1: Keyboard
2: GameWheel
3: automode
4 : cruisemode
int32 gear : 차량의 기어 변경
-1 : 이전 상태 유지
1 : P
2 : R
3 : N
4 : D
morai_msgs/Lamps lamps : 방향 지시등 제어
Header header
int8 turnSignal
0 : No Signal
1 : Left Signal
2 : Right Signal
3 : 이전 상태 유지
int8 emergencySignal
0 : No Signal
1 : Emergency Signal
bool set_pause
True : 시뮬레이터 Pause 상태로 유지 (Esc 키를 입력하여 Play 상태 전환 가능)
False : 시뮬레이터 Play상태로 전환
Response Message Type : morai_msgs/MoraiEventCmdSrv
int32 ctrl_mode : 차량의 control mode 현재 상태
int32 gear : 차량의 기어 현재 상태
morai_msgs/Lamps lamps : 방향 지시등 현재 상태
bool set_pause : 시뮬레이터 현재 상태
MAP 데이터 호출 메세지
Morai Map Spec Service Provider(User → Sim)
Service Name : /Service_MoraiMapSpec
srv : morai_msgs/MoraiMapSpecSrv
Request Message Type : morai_msgs/MapSpecIndex
bool load_map_data : 맵 데이터 호출 유무 (현재는 True False 모두 Map 데이터를 호출한다)
True : map_data_load
False : map_data_load
Response Message Type : morai_msgs/MapSpec
int32 plane_coordinate_system : 맵의 평면 좌표계 정보
0 : UTM (Virtual Map 은 UTM 으로 표시된다.)
1 : TM
int32 utmNum : UTM Zone 정보
한반도는 대부분 52 Zone 이다.
TM 과 Virtual Map 인 경우 0 이 나온다.
geometry_msgs/Vector3 UTMoffset : 맵의 오프셋 정보
float64 x : x
float64 y : y
float64 z : z
String ellipse : 타원체 종류
“WGS84”
“GRS80”
둘중 한가지 데이터가 나온다. (Virtual Map 의 경우 WGS84 로 출력)
float64 Central_latitude: central latitude (y-axis origin)
float64 Central_Meridian : central meridian (x-axis origin)
float64 ScaleFactor :
float64 FalseEasting : X 좌표 동위 이동 추가 값
float64 FalseNorthing : Y 좌표 북위 이동 추가 값
Simulator Network
통신 방식: Publish - Subscribe Model
MoraiSImprocStatusPublisher
MoraiSImprocStatusPublisher (Sim → User)
Message Type : morai_msgs/MoraiSimProcStatus
Default Topic : /sim/process/state/msg/MoraiSimProcStatus
Header header
uint8 sim_process_status
1 : play
2 : Pause
Time latest_command_time
마지막 SimProcHandler값이 들어온 시간(SimProcHandler/header에 있는 시간 사용)
아직 한 번도 안들어 왔다면 0
int8 command_result
0x00 (한 번도 데이터가 들어오지 않았을 경우)
0x01(success)
0xn0(fail)
0x10: fail
0x20: fail to load rosbag file
0x30: load rosbag file first
int8 current_mode
0x01(Simulation)
0x10(Replay)
int8 current_status
0x01(Playing)
0x10(Paused)
0x20(Paused, end of rosbag file → replay 모드에서만 사용 됨)
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | header | Header | - | |
2 | latest_command_time | - | 마지막 SimProcHandler값이 들어온 시간(SimProcHandler/header에 있는 시간 사용) 아직 한 번도 안들어 왔다면 0 | |
3 | command_result | int8 | - | 0x00: initial, 0x01: success, 0x10: command failed, 0x20: failed rosbag file load, 0x30: loaded rosbag but failed |
4 | current_mode | int8 | - | 0x01: simulation mode, 0x10: replay mode |
5 | current_status | int8 | - | 0x01: running, 0x10: paused, 0x20: paused and reached end of rosbag file |
Multi Ego Setting
Multi_Ego 제어 명령
MultiEgoTransformHandler (User → Sim)
Message Type : morai_msgs/MultiEgosetting
Default Topic : /ego_setting
타입 설명 : MultiEgo 에 대한 정보 메세지 타입
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | number_of_ego_vehicle | int32 | - | Multi_ego vehicle의 수 |
2 | camera_index | int32 | - | Multi_ego 세팅 시 바라볼 차량의 unique index |
3 | ego_index | int32[] | - | 제어할 Multi_ego 의 unique index |
4 | global_position_x | float64[] | Multi_ego의 현재 X-axis 위치 | |
5 | global_position_y | float64[] | Multi_ego의 현재 Y-axis 위치 | |
6 | global_position_z | float64[] | Multi_ego의 현재 Z-axis 위치 (elevation) | |
7 | global_roll | float32[] | Multi_ego의 현재 roll각도 | |
8 | global_pitch | float32[] | Multi_ego의 현재 pitch 각도 | |
9 | global_yaw | float32[] | Multi_ego의 현재 heading 각도 | |
10 | velocity | float32[] | Multi_ego의 velocity | |
11 | gear | int8[] | - | 1: Parking, 2: Reverse, 3: Neutral, 4: Drive |
12 | ctrl_mode | int8[] | - | 1: keyboard mode, 16: automode |
NPC Vehicle Collision Data
NPC 충돌 정보
VehicleCollisionInfoPublisher (Sim → User)
Message Type : morai_msgs/VehicleCollisionData
Default Topic : /VehicleCollisionData
타입 설명 : NPC 차량의 충돌 데이터를 나타내는 메시지
Header header
VehicleCollision[] collisions : 충돌 NPC 차량 List
ObjectStatus[] crashed_vehicles : 충돌한 NPC 차량 정보 ( 아래의 ObjectStatus 타입 참고)
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | header | Header | - | |
2 | collisions | - | 충돌한 NPC 차량의 목록 |
Vehicle Collision List
VehicleCollision 는 VehicleCollisionInfoPublisher 에서 사용되는 목록으로 독립되어서 사용되는 ROS Topic 이 없습니다.
ROS message details
Message Type: morai_msgs/VehicleCollision
No | Name | Type | Unit | Remarks |
---|---|---|---|---|
1 | crashed_vehicles | - | 충돌한 NPC 차량의 정보 |
통신 방식: Service Model
ScenraioLoad 메시지
Morai SLService Provider (User → SIM)
Service Name : /Service_MoraiSL
srv : morai_msgs/MoraiScenarioLoadSrv
Request Message Type : morai_msgs/ScenarioLoad
string file_name : load 할 Scenario_file_name
bool delete_all
True : Ego를 제외한 Scenario Data를 Delete 하고 Load
False : 모든 Scenario Data Load
delete_all 이 False 일때 아래의 Load Option을 사용해서 원하는 Scenario Data Load 가능.
bool load_ego_vehicle_data
True : Ego Scenario Data Load
False : Ego Scenario Data Load 안 함
bool load_surrounding_vehicle_data
True : NPC Vehicle Scenario Data Load
False : NPC Vehicle Scenario Data Load 안 함
bool load_pedestrian_data
True : pedestrian Scenario Data Load
False : pedestrian Scenario Data Load 안 함
bool load_object_data
True : Object Scenario Data Load
False : Object Scenario Data Load 안 함
bool set_pause
True : Scenario Load 후 Pause 상태로 유지 (Esc 키를 입력하여 Play 상태 전환 가능)
False : Scenario Load 후 바로 Play상태로 전환
Response Message Type : morai_msgs/MoraiSrvResponse
bool result : Service request 에 대한 결과
MoraiSImprocService Provider
Morai SimProcService Provider(User → Sim)
Service Name : /Morai_SimProc
srv : morai_msgs/MoraiSimProcSrv
Request Message Type : morai_msgs/MoraiSimProcHandle
int8 sim_process_status
0x01(Play)
0x10(Pause)
0x20(Stop - replay 모드에서만 사용 replay를 완전 종료)
아래 부터 mode = 0x10 (replay 모드) 일 때만 사용 가능하다
short replay_option
0x0001 (load file)
0x0010 (target)
0x0100 (start time)
0x1000 (배속 조절)
파일을 새로 로드 하고 target을 지정하고 싶으면
0x0011 (start time은 default로 0초부터 시작)
리플레이 중에 target을 지정하고 시작지점을 변경하고자 할 때
0x0110 (리플레이 중이 아니라면 SimProcStatus에서 에러 result를 보낸다.)
string rosbag_file_name
short replay_target_option
0x0001 (Ego)
0x0010 (NPC)
0x0100 (Pedestrian)
float start_time(millisecond)
int32 replay_speed (추가)
배속 값(1배속, 2배속…)
Response Message Type : morai_msgs/MoraiSrvResponse
bool result : Service request 에 대한 결과
Traffic Light 상태 호출 메시지
Morai SLService Provider (User → Sim)
Service Name : /Morai_TLSrv
srv : morai_msgs/MoraiTLInfoSrv
Request Message Type : morai_msgs/MoraiTLIndex
string idx : Traffic Light Idx
Response Message Type : morai_msgs/MoraiTLInfo
Header header
string idx : Traffic Light Idx
int16 status : Traffic Light의 상태 정보
RED: 1
Yellow : 4
Green : 16
GLEFT : 32
Green_with_GLeft : 48
Red_wiht_GLeft : 33
Red_with_Y = 5
Yellow_with_G = 20
Yellow_with_GLeft = 36
차량 스펙 호출 메시지
Morai Vehicle Spec Service Provider (User → Sim)
Service Name : /Service_MoraiVehicleSpec
srv : morai_msgs/MoraiVehicleSpecSrv
Request Message Type : morai_msgs/VehicleSpecIndex
int32 unique_id : 차량의 unique_id
Response Message Type : morai_msgs/VehicleSpec
int32 ctrl_mode : 차량의 control mode 현재 상태
geometry_msgs/Vector3 position : 차량의 크기 벡터
float64 x : 물체의 x(m단위) 크기.
float64 y : 물체의 y(m단위) 크기.
float64 z : 물체의 z(m단위) 크기.
float32 wheel_base : 차량의 wheel base (m단위) 길이
float32 Overhang : 차량의 OverHang (m단위) 길이
float32 Rear OverHang : 차량의 Rear OverHang (m단위) 길이
float64 max_steering : 차량의 최대 스티어링 (degree)
UDP 통신 메시지
Network Settings에서 제공하는 Ego Network 및 Simulator Network에서 UDP 통신으로 주고받는 메시지 타입, 각 메시지의 패킷 구조 및 데이터 크기와 같은 세부 프로토콜 정보를 설명한다.
Ego Network
Ego Network로 전송되는 UDP 메시지 및 각 메시지 별 프로토콜 정보는 아래와 같다.
Ego Ctrl Cmd
메시지 정의: 차량 제어 명령
메시지 프로토콜:
전체 패킷 크기 : 55 Bytes
데이터 크기 : 3 Bytes + 20 Bytes
데이터 구조 및 타입
CtrlMode 명령
1 : KeyBoard
2 : AutoMode
Gear 명령 (1 byte)
M : 0
P : 1 (주차)
R : 2 (후진)
N : 3 (중립)
D : 4 (주행)
L : 5 (L단)
longCmdType (1byte / CmdType / byte): 제어 방식을 결정하는 인덱스
longCmdType == 1: Throttle제어. accel/brake/steering
longCmdType == 2: Velocity제어. velocity/steering
longCmdType == 3: Acceleration제어
종방향 속도 제어 (4byte / Veloctiy / float)
longCmdType이 2일경우 사용. ( km/h )
종방향
종방향 가속도 제어 (4byte / Acceleration / float)
longCmdType이 3일경우 사용. ( m/s^2 )
종방향 엑셀 제어 명령 (4byte /Acceleration CMD float)
가속 페달 입력값 (0 ~ 1)
종방향 브레이크 제어 명령 (4byte / Brake CMD / float)
브레이크 페달 입력값 (0 ~ 1)
횡방향 제어 명령 (4byte / Steer CMD / float)
횡방향 제어 입력값 (-1 ~ 1 )
실제 제어 값 = 원하는 스티어링 값(degree) / 최대 조향각. ex) 최대 조향각 : Niro = 36.25 , ioniq = 36.25
23.R.10에서는 종방향 속도 제어 방식이 가속도 제어 방식으로 변경되어 속도 증가 시에는 1m/s^2의 제한, 속도 감소 시에는 -2m/s^2의 제한이 걸리도록 하여 한번에 갑자기 속도가 증가하거나 감속하여 채터링이 발생하는 현상을 방지했다. 따라서 아래 그림과 같이 불연속적인 속도 입력에 대한 반응 시간은 느려지나 안정적으로 목표 속도로 수렴하도록 변경되었다.
Ground Vehicle Direct Ctrl Cmd 24.R1.0 UPDATE
메시지 정의: 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_TURNG(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 24.R1.0 UPDATE
메시지 정의: 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 | Value | Type | Field | Lenth [byte] | Description | Units |
---|---|---|---|---|---|---|
start_indicator | 0x23 | byte | 0 | 1 | “#” |
|
header_name | “EgoGhostCmd” | byte[] | 1-10 | 11 |
|
|
doller_indicator | 0x24 | byte | 11 | 1 | “$” |
|
data_length | 32 | uint32_t | 12-15 | 4 |
|
|
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 | 0x0D | byte | 61 | 1 |
|
|
tail02 | 0x0A | byte | 62 | 1 |
|
|
Ego Vehicle Status
23.R1.0에서는 UDP 통신의 Ego Vehicle Status 메시지의 데이터 구조가 아래와 같이 변경되었다.
Timestamp (8 bytes) 추가
Angular Velocity (12 bytes) 추가
Sync Mode 사용 시 unix timestamp가 아닌 시뮬레이터 시작 시간 기준으로 계산을 한다.
메시지 정의: Ego 차량을 제어하기 위한 메시지
메시지 프로토콜
전체 패킷 크기 : 181 Bytes
데이터 크기 : 50 Bytes + 102 Bytes
Timestamp 정보
데이터 설명: Unix timestamp (1970/01/01) 으로부터 경과된 시간
첫번째 4 bytes: 경과된 초 단위 시간 (seconds)
두번째 4 bytes: timestamp의 소수 단위 초를 nanoseconds로 표현
CtrlMode 정보
1 : KeyBoard
2 : AutoMode
gear 정보
M : 0
P : 1 (주차)
R : 2 (후진)
N : 3 (중립)
D : 4 (주행)
L : 5 (L단)
차량 진행 방향 속도(4byte / signed velocity, float)
데이터 설명 : 차량 진행 방향 속도를 나타내는 정보이며 단위는 km/h 이다.
Map data id 값 (Map data id, int)
DigitalTwin Map = 0 ~ 9999
Virtual Map = 10000 ~ 19999
종방향 제어 명령 (4byte / Accel / float)
데이터 설명 : 가속 페달 입력값 (0 ~ 1)
종방향 제어 명령 (4byte / Brake / float)
데이터 설명 : 브레이크 페달 입력값 (0 ~ 1)
Ego 차량 크기 정보(sizeXYZ, float)
데이터 설명 : 오브젝트의 크기를 나타내는 정보이며 단위는 m이다.
차량 Overhang 정보 (4byte / OverHang / float)
데이터 설명 : Ego 차량의 OverHang 정보
차량 WheelBase 정보 (4byte / WheelBase/ float)
데이터 설명 : Ego 차량의 WheelBase 정보
차량 Rear Overhang 정보 (4byte / Rear OverHang / float)
데이터 설명 : Ego 차량의 Rear OverHang 정보
차량 위치 정보(posXYZ, float)
데이터 설명 : 차량의 위치를 나타내는 정보이며 단위는 m이다.
차량 회전 정보(Roll/Pitch/Heading, float)
데이터 설명 : 차량의 회전을 나타내는 정보이며 단위는 deg이다.
차량 속도 정보(4Byte * 3 / Velocity_XYZ / float)
데이터 설명 : 차량의 현재 속도를 나타내는 정보이며 단위는 km/h이다.
float x
float y
float z
회전 각속도 정보( 4 bytes * 3, deg/s)
데이터 설명: 차량의 중심 기준 회전 각속도를 나타내는 벡터
float x
float y
float z
acceleration (4Byte * 3 / Accel_XYZ / float)
차량의 가속도 벡터 ( m/s^2 )
float x
float y
float z
차량 횡방향 정보(Steer, float)
데이터 설명 : 차량의 횡방향을 나타내는 정보이며 단위는 deg이다.
차량이 위치한 Mgeo Link 의 ID 정보 ( 38 byte / Link ID / String) (New)
Object Info
23.R1.0에서는 UDP 통신의 Object Info 메시지의 데이터 구조가 아래와 같이 변경되었다.
데이터 패킷 앞에 Timestamp (8 bytes) 추가
Timestamp는 패킷 내 각 오브젝트마다 추가하지 않고 한 패킷 당 한번만 추가하여 전송
메시지 정의: 사용자가 배치한 주변 물체에 대한 정보를 나타내는 메시지
메시지 프로토콜
전체 패킷 크기 : 2160 Bytes
데이터 크기 : 2120 Bytes(106 Bytes * 20)
데이터는 주변 차량, 보행자, Object 를 현재 자신의 차량의 거리가 가까운 순으로 총 20개 Object 의 데이터를 얻을 수 있다.
Object 아이디(인덱스) 정보(2byte / Objid / int)
데이터 설명 : 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/s^2 )
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/s^2 )
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/s^2 )
float x
float y
float z