ARTIV_OSM_FORMATTER [PART 2]

artiv_osm_formatter의 모든것

Featured image

ARTIV_OSM_FORMATTER [PART 1]에서 주행유도선을 구성하는 node 간격을 세분화 및 균일화하는 것에 대해 설명하였다.

위 글과 Let’s Use Pyroutelib3!에서 개발이 필요하다고 말한 차로변경 way 형성 기능을 이번에 추가하였다.

차로변경 Way가 만들어지는 과정

1. 주행유도선 파일과 차선 파일을 불러온다.

우리 HD Map은 국토지리정보원의 것을 기반으로 하기 때문에, way에 작성되어 있는 tag 또한 그대로 이용하였다.

차선 정보가 들어있는 B2_SURFACELINEMARK.osm 파일을 보면, 'Type'이라는 tag로 차선 형태를 구별한다.

차로 변경이 가능한 경우는 백색 점선, 백색 좌점혼선(겹선의 형태로, 왼쪽은 점선 오른쪽은 실선), 백색 우점혼선(겹선의 형태로, 왼쪽은 실선 오른쪽은 점섬)인 경우이다.
편도 1차로 도로에서 중앙선을 넘어 추월을 허용하는 황색 점선 등은 포함하지 않았다.

태그에 대한 자세한 정보는 국토지리정보원의 문서를 통해 확인할 수 있다.

차선이 백색 점선인 경우에는 왼쪽에서 오른쪽, 오른쪽에서 왼쪽 모두 차선 변경이 가능하지만, 좌점혼선이나 우점혼선의 경우는 한쪽 방향으로만 차선 변경이 가능하다.

2. 주행유도선 파일과 차선 파일을 파싱한다.

위에서 말한 3가지 타입의 차로 변경 가능 구역을 별도의 list로 만들었다.

left_change = [] #왼쪽으로만 차선 변경이 가능할 경우 right to left
right_change = [] #오른쪽으로만 차선 변경이 가능할 경우 left to right
both_change = [] #양쪽으로 차선 변경이 가능할 경우 

이 list에는 'L_LINKID''R_LINKID' 정보가 tuple 형태로 들어간다.

'L_LINKID'는 차선 왼쪽에 위치한 주행유도선의 ID를 나타내는 tag이고, 'R_LINKID'는 차선 오른쪽에 위치한 주행유도선의 ID를 나타내는 tag이다.

각 LINKID를 통해 주행유도선 정보를 얻을 수 있는 것이다.

3. 정한 규정에 맞추어 차로 변경 구간을 계산한다.

4. 차로 변경 way를 형성한다.

위 규칙들을 만족할 때 시점의 node ID와 종점의 node ID를 이용하여 새로운 way를 형성하였다.

이 way에 들어가는 tag는 아래와 같다.

{'Maker' : 'ARTIV_osm_formatter',
 'LinkType' : 'lane_change',
 'highway' : 'ARTIV_lane_change'}

어떤 용도로 어떻게 만들었는지 알기 위해 'Maker''LinkType' tag를 추가하였고, pyroutelib3를 이용하여 path planning을 수행할 때 차로 변경 way에는 가중치를 다르게 줄 수 있도록 'highway' : 'ARTIV_lane_change'를 추가하였다.

차로 변경 way의 weight이 일반 주행유도선과 동일하여 불필요한 차로 변경을 유발하지 않게 하기 위함이다.

Result

image3

ARTIV_osm_formatter를 실행시킨 최종 결과는 위와 같다.

왼쪽은 원본 A2_LINK.osm파일이고, 오른쪽은 output파일이다.

노드가 촘촘해지고, 차로 변경 way가 추가되었음을 알 수 있다.

USAGE

ARTIV_osm_formatter의 코드는 github에서 확인할 수 있다.

지난번엔 sys.argv를 이용해 input, output 파일명을 지정하였는데, argparse를 이용하는 것으로 변경하였다.

–file 혹은 -f 인자를 통해 <--input_link_file--> <--input_lane_file--> <--output__file_name-->을 지정할 수 있고, –option 혹은 -o 인자를 통해 <--node_interval--> <--#_of_lane_change_nodes-->을 지정할 수 있다.

기본값은 아래와 같다.

LINK File : "A2_LINK.osm"
LANE File : "B2_SURFACELINEMARK.osm"
Output File : "A2_LINK_output.osm"

Node Interval : 1 meter(s)
# of Lane Change Nodes : 20