Skip to content

Nav2를 통한 자율주행 적용하기

본 장에서는 ROS2Nav2 스택을 이용해 Moby-RP에 자율 주행을 적용하는 방법을 다룹니다.

준비

  • 자율주행을 수행하기 위해서는 환경에 대한 지도가 준비되어야 합니다. SLAM 챕터를 참고해 자율주행을 수행할 환경의 지도를 준비해주세요.
  • Nav2 스택을 실행하기 위해서는 Moby의 제어 노드 및 LiDAR 노드가 실행중이어야 합니다. Moby 제어 노드 챕터의 설명에 따라, Moby 제어 노드를 실행해주시기 바랍니다.

실행 방법

1. Nav2 스택 실행하기

  • SLAM 챕터의 예시를 따랐다면, /home/user/ 경로에 default_map.yaml파일을 생성했을 것입니다. 아래의 명령어를 통해 자율주행을 위한 Nav2 노드를 실행하고 해당 파일로부터 지도를 불러올 수 있습니다.

    ros2 launch moby_navigation navigation2.launch.py map:=/home/user/default_map.yaml
    

  • RViz 화면이 열리고 지도와 함께 Moby의 현재 위치가 표시되는 것을 확인할 수 있습니다.

2. 현재 위치 보정하기

처음 자율주행을 시작할 때는 Moby의 위치가 부정확할 수 있습니다. RViz의 2D Pose Estimate 기능을 이용해 현재 위치를 수동으로 지정해줄 수 있습니다.

  • RViz 창에서 2D Pose Estimate 버튼을 클릭합니다.

  • 지도 상에서 Moby의 현재 위치라고 생각되는 부분을 클릭하고, 누른 상태로 드래그해서 방향까지 지정합니다.


RViz 상에서 위치 초기화 및 주행 목표 명령 입력하기

  • Moby의 위치가 업데이트 되는 것을 볼 수 있습니다. LaserScan의 관측 포인트들이 지도와 잘 일치하도록 위치를 지정합니다.

  • 수동으로는 현재 위치를 정확하게 지정하는 데 한계가 있습니다. 이 떄 조이패드를 이용해 로봇을 이동하면, Localization 알고리즘이 업데이트 되며 점차 정확한 위치로 수렴하는 것을 확인할 수 있습니다.

    • 조이패드를 이용한 로봇 조작은 기본조작 챕터를 참고하시기 바랍니다.

3. 시작 위치 저장하기
Nav2 스택을 시작할때마다 직접 위치보정을 하지 않기 위해서는 시작 위치를 고정하고 저장해둘 수 있습니다.

  • 앞으로 Nav2 스택을 시작할 위치로 이동한 뒤, 새 터미널을 열어 아래 명령어로 현재 위치를 확인합니다.

    ros2 topic echo --once /amcl_pose
    

  • moby_navigation의 시작 위치를 포함한 파라미터는 아래의 경로에 저장됩니다.

~/ros2_ws/src/moby-ros2/moby_navigation/param/moby_rp.yaml
~/ros2_ws/install/moby_navigation/share/moby_navigation/param/moby_rp.yaml
  • 위에서 명령어로 얻어 둔 위치 값을 위의 두 파라미터 파일의 initial_pose 항목에 기입합니다.
  • orientation의 경우, 4자리의 쿼터니언 값이 표시되지만 파일에 입력할 파라미터는 yaw 각도 하나입니다. 쿼터니언에서 yaw 각도로의 변환은 온라인 변환기 등을 이용할 수 있습니다.


자율 주행 시작 위치 저장

  • 이제 Nav2 스택을 시작할 때 항상 저장된 위치에서 시작됩니다.

  • 위의 두 파일 경로 중 첫번째는 원본 파일의 경로이고, 두번째는 패키지를 빌드했을 때 설치되는 경로입니다. 실제로 사용되는 것은 두번째 파일이지만, 추후 ros2_ws 워크스페이스를 다시 빌드할 경우 두번째 경로의 파일이 다시 첫번째 파일로 덮어쓰기 됩니다. 따라서, 파라미터 변경시에는 첫번째 파일을 변경하고 워크스페이스를 다시 빌드해 적용하거나 직접 두 파일을 모두 변경하는 것이 좋습니다.

4. 자율 주행 수행하기

  • RViz 화면의 2D Nav Goal 버튼을 클릭합니다.

  • 2D Pose Estimate 에서와 같이, 이동하고자 하는 목적지를 지도 화면 상에서 클릭하고, 누른 상태로 드래그해 방향까지 지정합니다.

  • 이제 Moby가 지정된 목적지로 이동합니다.

  • 이동하는 동안에는 RViz 제어 패널의 Cancel 버튼이 활성화되어 자율 주행 이동을 취소할 수 있습니다.
  • RViz 제어 패널의 Feedback에 reached 메시지가 표시되면 이동이 완료된 것입니다.


자율 주행 중, 완료 시 주행 제어 패널 변화

  • Moby-RP에 대한 Nav2 스택 구성 관련 정보는 아래의 경로의 파라미터 파일에 정의되어 있습니다.
    해당 파일의 구성에 관한 자세한 정보는 Nav2 의 정보를 참고해주시기 바랍니다.
moby-ros2/moby_navigation/param/moby_rp.yaml
  • navigation2.launch.py 파일 실행 시 커맨드 라인에서는 상황에 따라 아래의 옵션들을 지정할 수 있습니다.

이름 형식 설명 기본값
map string 지도 파일 경로 ~/moby-ros2/install/moby_navigation/share/ moby_navigation/map/default_map.yaml
params_file string Nav2 파라미터 파일 ~/ros2_ws/install/moby_navigation/share/ moby_navigation/param/moby_rp.yaml
launch_rviz bool RViz 화면 실행 여부 true