본 페이지는 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로 정의한다
    }
C#

각 교차로의 Index(K-City)

K-City에 할당되어있는 교차로 Index 정보

교차로별 상태(K-City)

: 아래는 교차로별로 가지고있는 상태에 대한 정보를 나타낸다.

교차로 상태 보는 방법 예시

  • Inter Section Index == "IntTL1"

    1. G_with_GLeft / R / R

    2. R / G_with_GLeft / R

    3. R / R / G_with_GLeft

IntTL1의 Traffic Number 및 Index 정보

  • Inter Section Index == "IntTL2"

    1. SG / R / SG / R

    2. G_with_GLeft / R / R, R

    3. R / R / R / G_with_GLeft

    4. R / SG / R / SG

    5. R / G_with_GLeft / R / R

    6. R / R / G_with_GLeft / R

IntTL2의 Traffic Number 및 Index 정보

  • Inter Section Index == "IntTL3"

    1. SG / R

    2. R / SG

IntTL3의 Traffic Number 및 Index 정보

  • Inter Section Index == "IntTL4"

    1. R_with_GLeft / R / R

    2. R / R / G_with_GLeft

    3. R / SG / SG

IntTL4의 Traffic Number 및 Index 정보

  • Inter Section Index == "IntTL5"

    1. SG / R / SG / R

    2. G_with_GLeft / R / R / R

    3. R / R / R / G_with_GLeft

    4. R / SG / R / SG

    5. R / G_with_GLeft / R / R

    6. R / R / G_with_GLeft / R

IntTL5의 Traffic Number 및 Index 정보

  • Inter Section Index == "IntTL6"

    1. SG / R / SG / R

    2. G_with_GLeft / R / R / R

    3. R / R / R / G_with_GLeft

    4. R / SG / R / SG

    5. R / G_with_GLeft / R / R

    6. R / R / G_with_GLeft / R

IntTL6의 Traffic Number 및 Index 정보

  • Inter Section Index == "IntTL7"

    1. SG / R / SG / R

    2. G_with_GLeft / R / R / R

    3. R / R / R / G_with_GLeft

    4. R / SG / R / SG

    5. R / G_with_GLeft / R / R

    6. R / R / G_with_GLeft / R

IntTL7의 Traffic Number 및 Index 정보

  • Inter Section Index == "IntTL8"

    1. R / R / G_with_GLeft

    2. R / R_with_GLeft / R

    3. 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