교차로 제어 방법
본 페이지는 ROS Message를 이용한 교차로 제어 방법 및 상태를 받아오는 방법을 소개한다.
교차로 제어 메시지
: 신호등은 개별로 움직이는 것이 아닌 교차로에 있는 다른 신호등과 같이 연동되어있기 때문에 현재는 교차로의 인덱스에 접근하여 교차로의 상태를 변경하는 방식을 제공한다.
추후에 각 신호등을 제어할 수 있는 인터페이스 제공 예정
K-City에 할당 되어있는 교차로 index 및 신호등 정보
신호등 상태정보
: MORAI의 신호등 상태 정보에 대한 정의는 아래와 같다. ROS Message를 통해 들어오는 정보는 아래의 신호 상태값들 따른다.
/// <summary>
/// 등화된 상태에 대한 정의
/// [초록색 좌회전 신호 + 초록색 직진 신호]가 함께 들어오는 경우와 같이,
/// 혼합된 상태도 하나의 state로 표현한다
///
/// 구현된 state의 종류는 공공데이터 포털의 '전국신호등표준데이터’를 참고한 것
/// </summary>
public enum LightColor : short
{
R = 0b000000000001,
Y = 0b000000000100,
SG = 0b000000010000, // Straigt Green >> 직진 녹색
LG = 0b000000100000, // Left Green >> ← 좌회전 녹색
RG = 0b000001000000, // Right Green >> → 우회전 녹색
UTG = 0b000010000000, // UTurn Green
ULG = 0b000100000000, // Upper Left Green >> ↖
URG = 0b001000000000, // Upper Right Green >> ↗
LLG = 0b010000000000, // Lower Left Green >> ↙
LRG = 0b100000000000, // Lower Right Green >> ↘
R_with_Y = R | Y,
Y_with_G = Y | SG,
Y_with_GLeft = Y | LG,
G_with_GLeft = SG | LG,
R_with_GLeft = R | LG,
LLG_SG = SG | LLG,
R_LLG = R | LLG,
Undefined = -1, // 신호등이 초기화 되지 않았을 때 Undefined로 정의한다
}
각 교차로의 Index(K-City)

K-City에 할당되어있는 교차로 Index 정보
교차로별 상태(K-City)
: 아래는 교차로별로 가지고있는 상태에 대한 정보를 나타낸다.

교차로 상태 보는 방법 예시
Inter Section Index == "IntTL1"
G_with_GLeft / R / R
R / G_with_GLeft / R
R / R / G_with_GLeft

IntTL1의 Traffic Number 및 Index 정보
Inter Section Index == "IntTL2"
SG / R / SG / R
G_with_GLeft / R / R, R
R / R / R / G_with_GLeft
R / SG / R / SG
R / G_with_GLeft / R / R
R / R / G_with_GLeft / R

IntTL2의 Traffic Number 및 Index 정보
Inter Section Index == "IntTL3"
SG / R
R / SG

IntTL3의 Traffic Number 및 Index 정보
Inter Section Index == "IntTL4"
R_with_GLeft / R / R
R / R / G_with_GLeft
R / SG / SG

IntTL4의 Traffic Number 및 Index 정보
Inter Section Index == "IntTL5"
SG / R / SG / R
G_with_GLeft / R / R / R
R / R / R / G_with_GLeft
R / SG / R / SG
R / G_with_GLeft / R / R
R / R / G_with_GLeft / R

IntTL5의 Traffic Number 및 Index 정보
Inter Section Index == "IntTL6"
SG / R / SG / R
G_with_GLeft / R / R / R
R / R / R / G_with_GLeft
R / SG / R / SG
R / G_with_GLeft / R / R
R / R / G_with_GLeft / R

IntTL6의 Traffic Number 및 Index 정보
Inter Section Index == "IntTL7"
SG / R / SG / R
G_with_GLeft / R / R / R
R / R / R / G_with_GLeft
R / SG / R / SG
R / G_with_GLeft / R / R
R / R / G_with_GLeft / R

IntTL7의 Traffic Number 및 Index 정보
Inter Section Index == "IntTL8"
R / R / G_with_GLeft
R / R_with_GLeft / R
SG / R / R

IntTL8의 Traffic Number 및 Index 정보
교차로 제어 ROS Message Type(Sim ← User)
Message Type : morai_msgs/IntersectionControl
Default Topic : /InsnControl
타입 설명 : 교차로를 제어할때 사용하는 메시지 타입
Header header
string intersection_index: 교차로 인덱스
int16 intersection_status: 교차로 상태
float32 intersection_status_time: 세팅한 교차로 상태의 지난 시간(s)
교차로 상태 ROS Message Type(Sim → User)
Message Type : morai_msgs/IntersectionStatus
Default Topic : /InsnStatus
타입 설명 : 교차로의 상태를 받아올때 사용하는 메시지 타입
Header header
string intersection_index: 교차로 인덱스
int16 intersection_status: 교차로 상태
float32 intersection_status_time: 현재 교차로 상태로 지난 시간(s)
string traffic_light_index: 신호등 인덱스
int16 traffic_light_status: 신호등 상태
int16 traffic_light_next_status: 다음 신호등 정보(*현재는 제공안함)
교차로 상태 ROS Message Type(Sim → User)
Message Type : morai_msgs/IntscnTL
Default Topic : /IntscnTL_topic
타입 설명 : 교차로의 상태를 받아올때 사용하는 메시지 타입
string[] idx : 교차로의 Index ['IntRL1', 'IntRL2', 'IntRL3', 'IntRL4', 'IntRL5', 'IntRL6', 'IntRL7', 'IntRL8']
int32[] state : 교차로의 상태 (2, 5, 1, 2, 1, 1, 1, 2)
float32[] delta_time