slam_toolbox로 돌며 그리기
키보드로 한 바퀴 돌기만 하면, 지도가 생길까?
설치
SLAM과 Nav2를 먼저 설치합니다
sudo apt install ros-jazzy-slam-toolbox ros-jazzy-navigation2 ros-jazzy-nav2-bringup을 실행합니다. ROBOTIS 매뉴얼의 SLAM 예제는 Cartographer를 쓰기 때문에, 이 강의에서 쓰는 slam_toolbox는 따로 설치해야 합니다.
14강 2편의 rosdep이 Nav2 일부를 미리 깔았을 수 있습니다. "is already the newest version"(이미 설치됨)이 떠도 정상입니다.
터미널 넷
터미널 네 개를 차례로 엽니다
지도를 그리는 동안 터미널 네 개를 띄워 둡니다. ① Gazebo, ② 키보드 조종(teleop), ③ slam_toolbox, ④ rviz2 순서로 켭니다. 이 번호는 15강 끝까지 그대로 씁니다.
새 터미널마다 ~/.bashrc의 두 줄(14강 2편)이 적용되어야 합니다. echo $TURTLEBOT3_MODEL이 burger를 출력하면 됩니다.
따라 하기 ①②
Gazebo와 teleop부터 켭니다
①에서 ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py로 기둥 아홉 개가 선 세계를 띄웁니다. ②에서 ros2 run turtlebot3_teleop teleop_keyboard를 켭니다(14강 3~4편).
줄 끝의 \ 는 다음 줄로 이어 쓴다는 뜻입니다. 한 줄로 붙여 쳐도 됩니다.
따라 하기 ③
③에서 slam_toolbox를 켭니다
ros2 launch slam_toolbox online_async_launch.py use_sim_time:=True를 실행합니다. slam_toolbox는 /scan을 받아 지도 /map을 내고, TF로 map→odom을 냅니다(1~2편).
online async는 움직이는 동안 바로 그리되, 밀린 스캔은 건너뛰고 최신 스캔을 따라가는 방식입니다. use_sim_time은 Gazebo의 시계를 쓰게 합니다(14강 7편).
따라 하기 ④
④ rviz2는 map 기준으로 봅니다
ros2 run rviz2 rviz2 --ros-args -p use_sim_time:=True로 띄웁니다. Fixed Frame을 map으로 바꾸고, Add 단추로 Map(/map)과 LaserScan(/scan)을 더합니다.
지도가 안 보이면 Map의 Durability Policy가 Transient Local인지 봅니다. 11강 4편에서 본 그것입니다.
돌며 그리기
천천히 돌면 지도가 자랍니다
② 창을 눌러 둔 채 w·x로 앞뒤 속도를, a·d로 회전 속도를 바꾸고 s나 스페이스로 멈춥니다. rviz2에서 모름 칸이 사라지고 벽이 끊김 없이 이어질 때까지 천천히 돕니다.
너무 빨리 돌면 벽이 두 겹으로 번질 수 있습니다. 출발점으로 돌아오면 루프 클로저(2편)가 일어납니다.
켜고 끄기
단계마다 켜 둘 터미널이 다릅니다
지도를 저장할 때까지는 넷 다 켜 둡니다. 위치를 찾을 때는 ③ SLAM과 ④ rviz2를 끄고 ③ 자리에서 Nav2를 띄웁니다. 초기 위치를 찍은 뒤에는 ② teleop도 끕니다.
4편의 저장 명령은 새 터미널 하나를 더 열어 칩니다. 끄는 까닭은 5~6편에서 봅니다.
다음 편