패스트캠퍼스 환급챌린지 31일차 : 자율주행 로봇을 위한 ROS2 & Nav2 한번에 끝내기 강의 후기
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
오늘은 모바일 로봇에서 사용되며
SLAM의 초석이 되는 Odometry와 2D LiDAR에 대해서 학습했다.
[오늘의 수강 영상]
[오늘의 이론]
Odometry란?
로봇공학이나 자율주행 시스템에서
자신의 위치와 자세(pose)를 추정하는 기술이다.
이를 사용하면 로봇이나 차량이 자신의 시작 위치로부터
현재 위치까지 얼마나 이동했는지 추적하는 데 사용 가능하다.
이는 주로 로봇의 위치 추정하거나 탐색하는 시스템에 사용되고
SLAM과 같은 탐색 알고리즘에서 초석 역할을 한다.
하지만, odometry는 센서의 누적 오차와 환경적 요인 떄문에
error가 증가할 수 있어서 정확도를 높이기 위해
SLAM과 같은 기술과 함께 사용되며
추가적인 센서 정보로 보정하여 사용한다.
예시로는 Wheel Odometry, LiDAR Odometry, Visual Odometry,
Wheel Inertial Odometry, LiDAR Inertial Odometry,
Visual Inertial Odometry, GNSS Odometry가 있다.
현재 나와있는 모바일 로봇에서는
엔코더, IMU와 같은 센서를 융합하여
시간에 따른 로봇의 위치 및 방향(포즈)인 odometry를 추정한다.
이 추정결과를 SLAM과 Navigation에서 모두 중요하게 사용된다.
우리가 모바일 로봇으로 자주 사용하는
차동 구동 로봇(Differential Drive Robot)에서
odometry가 어떻게 계산되는지 알아보자.
차동 구동 로봇은 두 바퀴가 독립적으로 구동되고
세 가지 유형으로 움직인다.
1) 두 바퀴의 움직임이 같은 속도로 움직일 경우
→ 선형적으로 전후진 주행
2) 바퀴 중 하나가 움직이고 다른 하나는 정지 상태일 경우
→ 시계 방향 또는 시계 반대 방향 회전
3) 두 바퀴가 서로 다른 속도로 움직일 경우
→ 곡선 주행
이런 동작들을 추정하려면 모터로부터
피드백을 받을 수 있는 방법이 필요하고,
이때 엔코더를 사용한다.
엔코더의 구조는 아래와 같고
encoder 안에 있는 LED로 빛을 쏘면
이 빛은 회전하는 code disk의 슬릿을 통과하게 된다.
슬릿을 통과한 빛은 photo sensor에서 감지되고,
슬릿 수에 따라 펄스(신호)가 발생한다.
이 펄스를 카운트함으로써 회전 속도(RPM)를 계산할 수 있다.
encoder로 구한 값을 사용하여 odometry를 계산할 수 있는데
그 식이 아래와 같다.
위의 그림에 있는 R을 encoder를 통해 바퀴가 이동한 거리를 취득하고
사전에 바퀴의 지름과 바퀴와 바퀴 사이의 거리를 알고 있다면
옆에 있는 식을 통해 odometry를 구할 수 있다.
그럼 odometry가 자율주행에서 왜 중요할까?
1. Mapping을 할 때 얼마나 이동했는지 알아야
다음 경로를 추정해서 map을 그릴 수 있다.
2. Localization을 할 때도 얼마나 이동했는지 알아야
자신의 위치를 정확하게 추정할 수 있다.
3. Navigation을 할 때도 출발 지점부터 도착 지점까지
어떻게 이동했는지 확인해서 이동경로를 계속 생성한다.
4. Navigation을 진행할 때 Feedback control을 통해
로봇을 정밀하게 제어하는데 이때 필요한 것이 위치,속도,방향 정보이며
이 정보를 odometry가 준다.
이와 같이 모든 부분에서 odometry의 정보가 필요하므로
이 정보가 매우 중요하다.
근데 우리는 왜 모바일 로봇에서 wheel odometry만을
사용하지 않고 2D LiDAR도 함께 사용할까?
이 이유는 wheel odometry에 명백한 단점이 있기 때문이다.
1. 로봇의 바퀴가 회전은 있으나 지면과의 미끄러짐 같은
문제로 휠 슬립(wheel slip)이 발생한다.
2. 주행을 하는 동안 휠 슬립같은 문제로 오차가 누적된다.
3. 바퀴의 변형이 생기면 정확도가 떨어진다.
그럼 이런 단점들이 있으면 2D LiDAR만 사용하면 되는데
왜 wheel odometry도 쓸까?
이유는 2D LiDAR만 쓰기에도 2D LiDAR만의 단점이 있기 때문이다.
1. 특징이 부족한 환경에서의 위치추정이 부정확하다.
2. 시간이 지남에 따라 실제 위치와 추정 위치 사이의
오차가 점차 누적되는 drift문제가 발생하다.
3. 사람이 많이 움직이는 동적 환경에서 정확도가 떨어진다.
그렇기 때문에 서로의 단점들을 이 두 센서들이 보완을
서로 해주기 때문에 두 센서를 함께 사용된다.
이제 2D LiDAR을 사용할 때 기반되는 기술인
ICP(Iterative Closet Point)을 보자.
ICP(Iterative Closet Point)란?
두 가지 point cloud을 가장 잘 일치시키기 위해
반복적으로 가장 가까운 점들을 대응 시키고 회전 및 이동을 계산하여
로봇이나 센서의 위취를 정밀하게 추정하는 알고리즘이다.
ICP를 수행할 때
source point cloud와 target point cloud를 사용한다.
아래 그림에서 빨간색이 source point cloud이며
파란색이 target point cloud이다.
ICP의 구동 순서는 아래와 같다.
1. Association
source cloud의 각 포인트에 대해
target cloud의 모든 포인트 중
유클리디안 거리를 계산하여 가장 가까운 점을 찾는다.
2. Transformation
매칭된 포인트 쌍들 간의 제곱 오차 합을 최소화하도록
최소제곱법 기반의 방법 (예: SVD)을 사용하여
rotation과 translation을 추정한다.
3. Error Evaluation
추정된 변환을 source cloud에 적용한 후,
target cloud의 매칭 포인트들과의 거리 제곱의 합을 계산하여
두 포인트 클라우드 간의 일치도를 평가하며 오차를 최소화한다.
ICP를 진행할 때 입출력은 아래와 같다.
입력 : source point cloud, target point cloud, 초기 추정치(선택적)
출력 : 최적의 변환행렬(Transformation matrix), 정합오차(Registration error)
오늘은 이렇게 Odometry와 2D LiDAR를 배웠다.
이를 통해 Odometry를 사용하는 이유와
센서 퓨전을 해야하는 이유에 대해서
알 수 있었다.
또한, ICP도 배우면서 새로운 걸 알 수 있는
기회가 되었다.
ICP는 SLAM하면서 정말 많이 들었던 개념인데
이번 기회를 통해 제대로 배울 수 있어서 좋았다.
#패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완
커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스
성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.
fastcampus.co.kr