ERP-42
본 페이지는 ERP-42 Simulator에서 제공하는 UDP, UDP + Serial , ROS, ROS + Serial 총 4가지의 데이터 통신 방식에 대해 설명한다.
UDP
사용자는 UDP 통신을 이용하여 다음의 동작을 수행할 수 있다
ERP-42 제어를 위한 상태 수신 + 명령 전송
ERP-42 주변 물체에 대한 Ground Truth 정보 수신
ROS
사용자는 ROS 통신을 이용하여 다음의 동작을 수행할 수 있다
ERP-42 제어를 위한 상태 수신 + 명령 전송
ERP-42 주변 물체에 대한 Ground Truth 정보 수신
Serial+UDP
실제 ERP-42를 사용할 때와 같이, ERP-42의 상태 수신과 명령 전송에 Serial 통신을 이용하고, 나머지 데이터를 UDP로 주고 받는다.
사용자는 Serial 통신을 이용하여 다음의 동작을 수행할 수 있다 (실제 ERP-42와 동일한 프로토콜)
ERP-42 제어를 위한 상태 수신 + 명령 전송
다음의 동작에는 UDP 통신을 이용한다
ERP-42의 상태 수신 (실제 ERP-42 프로토콜에서 제공되지 않는 Ground Truth, 예: ERP-42의 위치, 헤딩)
ERP-42의 주변 물체에 대한 Ground Truth 정보 수신
Serial+ROS
실제 ERP-42를 사용할 때와 같이, ERP-42의 상태 수신과 명령 전송에 Serial 통신을 이용하고, 나머지 데이터는 ROS로 주고 받는다.
사용자는 Serial 통신을 이용하여 다음의 동작을 수행할 수 있다 (실제 ERP-42와 동일한 프로토콜)
ERP-42 제어를 위한 상태 수신 + 명령 전송
다음의 동작에는 ROS 통신을 이용한다
ERP-42의 상태 수신 (실제 ERP-42 프로토콜에서 제공되지 않는 Ground Truth, 예: ERP-42의 위치, 헤딩)
ERP-42의 주변 물체에 대한 Ground Truth 정보 수신
네트워크 설정
사용자의 자율주행 SW와 시뮬레이터 사이의 데이터 통신을 위한 설정 정보를 입력한다.
UDP 세부 설정
IP Setting
시뮬레이터 PC에는 Host IP, 사용자 알고리즘 PC에는 Destination IP 입력
사진과 같이 하나의 PC에서 모두 사용할 경우 다음과 같이 127.0.0.1 입력
Ego Ctrl Cmd
차량 명령을 전송하기 위한 포트를 입력한다 (다른 포트와의 중복에 주의)
Collision Data
Ego 차량과의 충돌 데이터를 수신하기 위한 포트를 입력한다 (다른 포트와의 중복에 주의)
Ego Vehicle Status
차량 상태를 수신하기 위한 포트를 입력한다 (다른 포트와의 중복에 주의)
Object Info
주변 물체 정보를 수신하기 위한 포트를 입력한다 (다른 포트와의 중복에 주의)
Get TrafficLight Status
신호등 상태를 수신하기 위한 포트를 입력한다 (다른 포트와의 중복에 주의)
Set TrafficLight Ctrl
신호등 명령를 전송하기 위한 포트를 입력한다 (다른 포트와의 중복에 주의)
UDP 메세지 타입
시뮬레이터에서 정의한 UDP 메시지 타입 사용(통신 프로토콜 참조)
Ego Ctrl Cmd
차량 제어 명령
전체 패킷 크기 : 55 Bytes
데이터 크기 : 3 Bytes + 20 Bytes
CtrlMode 명령
1 : KeyBoard
2 : AutoMode
Gear 명령 (gear, 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 / Accel / float)
데이터 설명 : 가속 페달 입력값 (0 ~ 1)
종방향 제어 명령 (4byte / Brake / float)
데이터 설명 : 브레이크 페달 입력값 (0 ~ 1)
횡방향 제어 명령 (4byte / Steer / float)
데이터 설명 : 횡방향 제어 입력값 (-1 ~ 1 )
Min : -28.17 ~ Max :28.17 (deg)
종방향 제어 명령 velocity (4byte / veloctiy / float)
longCmdType이 2일경우 사용. ( km/h )
종방향 제어 명령 acceleration (4byte / Accel/ float)
longCmdType이 3일경우 사용. ( m/s^2 )
Collision Data
충돌 정보
타입 설명 : Ego 차량과의 충돌 데이터를 나타내는 메시지
통신 프로토콜
전체 패킷 크기 : 173 Byte
데이터 크기 : 140(28*5)Bytes
오브젝트 타입 정보(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
Ego Vehicle Status
차량 상태 정보
타입 설명 : 제어 차량을 제어하기 위한 메시지
통신 프로토콜
전체 패킷 크기 : 161 Bytes
데이터 크기 : 42 Bytes + 90 Bytes
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
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)
Object Info
주변 물체 정보
타입 설명 : 사용자가 배치한 주변 물체에 대한 정보를 나타내는 메시지
통신 프로토콜
전체 패킷 크기 : 2152 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)
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 : 5
Yellow with Green : 20
Yellow with GreenLeft : 36
default : -1
Set TrafficLight Ctrl
신호등 상태 정보
타입 설명 : 신호등 상태를 제어하는 메시지
통신 프로토콜
전체 패킷 크기 : 47 Bytes
데이터 크기 : 15 Bytes
trafficLightIndex
메시지 설명 : 신호등의 ID
trfficLightStatus
메시지 설명 : 신호등의 신호 상태를 설정함.
Red : 1
Yellow : 4
Green : 16
GreenLeft : 32
Green with GreenLeft : 5
Yellow with Green : 20
Yellow with GreenLeft : 36
default : -1
ROS 세부 설정
Bridge Setting
ROS Bridge의 IP와 Port를 입력한다.
Ego Ctrl Cmd
Message Type: (Read-only) ERP-42를 제어하기 위한 메세지 타입
Message Topic: 위 타입의 메세지를 전송/수신하기 위한 Topic 이름을 입력한다
Object Info
Message Type: (Read-only) ERP-42 주변 물체 정보를 담고 있는 메세지 타입
Message Topic: 위 타입의 메세지를 전송/수신하기 위한 Topic 이름을 입력한다
Ego Vehicle Status
Message Type: (Read-only) ERP-42 상태 정보를 담고 있는 메세지 타입
Message Topic: 위 타입의 메세지를 전송/수신하기 위한 Topic 이름을 입력한다
Get Traffic Light Status
Message Type: (Read-only) Traffic Light 상태 정보를 담고 있는 메세지 타입
Message Topic: 위 타입의 메세지를 전송/수신하기 위한 Topic 이름을 입력한다
Set Traffic Light Ctrl
Message Type: (Read-only) Traffic Light 상태 정보를 담고 있는 메세지 타입
Message Topic: 위 타입의 메세지를 전송/수신하기 위한 Topic 이름을 입력한다
ROS 메세지 타입
시뮬레이터에서 정의한 타입의 메시지 사용
Ego Ctrl Cmd
차량 제어 명령
MoraiCmdController
Message Type : morai_msg/CtrlCmd
Default Topic : /ctrl_cmd
타입 설명 : Ego 차량을 제어하기 위한 메시지
int32 longCmdType: 제어 방식을 결정하는 인덱스.
longCmdType == 1: Throttle제어. accel/brake/steering만 사용
longCmdType == 2: Velocity제어. velocity/steering만 사용
longCmdType == 3: Acceleration제어. acceleration/steering만 사용
float64 accel : 차량의 엑셀값을 의미하며 0 ~ 1 범위를 가진다.
float64 brake : 차량의 브레이크값을 의미하며 0 ~ 1 범위를 가진다.
float64 steering : 차량의 바퀴 각도(Wheel Angle)를 의미하며 Rad단위이다.
float64 velocity : longCmdType이 2일경우 사용. km/h의 단위를 가진다.
float64 acceleration : longCmdType이 3일경우 사용. m/s^2의 단위를 가진다
Collision Data
충돌 정보
CollisionData (Sim → User)
Message Type : morai_msgs/CollisionData
Default Topic : /CollisionData
타입 설명 : Ego 차량과의 충돌 데이터를 나타내는 메시지
Header header
float32 global_offset_x
float32 global_offset_y
float32 global_offset_z
ObjectStatus[] Collision_object : Ego 와 충돌한 Object 정보
ObjectStatus 타입 설명
int32 unique_id : 물체의 unique id 값
int32 type : 물체의 타입
-1 : Ego Vehicle, 0 : Pedestrian, 1 : Surround Vehicle (NPC) , 2: Obstacle
string name : 물체의 이름
float64 heading : 차량의 헤딩(deg)을 나타냄. 북쪽이 0deg 이며 동쪽에서 북쪽으로 이동할 때 +방향이다.
geometry_msgs/Vector3 velocity : NPC의 속도 벡터
float64 x : 차량 기준 좌표의 x축 방향 속도
float64 y : 차량 기준 좌표의 y축 방향 속도
float64 z : 차량 기준 좌표의 z축 방향 속도
geometry_msgs/Vector3 position : 물체의 위치 벡터
float64 x : 물체의 x(m단위) 위치를 나타내며 동쪽(East)이다.
float64 y : 물체의 y(m단위) 위치를 나타내며 북쪽(North)이다.
float64 z : 물체의 z(m단위) 위치를 나타내며 위(Up)다.
geometry_msgs/Vector3 acceleration : 물체의 가속도 벡터 ( https://morai.atlassian.net/wiki/spaces/MUMSP/pages/580649139 기준 )
float64 x : 물체의 x축 방향 가속도.
float64 y : 물체의 y축 방향 가속도.
float64 z : 물체의 z축 방향 가속도.
geometry_msgs/Vector3 position : 물체의 크기 벡터
float64 x : 물체의 x(m단위) 크기.
float64 y : 물체의 y(m단위) 크기.
float64 z : 물체의 z(m단위) 크기.
Ego Vehicle Status
차량 상태 정보
MoraiInfoPublisher (Sim → User)
Message Type : morai_msgs/EgoVehicleStatus
Default Topic : /Ego_topic
타입 설명 : 제어 차량의 상태 정보를 나타내는 메시지
Header header
int32 unique_id : 오브젝트의 unique id 값
geometry_msgs/Vector3 position : 차량의 위치 벡터
float64 x : 차량의 x(m단위) 위치를 나타내며 동쪽(East)이다. Global UTM좌표에서 (302459.942m, 4122635.537m)을 뺀 값이다. (K-City기준)
float64 y : 차량의 y(m단위) 위치를 나타내며 북쪽(North)이다. Global UTM좌표에서 (302459.942m, 4122635.537m)을 뺀 값이다. (K-City기준)
float64 z : 차량의 z(m단위) 위치를 나타내며 위(Up)다.
geometry_msgs/Vector3 velocity : 차량의 속도 벡터
float64 x : 차량 기준 좌표의 x축 방향 속도(m/s )
float64 y : 차량 기준 좌표의 y축 방향 속도(m/s)
float64 z : 차량 기준 좌표의 z축 방향 속도(m/s)
geometry_msgs/Vector3 acceleration : 차량의 가속도 벡터
float64 x : 차량 기준 좌표의 x축 방향 가속도(m/s2)
float64 y : 차량 기준 좌표의 y축 방향 가속도(m/s2)
float64 z : 차량 기준 좌표의 z축 방향 가속도(m/s2)
float64 heading : 차량의 헤딩(deg)을 나타냄. 동쪽이 0deg 이며 동쪽에서 북쪽으로 이동할 때 +방향이다. 즉, CCW일때 각도가 증가한다.
float64 accel : 차량의 엑셀 상태 값 (0~1)
float64 brake : 차량의 브레이크 상태 값 (0~1)
float64 wheel_angle : 현재 차량 제어로 입력받은 Wheel_angle 값 (deg)
Object Info
주변 물체 정보
MoraiObjectInfoPublisher (Sim → User)
Message Type : morai_msgs/ObjectStatusList
Default Topic : /Object_topic
타입 설명 : 사용자가 배치한 주변 물체들에 대한 정보를 나타내는 메시지
Header header
int32 num_of_npcs : 사용자가 배치한 npc 차량의 개수.
int32 num_of_pedestrian : 사용자가 배치한 pedestrian의 개수.
int32 num_of_obstacle : 사용자가 배치한 obstacle의 개수.
ObjectStatus[] npc_list : npc 차량 정보 ( 아래의 ObjectStatus 타입 참고)
ObjectStatus[] pedestrian_list : pedestrian 정보 ( 아래의 ObjectStatus 타입 참고)
ObjectStatus[] obstacle_list : obstacle 정보 ( 아래의 ObjectStatus 타입 참고)
Get TrafficLight Status
신호등 상태 정보
TLCtrlPublisher (Sim → User)
Message Type : morai_msgs/GetTrafficLightStatus
Default Topic : /GetTrafficLightStatus
타입 설명 : TrafficLight 에 대한 정보를 나타내는 메시지
Header header
string trafficLightIndex : TrafficLight 의 index 값
int16 trafficeLightType : TrafficeLight의 LightType 값
int16 trafficLightStatus : TrafficeLight의 Status 값
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
Set TrafficLight Control
신호등 상태 제어
TLCtrlSubscriber (User → Sim)
Message Type : morai_msgs/SetTrafficLight
Default Topic : /SetTrafficLight
타입 설명 : TrafficLight의 상태를 제어하기 위한 메시지
string trafficLightIndex : TrafficeLight의 Index 값 (신호등의 등록 정보)
int16 trafficLightType : TrafficeLight의 Status 값
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
Serial 통신
준비 사항
시뮬레이터가 실제 ERP-42의 시리얼 통신 방식을 모사하기 때문에, 시뮬레이터가 실행되는 PC에서 ERP-42의 시리얼포트를 모사할 수 있어야 한다.
이를 위해 USB to RS-232 (Female) 인터페이스를 사용하여 전기적인 인터페이스 레벨에서 ERP-42를 모사할 수 있다. 이 경우, 실제 ERP-42에 연결할 RS-232 (Male) 케이블을 시뮬레이터가 실행되는 PC의 RS-232 (Female) 케이블에 연결하여 시뮬레이션을 수행할 수 있다.
또는 가상포트 프로그램을 이용할 수 있다. (시뮬레이터와 유저의 알고리즘을 1대의 PC에서 실행할 경우)
Ego Ctrl Cmd & Vehicle Status
Serial Port Number에 ERP-42의 시리얼포트를 모사할 포트를 입력한다 (준비 사항 참고)
Baudrate, Parity 등 나머지 값은 실제 ERP-42 통신 방식을 그대로 따르기 때문에 read-only로 고정되어 있다
실제 ERP-42를 사용할 때와 같이, ERP-42의 상태 수신과 명령 전송에 Serial 통신을 이용하는 방식이다. (ERP-42 상태 정보 중 Encoder는 미지원)
단, UDP, ROS를 이용해 ERP-42의 위치와 같이 Serial 프로토콜을 통해 제공되지 않는 상태 변수의 Ground Truth와 주변 물체에 대한 Ground Truth 데이터를 수신할 수 있다.
Ego Ctrl Cmd & Ego Vehicle Status (Serial)
차량 제어 명령 및 차량 상태 정보
타입 설명 : 실제 ERP-42와 Serial 통신 프로토콜과 동일
시리얼 통신을 이용해 제어 명령을 보내어 ERP-42를 움직일 수 있고, ERP-42의 상태 정보를 수신할 수 있다
통신 프로토콜 : PCU(시뮬레이터), UPPER(사용자알고리즘)
네트워크 설정 저장 & 불러오기
Save Network를 이용하여 현재의 네트워크 설정 정보를 저장할 수 있다.
저장된 네트워크 설정 정보는 File List에 표시되며, 설정 정보를 Load를 통해 불러오거나, Del을 통해 삭제할 수 있다.