Programming/ROS

Navigation stack 설명

오숭이 2022. 2. 22. 23:15

Navigation stack

그림은 ROS의 내비게이션 패키지 구동에 필요한 필수 노드와 토픽들의 관계도를 설명한 그림입니다. 이를 내비게이션에 필요한 정보(토픽)를 중심으로 설명하도록 하겠습니다.

 

 오도메트리 ( "odom", nav_msgs/Odometry )

로봇의 오도메트리 정보는 국부 이동 경로 계획(local path planning) 에서 사용하게 되는데 로봇의 현재 속도 등의 정보를 받아서 국부 이동 경로를 생성하거나 장애물 회피 등에 사용됩니다.

 

 상대 위치 변환 ( "/tf", tf/tfMessage )

로봇의 센서의 위치를 예를들어 base_scan 라고 할 때, 이 센서 위치는 로봇의 하드웨어적 구성에 따라 위치가 상대적으로 바뀌기 때문에 ROS에서는 tf 라는 상대 위치 변환을 이용합니다. 이는 단순히 오도메트리로 로봇의 위치를 알게되는데 "그 로봇의 위치로부터 x,y,z 좌표 상 센서가 얼마만큼 떨어져 있다." 라는 형태로 기술해 주는 것입니다. 예를들어,  odom → base_footprint → base_link → base_scan 의 변환을 거쳐서 토픽으로 발행되는데, 이는 move_base 노드에서 이 정보를 받아 로봇의 위치와 센서의 위치를 가지고 이동 경로 계획을 수행하게 됩니다. 

 

 거리 센서 ( sensor topics, sensor_msgs/LaserScan or sensor_msgs/PointCloud  )

센서로부터 측정된 거리 값을 의미합니다. 이 거리 센서는 로봇 위치 추정 방법인 AMCL(adaptive Monte Carlo localization) 을 이용하여 로봇의 현재 위치 추정, 로봇의 모션 계획에 사용됩니다. 우리는 이 센서 값을 "scan" 이라는 토픽 명으로 발행할 예정입니다.

 

 지도 ( "/map", nav_msgs/GetMap )

내비게이션 사용시, 점유 격자 지도(occupancy grid map) 를 사용하게 되는데,  "map.pgm" 과 "map.yaml" 을 map_server 패키지를 이용하여 발행할 것입니다.

 

 목표 좌표 ( "move_base_simple/goal", geometry_msgs/PoseStamped )

목표 좌표는 유저가 직접 명령하게 됩니다. 이는 태블릿과 같은 장비로 별도의 목표 좌표 명령 패키지를 작성하여 사용하거나, ROS 의 시각화 툴인 RViz 에서 목표 좌표를 지정할 수 있습니다.

 

 속도 명령 ( "cmd_vel", geometry_msgs/Twist )

최종적으로 계획된 이동 궤적에 따라 로봇을 움직이는 속도 명령을 발행하는 것으로 로봇은 목적지까지 이동하게 됩니다. 이 속도 명령은 "/mobile_base/commands/velocity" 라는 토픽명으로 발행됩니다.