turtlebot3仿真例子(二)----SLAM仿真实现

turtlebot3地图构建
1、启动turtlebot3的world:

 roslaunch turtlebot3_gazebo turtlebot3_world.launch

2、启动slam导航包并配置方法:
Karto算法:

 roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=karto

Gmapping算法:

roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping

其中slam_methods:=karto 命令为选择slam建图的算法,这里我只尝试了三种算法来实现,分别是gmapping,hector,karto,还有谷歌的cartographer算法,Frontier Exploration等等。
hector Mapping 功能包的安装指令为:

sudo apt-get install ros-kinetic-hector-mapping

Karto 功能包的安装指令为:

sudo apt-get install ros-kinetic-slam-karto

以及Cartographer安装指令:

sudo apt-get install ros-kinetic-cartographer ros-kinetic-cartographer-ros ros-kinetic-cartographer-ros-msgs ros-kinetic-cartographer-rviz

这个地方注意一下,由于谷歌开发的Cartographer是基于ROS melodic版本的,所以要在kinetic版本运行的话还需要进行以下指令进行安装:

$ sudo apt-get install ninja-build libceres-dev libprotobuf-dev protobuf-compiler libprotoc-dev
$ cd ~/catkin_ws/src
$ git clone https://github.com/googlecartographer/cartographer.git
$ git clone https://github.com/googlecartographer/cartographer_ros.git
$ cd ~/catkin_ws
$ src/cartographer/scripts/install_proto3.sh
$ rm -rf protobuf/
$ rosdep install --from-paths src --ignore-src -r -y --os=ubuntu:xenial
$ catkin_make_isolated --install --use-ninja
$ source ~/catkin_ws/install_isolated/setup.bash
$ roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=cartographer

由于gmapping功能包在turtlebot3功能包中,就不在介绍。
3、运行键盘控制节点

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

gmapping建图:
turtlebot3仿真例子(二)----SLAM仿真实现_第1张图片
Karto建图:
turtlebot3仿真例子(二)----SLAM仿真实现_第2张图片
hector建图:
turtlebot3仿真例子(二)----SLAM仿真实现_第3张图片
4、保存地图

rosrun map_server map_saver -f ~/map

会在根目录下生成map.pgm和map.yaml文件:
turtlebot3仿真例子(二)----SLAM仿真实现_第4张图片
map.yaml文件内容为:

  • image: testmap.png 地图图像的路径
  • resolution: 0.1 地图的分辨率 像素 或者/MI
  • origin: [0.0, 0.0, 0.0] 初始点位置 在地图上的坐标以及 航偏。航偏是指角度。
  • occupied_thresh: 0.65 当像素占据的概率大于 0.65时候认为是完全占据的。
  • free_thresh: 0.196 当像素占据概率小于0.196的时候,认为完全是空的
  • negate:是否反转黑白和占用(不影响阈值解释)
    slam建立的地图将会在导航中使用到,导航内容会之后再写。

另:这个部分做的实验都是通过调用功能包来实现slam建图的,我暂时并没有深入去学习slam,只是知道如何去用slam的成果,不过会继续深入学习的。
关于本次例子的几种slam算法,可以阅读大牛们的文章:

  • https://www.cnblogs.com/li-yao7758258/p/8213578.html
  • https://blog.csdn.net/Jeff_Lee_/article/details/77869987
  • https://blog.csdn.net/zyh821351004/article/details/47381135
  • https://blog.csdn.net/hzy925/article/details/78857241
  • https://blog.csdn.net/tiancailx/article/details/78590809
  • https://openslam-org.github.io/gmapping.html

有关gmapping的launch 文件中的参数配置见下一篇。

你可能感兴趣的:(ros,turtlebot3)