gazebo sim
1. Odometry을 이용하여 로봇의 자세를 추정하는 원리를 자세히 조사
출발 지점으로부터 얼마나 떨어져 있나를 파악하는 상대적인 위치를 추정
센서로부터 측정하는 값을 기준으로 하기 때문에 센서의 위치가 중요하다.
모터에 달린 엔코더를 통해 거리를 측정하고, 엔코더 값과 거리를 통해 위치를 추정한다.
위치 추정
출발점에서 얼마나 떨어져 있는지를 파악하기 때문에 2차원 값인 x,y을 측정하려면
직선거리 r
회전 Yaw값 θ를 측정하여 (rcosθ, rsinθ)의 회전 좌표계로 표현한다.
직선거리 r
직선거리 r은 휠 Encoder 센서를 활용하여 차량의 회전 수를 측정하여 거리로 환산한다.
encoder 디스크 판에 구멍에 적외선 혹은 LED와 같은 빛 센서를 투과하여 조도센서가 빛을 몇 time 마다 받는 지를 측정하여 디지털 값으로 변환
회전 Yaw 값 θ
회전 Yaw 값 θ은 IMU 센서를 통해서 회전 각도를 측정하여 구할 수 있다.
2. AMCL을 이용하여 로봇의 자세를 추정하는 원리를 자세히 조사
AMCL
AMCL은 로봇의 예상 위치를 수많은 점(파티클)들로 표현한다.
각 파티클은 로봇이 여기에 있을지도 모른다는 가설이다.
Initialization : 초기화
로봇의 초기 위치를 모를 경우, 지도 전체에 파티클을 고르게 뿌린다.
초기 위치를 대략 알 경우, 특정 지점 주변에 파티클을 모아서 생성한다.
Prediction - Motion Model : 예측 단계
로봇이 움직이면 오도메트리(Odometry) 정보를 바탕으로 모든 파티클을 이동시킨다.
이때 센서의 오차를 고려하여 약간의 무작위 노이즈를 추가하고 파티클이 조금씩 퍼지게 된다.
Update - Sensor Model : 업데이트 단계
실제 로봇의 LiDAR가 측정한 데이터와, 각 파티클 위치에서 측정될 것으로 예상되는 가상의 데이터를 비교한다.
실제 센서 값과 일치하는 파티클에는 높은 가중치(Weight)를 부여하고, 일치하지 않는 파티클은 낮은 가중치를 부여한다.
Resampling
가중치가 높은 파티클들은 복제하여 살아남고, 가중치가 낮은 파티클들은 제거한다.
이 과정을 반복하면 파티클들이 로봇의 실제 위치 근처로 점점 모여들게 된다.
3. AMCL 노드가 구독하는 토픽을 자세히 조사하시오.
/bond: bond/msg/Status
AMCL 노드가 죽었는지 살았는지 확인
/clock: rosgraph_msgs/msg/Clock
시스템 시간 정보
/initialpose: geometry_msgs/msg/PoseWithCovarianceStamped
용자가 RViz2 등에서 설정한 초기 위치 값
/map: nav_msgs/msg/OccupancyGrid
map_server가 발행하는 2D 격자 지도
/parameter_events: rcl_interfaces/msg/ParameterEvent
노드의 파라미터가 변경될 때 발생하는 이벤트 알림
/scan: sensor_msgs/msg/LaserScan
LiDAR 센서가 실시간으로 측정한 장애물 거리 데이터
/tf: tf2_msgs/msg/TFMessage
/tf_static: tf2_msgs/msg/TFMessage
로봇 구성 요소 간의 변환 행렬(좌표계) 정보
4. AMCL 노드가 발행하는 토픽을 자세히 조사하시오.
/amcl/transition_event: lifecycle_msgs/msg/TransitionEvent
AMCL 노드의 상태 변화를 알림
/amcl_pose: geometry_msgs/msg/PoseWithCovarianceStamped
AMCL이 최종적으로 판단한 **로봇의 현재 위치(x, y)와 방향
/bond: bond/msg/Status
AMCL 노드가 죽었는지 살았는지 확인
/parameter_events: rcl_interfaces/msg/ParameterEvent
노드 내부의 설정값(Parameter)이 변경되었을 때 이를 외부에 알림
/particle_cloud: nav2_msgs/msg/ParticleCloud
현재 위치 추정에 사용 중인 수많은 파티클의 집합
/rosout: rcl_interfaces/msg/Log
노드에서 발생하는 로그 메시지(Info, Warn, Error)를 내보낸다.
/tf: tf2_msgs/msg/TFMessage
좌표계 간의 변환 정보를 발행
5. AMCL 노드 실행시 나타나는 파티클(/particle_cloud)의 의미를 조사 하시오.
AMCL 노드에서 발행하는 /particle_cloud 토픽은 로봇이 자신의 위치를 추정하기 위해 생성한
수많은 가설의 집합을 시각화한 것
6. 로봇을 지도상에서 벽을 따라 전체 영역을 1바퀴 회전하여 시작점으 로 돌아오도록 조정할 것
7. Odometry와 AMCL을 이용하여 추정한 로봇의 자세를 Rivz2를 2개 열어서 각각 출력하고 성능을 비교할 것
Odometry
/odom
AMCL
/amcl_pose
8. Rviz2에서 2개의 궤적을 하나의 화면에 동시에 그리기
빨간색 = /odom
파란색 = /amcl_pos
미세한 오차로 겹쳐져 있는것을 확인
9. 로봇 키트를 이용하여 localization 실험을 수행
https://cafe.daum.net/SmartRobot/RoVa/2464