navigation2.launch.py와 AMCL

저장한 지도를 다시 띄우면, 로봇은 그 지도 어디쯤 있을까?

먼저 끄기

③ SLAM과 ④ rviz2를 끕니다

③과 ④ 터미널에서 Ctrl+C를 누릅니다. ① Gazebo와 ② teleop은 그대로 둡니다. SLAM은 할 일을 마쳤고, rviz2는 다음 런치가 알맞은 설정으로 새로 띄웁니다.

왜 SLAM을 꼭 꺼야 하는지는 이 편 끝에서 봅니다.

따라 하기

지도 파일을 주고 Nav2를 띄웁니다

③ 자리에서 ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True map:=$HOME/map.yaml을 실행합니다. rviz2 창이 뜨고 4편에서 저장한 지도가 보입니다.

Nav2는 초기 위치를 60초(시뮬레이션 시간)까지만 기다립니다. 실행한 뒤 1분 안에 6편대로 초기 위치를 찍습니다. 6편을 먼저 읽고 와서 실행해도 됩니다.

한 런치 안에

런치 하나가 넷을 띄웁니다

navigation2.launch.py는 Nav2의 bringup_launch.py를 포함하고(10강 7편) rviz2를 더합니다. 그래서 지도를 내는 map_server, 위치를 찾는 AMCL, 길을 찾고 바퀴를 모는 Nav2 서버들, 화면 rviz2가 한꺼번에 뜹니다.

Nav2 서버들은 7편에서 뜯어봅니다.

경로 주의

지도 경로는 $HOME으로 적습니다

셸은 낱말 맨 앞의 ~만 홈 폴더로 펼칩니다. map:=~/map.yaml에서는 ~가 글자 그대로 넘어갑니다. map:=을 아예 빠뜨리면 오류 없이 패키지에 든 기본 지도가 쓰여, 내 지도와 다른 지도 위에서 위치를 찾게 됩니다.

Jazzy의 map_server는 ~/를 스스로 풀어 주어 둘째 줄도 동작합니다. 다른 도구는 아닐 수 있어 $HOME으로 통일합니다.

AMCL

AMCL은 후보 위치를 잔뜩 뿌려 봅니다

AMCL(Adaptive Monte Carlo Localization)은 로봇이 있을 법한 자리에 후보 위치(파티클, particle)를 잔뜩 뿌립니다. 후보마다 "여기 있다면 라이다에 무엇이 보일까"를 지도로 따져, 실제 스캔과 잘 맞는 후보만 남깁니다.

rviz2에 보이는 초록 화살표 무리가 이 후보들(/particle_cloud)입니다.

TF 다시 보기

AMCL이 map→odom을 냅니다

AMCL은 찾은 위치로 map→odom을 냅니다(1편). SLAM도 같은 변환을 내므로 둘을 함께 켜면 두 값이 번갈아 들어와 로봇이 지도 위에서 튑니다. 그래서 ③ SLAM을 끈 뒤에 띄웁니다.

다음 편

AMCL은 아직 로봇이 어디서 출발했는지 모릅니다

6편로봇은 어디서 출발했을까? 15강 목록