ROS2 Navigation2 ~ slam-toolbox로 SLAM ~

7992 단어 SLAMnav2ROS2ROS

소개



ROS2 표준 SLAM 패키지 인 slam-toolbox를 사용하여 Gazebo에서 SLAM을 수행하는 절차를 요약했습니다.
동작 확인에는 Turtlebot3 시뮬레이션 패키지를 사용합니다.

slam_toolbox 정보



ROS2 Dasing까지는 ROS2 표준 SLAM 패키지가 cartographer였지만, Eloquent 이후 slam_toolbox라는 새로운 SLAM 패키지로 변경되었습니다.

slam_toolbox에는 다음과 같은 특징이 있습니다.

· Karto 알고리즘이 기반
· ceres-solver에 의한 ICP 스캔 매칭과 Graph-Based-SLAM
・오도메트리 필수
· 수동으로지도를 조정할 수있는 GUI 도구가 있습니다.
· SLAM 데이터를 저장하고 Localization 모드에서 사용할 수 있습니다.

다음과 같은 rviz2 플러그인을 사용하여 수동으로 루프 갇을 수 있는 점 등이 주된 특징입니다.



자세한 내용은 아래 roscon2019 문서를 참조하십시오.

실행 환경



이 기사는 다음 환경에서 실행됩니다.


품목



CPU
Ryzen5

OS
Ubuntu20.04.02LTS

ROS2
Foxy Fitzroy


Install



slam_toolbox 설치



다음을 실행
$ sudo apt install ros-foxy-slam-toolbox

다음 소스에서 빌드하는 경우 (권장)
$ cd ~/ros2_ws/src
$ git clone https://github.com/SteveMacenski/slam_toolbox.git
$ cd slam_toolbox/
$ git checkout foxy-devel
$ cd ~/ros2_ws
$ colcon build

Navigation2 및 Turtlebot3 시뮬레이션 패키지 설치



Navigation2와 Turtlebot3의 Gazebo 시뮬레이션 환경은 다음 기사에 따라 설치됩니다.

ROS2 Foxy 환경에 TurtleBot3 Gazebo 시뮬레이션을 설치하고 Navigation2를 실행할 때까지

지도 만들기



Turtlebot3 Simulation 패키지 실행
우선 환경은 Turtlebot3 world를 사용
$ ros2 launch  turtlebot3_gazebo turtlebot3_world.launch.py 

Teleop 용/cmd_vel을 게시하는 노드 시작
이곳은 Gazebo의 Turtlebot3을 조작할 수 있다면 teleop_twist_joy라도 괜찮습니다.
ros2 run teleop_twist_keyboard teleop_twist_keyboard 

slam_tool_box 노드 시작async_slam_toolbox_nodesync_slam_toolbox_node 의 2 종류가 있지만 async 쪽을 사용 (차이는 조사중)
online에서 실행할 때는 async를 사용하면 좋다.
ros2 launch slam_toolbox online_async_launch.py 

작성 중인/map 주제를 보려면 rviz2 시작
rviz2

왼쪽 하단의 Add에서 Map를 선택하고 OK

Topic 에서 주제 이름 /map 입력
아래와 같이 현재/map이 표시된다



/cmd_vel을 보내 Turtlebot3을 움직이면 rviz2 화면의 맵이 업데이트됩니다.
(/map 주제 업데이트가 늦어지는 것은 조사 중)

지도 저장





어느 정도 전체 map이 완성되면 Navigation2의 nav2_map_server 패키지의 map_saver를 사용해 작성한 맵을 보존합니다.

아래에 맵 저장
$ ros2 run nav2_map_server map_saver_cli -f ~/map
[INFO] [1618829845.625503871] [map_saver]: 
    map_saver lifecycle node launched. 
    Waiting on external lifecycle transitions to activate
    See https://design.ros2.org/articles/node_lifecycle.html for more information.
[INFO] [1618829845.625745924] [map_saver]: Creating
[INFO] [1618829845.626007161] [map_saver]: Saving map from 'map' topic to '/home/porizou/map' file
[WARN] [1618829845.626031354] [map_saver]: Free threshold unspecified. Setting it to default value: 0.250000
[WARN] [1618829845.626052861] [map_saver]: Occupied threshold unspecified. Setting it to default value: 0.650000
[WARN] [map_io]: Image format unspecified. Setting it to: pgm
[INFO] [map_io]: Received a 112 X 103 map @ 0.05 m/pix
[INFO] [map_io]: Writing map occupancy data to /home/porizou/map.pgm
[INFO] [map_io]: Writing map metadata to /home/porizou/map.yaml
[INFO] [map_io]: Map saved
[INFO] [1618829847.259541041] [map_saver]: Map saved successfully
[INFO] [1618829847.259661983] [map_saver]: Destroying

/home 디렉토리 아래에 map.pgm과 map.yaml이 생성된다.

map.pgm



map.yaml
image: map.pgm
mode: trinary
resolution: 0.05
origin: [-2.96, -2.56, 0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.25

yaml 파일의 내용은 ROS1과 동일하다.
위에서 image:이미지 파일,mode:모드,resolution:해상도,origin:원점 좌표,negate:흑백 반전시킬지 여부,occupied_thresh:이것보다 큰 장소가 장애물,free_thresh:이것보다 작은 장소가 자유 공간.

만든 지도를 사용하여 탐색하기



다음은 만든 지도를 사용하여 Navigation2에서 Navigation을 합니다.

~/turtlebot3_ws/src/turtlebot3/turtlebot3/turtlebot3_navigation2/map 디렉토리 아래에 방금 만든 map.pgm 및 map.yaml 복사

Turtlebot3 시뮬레이션 시작
$ ros2 launch  turtlebot3_gazebo turtlebot3_world.launch.py 

Navigation2 시작
$ ros2 launch  turtlebot3_navigation2 navigation2.launch.py

rviz2 창에서 2D Pose Estimate 를 클릭하고 map의 현재 위치를 클릭하여 로봇의 초기 위치를 설정합니다.
Navigation2 Goal 클릭
이동하려는 위치와 자세를 rviz2 화면을 클릭하여 목표를 지정
Gazebo의 Turtlebot3이 움직이고 목표에 도착하면 성공



결론



다음은 slam_toolbox를 localization 모드로 이동하고 Navigation2의 map_server와 amcl 대신 사용하여 Navigation을 수행합니다.

참고



최신 ROS 구현으로 LidarSLAM 오픈 소스 소프트웨어 요약
htps : // 코 m / r 사사키 0109 / ms / 493c1059 ~ 3178166bc

좋은 웹페이지 즐겨찾기