开始之前先安装两个功能包,命令如下:
sudo apt-get install ros-kinetic-map-server
sudo apt-get install ros-kinetic-slam-gmapping
注意输完敲回车的时候要输入密码,安装过程中会提示安装此功能包会消耗多少内存,问你是否同意,输入Y就行了(应该小写的也行)。
1)启动主节点 2)启动rviz 3)修改Fixed Frame:将其修改为map 4)添加地图Map并修改相应参数 5)添加RobotModel和LaserScan 将LaserScan的Topic设置为/scan,并将szie改为0.03。 6)在xqrobot_gmapping功能包中新建config目录用于存放.rviz文件 7)保存配置好的rviz模型 将配置好的rviz模型保存在xqrobot_gmapping下的config⽬录中
将以下代码粘贴到gmapping.launch文件中:
<launch> <arg name="scan_topic" default="scan" /> //laser的topic名称,与⾃⼰的激光的topic相对应 <arg name="set_base_frame" default="base_footprint"/> <arg name="set_odom_frame" default="odom"/> <arg name="set_map_frame" default="map"/> <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen" clear_params="true"> //启动gampping的节点 <param name="base_frame" value="$(arg set_base_frame)"/> //设置base_frame坐标为 base_footprint <param name="odom_frame" value="$(arg set_odom_frame)"/>/ //设置odom_frame坐标为odom <param name="map_frame" value="$(arg set_map_frame)"/> //设置map_frame坐标为map <param name="map_update_interval" value="2.0"/>//地图更新的⼀个间隔,两次scanmatch的间隔,地 图更新也受scanmach的影响,如果scanmatch没有成功的话,是不会更新地图的。 <!-- Set maxUrange < actual maximum range of the Laser --> <param name="maxUrange" value="12.0"/> <param name="sigma" value="0.05"/> <param name="kernelSize" value="1"/> <param name="lstep" value="0.05"/>//optimize机器⼈移动的初始值(距离) <param name="astep" value="0.05"/>//optimize机器⼈移动的初始值(⻆度) <param name="iterations" value="5"/>//icp的迭代次数 <param name="lsigma" value="0.075"/> <param name="ogain" value="3.0"/> <param name="lskip" value="0"/>//为0,表⽰所有的激光都处理,尽可能为零,如果计算压⼒过⼤,可 以改成1 <param name="minimumScore" value="50"/> <param name="srr" value="0.01"/>//以下四个参数是运动模型的噪声参数 <param name="srt" value="0.02"/> <param name="str" value="0.01"/> <param name="stt" value="0.02"/> <param name="linearUpdate" value="1.0"/>//机器⼈移动linearUpdate距离,进⾏scanmatch <param name="angularUpdate" value="0.2"/>//机器⼈选装angularUpdate⻆度,进⾏scanmatch <param name="temporalUpdate" value="0.5"/> <param name="resampleThreshold" value="0.5"/> <param name="particles" value="40"/>//粒⼦个数 <param name="xmin" value="-10.0"/> <param name="ymin" value="-10.0"/> <param name="xmax" value="10.0"/> <param name="ymax" value="10.0"/> <param name="delta" value="0.05"/> <param name="llsamplerange" value="0.01"/> <param name="llsamplestep" value="0.01"/> <param name="lasamplerange" value="0.005"/> <param name="lasamplestep" value="0.005"/> <remap from="scan" to="$(arg scan_topic)"/> </node> </launch>
保存并退出后,在终端中继续输⼊以下指令创建xqrobot_gmapping.launch 将以下代码粘贴到xqrobot_gmapping.launch文件中:
<launch> <!-- 加载机器⼈模型描述参数 xqrobot--> <include file="$(find xqrobot_description)/launch/display_xqrobot_gazebo.launch"/><!-- 打开gazebo仿真环境--> <include file="$(find xqrobot_gmapping)/launch/gmapping.launch"/><!--启动slam_gmapping节点--> <node pkg="rviz" type="rviz" name="rviz" required="true" args="-d $(find xqrobot_gmapping)/config/gmapping.rviz"/> </launch>
1)在学习通章节目录下找到“Gmapping地图”,点进去之后下载“world.tar.gz”压缩包,解压缩后将其复制到xqrobot_description文件夹下,如下图所示: 或者通过网盘链接下载此压缩包 → world.tar(提取码:6rpa) 2)修改display_xqrobot_gazebo.launch文件 将第12行改为以下三行,其余不变。 供复制:
<arg name="world_name" value="$(find xqrobot_description)/world/room.world"/> <include file="$(find gazebo_ros)/launch/empty_world.launch"> <arg name="world_name" value="$(arg world_name)" />
打开一个新的终端,运行键盘控制节点,控制机器人移动
lzw08@ubuntu:~$ cd ros_ws lzw08@ubuntu:~/ros_ws$ source devel/setup.bash lzw08@ubuntu:~/ros_ws$ roslaunch xqrobot_teleop xqrobot_teleop.launch
这里说明一下,按q/z可以增加/减少线速度和角速度,w/x可以增加/减少线速度,e/c可以增加/减少角速度。按“i”前进,按“,”后退,按“u”逆时针旋转(左转),按“o”顺时针旋转(右转)。
①gazebo物理仿真环境中截图 ② rviz可视化界面截图 ③ 使用QT可视化工具,查看topic之间的关系
lzw08@ubuntu:~$ rqt_graph
④ 保存建好的地图
rosrun map_server map_saver -f map
以上的命令只是保存地图的作用,并不会打开。它自动将生成的地图文件(.pgm和.yaml文件)保存在Home目录下,需要手动双击打开才有上图效果~
gazebo模型在我电脑上运行不太稳定,多运行几次就行了。关闭再运行,重复几次,还有那句:export SVGA_VGPU10=0,多运行几次,好像就可以稳定了。附:实践报告六(仅供参考,请勿他用!)