前面采用别的小车进行仿真实验,能实现SLAM建图,但是出现的问题也是需要解决的(目前暂时不知道如何解决,同样这里出现)本文更换成了turtlebot3进行仿真实验
1.下载编译(由于是放假前做到这一步,总所周知收假后忘干净了,我后续完成整个实验后将会重新在新的虚拟机中从0开始并做成专栏,方便学习)
#1.我用的环境是20.04所以采用的noetic版本,对应自己的版本下载
#2.文件夹可按自己的来,或者一样命名也是可以的
mkdir -p ~/test_ws/src/
cd ~/test_ws/src/
#下载网络问题的话可以1.科学上网2.采用安装包方式下载
git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
cd ~/test_ws
catkin_make
#该开源项目一共有两个机器人模型,分别为:burger 和 waffle
export TURTLEBOT3_MODEL=burger
source ~/test_ws/devel/setup.bash
roslaunch turtlebot3_gazebo turtlebot3_world.launch
#我当时出现了些报错,但是不记得了可以直接搜索有解决方法
打开终端运行gazebo仿真地图(由于没有将source加入,因此每次打开新的终端需要source一下环境)
cd ~/test_ws/
source devel/setup.bash
roslaunch turtlebot3_gazebo turtlebot3_world.launch
打开一个新的终端运行SLAM建图(功能包中写了好几种建图算法,按实际需要来进行选择)
1.采用Gmapping算法进行仿真:
cd ~/test_ws/
source devel/setup.bash
roslaunch turtlebot3_slam turtlebot3_slam.launch
用键盘控制小车进行移动并实时定位建图
cd ~/test_ws/
source devel/setup.bash
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
我在后续运行roslaunch turtlebot3_gazebo turtlebot3_world.launch这个仿真环境时我发现test_ws工作空间中并未有这个turtlebot3_gazebo功能包,我roscd turtlebot3_gazebo发现在默认下载的位置下:opt/ros/noetic/share,我将功能包复制到test_ws下载编译不成功报错:
目前交流的原因:由于之前那个下载的是包装好的,里面没有camke.lists不能移动后编译
暂时未解决camke的问题,目前不影响后续,有会的希望指导一下(后续肯定需要弄好的)
现在我重新下载部分功能,cd到turtlrbot3下添加了几个功能包
cd test_ws/src/turtlebot3
git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
重新catkin_make编译成功,重新测试运行没问题
2.cartographer算法进行仿真(前提已经安装好了cartographer)
安装在一个工作空间src下好处:不会出现找不到cartographer_ros的问题,
不安装在一个工作空间src下好处:工作空间整洁(O(∩_∩)O哈哈~)
没有安装在同一个工作空间下文中有简单解决方法,cartographe安装教程很多,小鱼ros也有一键安装,但是没试过)
首先将test_ws/src/turtlebot3/turtlebot3_slam/launch/turtlebot3_cartographer.launch文件中修改为
<!-- cartographer_node -->
<node pkg="cartographer_ros" type="cartographer_node" name="cartographer_node"
args="-configuration_directory $(find turtlebot3_slam)/config
-configuration_basename turtlebot3_lds_2d_gazebo.lua"
output="screen">
<remap from="/imu" to="/flat_imu"/>
<!--remap from="points2" to="/camera/depth/points" / -->
</node>
打开终端进入到自己的工作空间下source,运行仿真环境
cd test_ws
source devel/setup.bash
roslaunch turtlebot3_gazebo turtlebot3_world.launch
打开新终端,运行
cd test_ws
source devel/setup.bash
roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=cartographer
出现报错:找不到cartographer_ros
(在之前我已经安装好了cartographer,但是在不同的工作空间下)
解决方法:直接找到cartographer_ros功能包复制到当前工作空间test_ws/home/ply1/test_ws/src下
再cd回到test_ws进行catkin_make编译成功
重新运行成功(我在rviz中关了local map和global map,所有点不一样)
通过键盘控制完成整个地图的构建
保存地图,生成pgm和yaml格式文件
#保存地址根据自己的需要修改,建议统一保存在turtlebot3_navigation/maps方便管理
rosrun map_server map_saver -f /test_ws/src/turtlebot3/turtlebot3_navigation/maps
#先把这两个复制到home下,代码中find包还未修改,若不放到home下回报错找不到map,后续修改后将会补充
给地图权限,防止报错
chmod 777 ~/test_ws/src/turtlebot3/turtlebot3_navigation/maps/map.yaml
SLAM导航
#加载仿真环境
roslaunch turtlebot3_gazebo turtlebot3_world.launch
#加载导航节点
roslaunch turtlebot3_navigation turtlebot3_navigation.launch
目前小车的定位不准确发散,在rviz页面上方中采用2D Nav Estimate来对小车进行定位,然后通过键盘控制小车旋转来定位。
cd ~/test_ws/
source devel/setup.bash
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
随着绿色箭头的聚集,定位到小车准确位置。
在rviz页面上方中采用2D Nav Goal来选择小车移动的目标点并进行导航规划路线。
上述完成了整个demo的测试,现在开始在自己搭建的gazebo仿真环境中进行实验
参考:创建Gazebo仿真环境控制小车(搬运工和报错解决)-CSDN博客
当时用的别人实验的小车在tf中有问题再换成的现在的turtlebot小车
将创建好的仿真环境模型model.config文件和model.sdf文件放在同一个文件下(我这里是test文件夹)然后将test文件夹复制到test_ws/src/turtlebot3/turtlebot3_gazebo/models下
将地图保存,我命名为test.world,另存为/test_ws/src/turtlebot3/turtlebot3_gazebo/worlds文件夹
打开vscode,在/test_ws/src/turtlebot3/turtlebot3_gazebo/launch下创建test.launch文件
代码可复制其他launch文件再修改相应的部分即可,我的如下:
<launch>
<arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
<arg name="x_pos" default="0.0"/>
<arg name="y_pos" default="0.0"/>
<arg name="z_pos" default="0.0"/>
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="$(find turtlebot3_gazebo)/worlds/turtlebot3_world.world"/>
<arg name="paused" value="false"/>
<arg name="use_sim_time" value="true"/>
<arg name="gui" value="true"/>
<arg name="headless" value="false"/>
<arg name="debug" value="false"/>
</include>
<param name="robot_description" command="$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro" />
<node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf" args="-urdf -model turtlebot3_$(arg model) -x $(arg x_pos) -y $(arg y_pos) -z $(arg z_pos) -param robot_description" />
</launch>
同理打开自己的环境和采用合适的SLAM算法进行建图,结果如图,到此完整完成,可以开始建图
最后将建好的地图进行保存,用于后续的导航地图(保存到maps下面自己的路径和名字)
rosrun map_server map_saver -f ~/catkin_ws/src/mbot_navigation/maps/图片名
其他算法同理可自行下载编译运行(持续更新)