2021-02-09

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/fb0130eb-d074-46c0-a685-9351e5f6ccc8/Untitled.png

동작 알고리즘

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/24b6af2c-5a84-4717-bc3d-5f5226ccc8eb/Untitled.png

차량과 imu 센서로부터 각각 속력과 헤딩값을 받습니다. 이때 GPS 궤적 이동거리와의 비교 및 퓨전을 위해 2D 좌표로 변환시켜 변위를 산출하게 되고 그 변위를 각각 x축 y축에 대해서 데드 레코닝을 구현하게 됩니다.

그리고 나서 RTK 모듈로 부터 GPS값을 데드레코닝한 값으로 신뢰도를 검증하게 됩니다. 마지막으로 GPS와 데드레코닝의 퓨전을 통해 차량의 현재 위치 값을 추정할 수 있게 됩니다.

2D 변위 산출

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4370b9de-1f9c-4974-80e4-a91bef5e3351/Untitled.png

노면 기울기와 속도를 이용하여 2D변위를 산출 하게 됩니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8210ba08-acb0-4f1c-b6cd-bdde48c2e024/Untitled.png

차량 수직 방향과 차량 종방향 가속도 2축의 중력가속도를 측정하여 노면의 기울기를 구할 수 있지만 차량이 가속도 운동을 하는 경우 측정되는 가속도 값에 차량의 운동 값이 포함되어 노면 기울기 값에 오차가 발생합니다. 즉 가속도 센서로 노면의 기울기를 구하게 되면 정지된 상태에서만 정확한 값을 얻을 수 있습니다. 따라서 휠 센서로 얻은 속도를 미분하여 구한 운동 가속도 값 성분을 제거 해주어 순수한 중력 가속도 성분값에 비슷한 성분만을 구할 수 있습니다.

또한 자이로 센서(각속도)를 이용하여 각속도를 측정한 후 적분을 통해서 노면 기울기를 구하게 되면 적분오차(누적오차)가 발생하게 되지만 가속도 운동을 하고 있는 상태에서 가속도 센서로 구한 노면기울기의 값보다 정확 할 수 있습니다. 이때 적분오차를 줄이기위해 칼만필터를 이용하여 적분오차를 줄이게 됩니다.

최종적으로 가속도센서로 구한 데이터에 자이로 센서를 이용한 데이터를 보조적으로 활용할 수 있도록 상보필터를 사용하여 노면기울기를 산출 할 수 있습니다.

Dead Reckoing 위치 추정

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b907f909-5ac6-4681-8c9a-3a322ca1221b/Untitled.png

데드 레코닝 위치 추정 방식은 실시간 위치 추정 방식과 구간 위치 추정 방식을 병행하는 방법으로 진행할 예정입니다. 첫번째로 실시간 위치 추정 방식은 헤딩 변화량과 위치 변위를 반영하여 각각 X와 Y좌표를 업데이트 하고 구간 위치 추정 방식은 GPS 정보의 갱신 주기마다 저장하는 헤딩 변화량과 위치 변위량을 이용하여 X와 Y좌표를 갱신합니다.

2021-02-22

Localization

BASE : RTK GPS

20210326

평면직각좌표계 :

타원체체면상의 경위도 좌표를 평면직각좌표로 변환

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/44f4e5c5-8ac4-4ed3-a5d6-d76150088b33/Untitled.png

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/33c7d060-ee68-451e-913f-8e92534c37eb/Untitled.png

from pyproj import Proj, transform
import numpy as np
import pandas  as pd

# Projection 정의
# UTM-K
proj_UTMK = Proj(init='epsg:5178') # UTM-K(Bassel) 도로명주소 지도 사용 중

# WGS1984
proj_WGS84 = Proj(init='epsg:4326') # Wgs84 경도/위도, GPS사용 전지구 좌표

# UTM-K -> WGS84 샘플
x1, y1 = 961114.519726,1727112.269174
x2, y2 = transform(proj_UTMK,proj_WGS84,x1,y1)
print(x2,y2)

# WGS84 -> UTM-K 샘플
x1, y1 = 127.07098392510115, 35.53895289091983
x2, y2 = transform(proj_WGS84, proj_UTMK, x1, y1)
print(x2,y2)

# x, y 컬럼을 이용하여 UTM-K좌표를 WGS84로 변환한 Series데이터 반환
def transform_utmk_to_w84(df):
    return pd.Series(transform(proj_UTMK, proj_WGS84, df['x'], df['y']), index=['x', 'y'])

df_xy = pd.DataFrame([
                                        ['A', 961114.519726,1727112.269174],
                                        ['B', 940934.895125,1685175.196487],
                                        ['C', 1087922.228298,1761958.688262]
                                    ], columns=['id', 'x', 'y'])

df_xy[['x_w84', 'y_w84']] = df_xy.apply(transform_utmk_to_w84, axis=1)