쓰레기 개발자

Turtlebot4 navigation (nav2) 본문

인턴

Turtlebot4 navigation (nav2)

공덕동 불닭주먹 2025. 2. 5. 11:45
SLAM으로 생성된 map을 이용하여 navigation을 할 것이다.
로봇이 자신의 위치를 인지하는것을 localization 이라고 한다. 우선 SLAM과 Localization의 차이를 본다면,
  • SLAM : 로봇이 움직이면서 자신의 위치를 인지함과 동시에 map 생성도 한다. SLAM이 Simultaneous Localization and Mapping의 약자라는걸 생각해보면 된다.
  • Localization : 위치를 인지하려면 이미 map이 생성 돼있어야한다. 따라서 아무리 많이 돌려도 map이 업데이트 되지 않는다.
Navigation을 하기 위해 ROS2 내부에 있는 패키지인 nav2를 사용할 것이다. nav2의 주요 기능으로는 다음과 같다.
  1. SLAM : 위 설명과 동일.
  2. Localization : 위 설명과 동일.
  3. Global Planning : start point부터 goal point까지 맵에 있는 장애물을 고려한 최적 경로 생성
  4. Local Planning : Global path를 따라가되, 동적인 장애물이 인식될 경우 실시간으로 감지하고 경로 수정
  5. Obstacle Avoidance : 로봇이 장애물과 충돌하지 않도록 회피하는 알고리즘 적용
  6. Recovery Behaviors : 길이 막혔을 때 회전하거나 후진 등을 하는 대체 행동 수행

nav2 적용

turtlebot4는 서술했듯이 raspberry pi 4를 사용한다. 따라서 Gazebo에서 실행을 하기엔 무리가 있다. 따라서 다음 명령어로 nav2 패키지를 실행한다.
ros2 launch turtlebot4_navigation nav_bringup.launch.py slam:=off localization:=true map:=<맵이름>.yaml
SLAM으로 생성된 map의 이름을 위 코드의 맵 이름에 넣는다. 예를 들어 내가 생성한 맵 이름은 0205 였으므로 0205.yaml로 넣어줬다.
nav2의 모든 노드가 실행되면 로컬 도커에서
ros2 launch turtlebot4_viz view_robot.launch.py
로 rviz 시각화를 해준다. 로컬 도커에서 하는 이유는 전에 썼던 글 참고.
 
rviz가 실행되고 터틀봇의 초기 위치와 heading 방향을 상단의 2D Pose Estimate로 설정하면 다음과 같이 현재 위치를 잡아준다.
 
그 후에 상단에 Nav2 Goal을 설정해주면 goal point가 설정되고, 목표 지점을 향해 path planning이 자동으로 된다. 다음 동영상과 같이 동적 장애물을 굉장히 가까운 거리에서 주었는데도 local path planning을 나름 잘하는 모습을 보여준다.

 

 

반응형