본문 바로가기

카테고리 없음

로봇의 구조적 파라미터 추정을 통한 odometry 정밀도 향상

Differential drive 방식의 모바일 로봇에서 좌우 바퀴간의 정확한 거리와 좌우 바퀴의 정확한 크기를 알아야 오도메트리를 에러 없이 계산할 수 있습니다. 하지만 로봇의 무게에 의해 바퀴의 반경이 변하게 되고 바퀴와 지면 간에 면접촉이 발생함으로 좌우 바퀴간의 정확한 거리를 알 수 없는 경우가 많습니다. 여기서는 이러한 로봇의 구조적 파라메터에 대한 오차(오른쪽과 왼쪽 바퀴의 크기, 좌우 바퀴간 거리)를 두 개의 칼만필터를 사용하여 보정하는 방법을 소개합니다.

 

오도메트리 정밀도 향상에 대해 다음 pdf 문서를 참고하시기 바랍니다.

오도메트리 보정.pdf
0.23MB

 

그리고 시뮬레이션을 위해 작성된 코드를 참고하시기 바랍니다.

ImproveOdometry.zip
3.48MB

 

diff_drive_robot.cpp 파일에 보시면 로봇의 구조적 파라미터(좌우 바퀴의 반지름과 바퀴간 거리)와 구조적 파라미터에 대한 오차가 정의되어 있습니다. 시뮬레이션 함수 robot_move()는 호출될 때마다 로봇의 구조적 파라미터와 오차를 포함하여 로봇의 위치와 방위를 계산하게 됩니다. 하지만 로봇의 위치를 추정하는 칼만필터(EkfPosition)는 로봇의 구조적 파라미터만 가지고 로봇의 위치와 방위를 계산하는데 로봇의 구조적 파라미터에 대한 오차로 인해 위치추정 정밀도가 떨어지게 됩니다. 그래서 위치추정 정밀도를 보상하기 위해 로봇의 구조적 파라미터 오차를 추정하는 칼만필터(EkfOdometry)가 하나 더 추가됩니다.

 

상기 프로그램의 시뮬레이션 결과를 보시기 바랍니다.

오른쪽 바퀴의 반지름 오차를 2mm, 왼쪽 바퀴의 반지름 오차를 3mm, 양 바퀴간 거리 오차를 1mm 주었을 경우입니다.

 

1) 로봇의 이동체와 위치측정 센서에 노이즈가 전혀 없고 위치측정 센서를 100% 신뢰할 수 있는 경우입니다. 즉 로봇의 위치추정 칼만필터를 사용하지 않고 센서로부터 측정한 값을 로봇의 위치로 그대로 사용한 경우입니다. 좌우 바퀴의 반지름 오차는 금방 추정하지만 양 바퀴간 거리 오차 추정에는 시간이 걸리는 것을 볼 수 있습니다.

 

2) 로봇의 이동체와 위치측정 센서에 노이즈가 전혀 없지만 위치추정 칼만필터를 사용하여 로봇의 위치를 추정한 경우입니다. 어떻게 해석해야할지 잘 모르겠지만, 초기의 좌우 바퀴의 반지름 오차가 흔들립니다.

 

3) 로봇의 이동체와 위치측정 센서에 노이즈를 가한 경우입니다. 노이즈는 diff_drive_robot.cpp 파일의 robot_move() 함수와 sensing_position() 함수의 주석(/* */로 주석처리된 부분)을 풀어주면 됩니다.대략 값은 엇비슷하게 따라가는데 편차가 아주 심하네요. 이럴 때는 EkfOdometry::update() 함수의 R 값을 좀 더 키워주면 그래프가 좀 더 완만해 질것같습니다. (R 값이 0.01*I 인 경우)

 

4) 이전 그래프에 비해 R 값을 100배 키운 경우입니다. 그래프가 완만해 졌지만 오차의 추정 속도가 느립니다. (R 값이 1*I 인 경우)