如何用事先录好的数据集跑gmapping

如何用事先录好的数据集跑gmapping

1. 首先下载gmapping包到 my_ws/src, 并catkin_make

2. 先跑一次rosbag:

rosbag play --clock your_bag.bag
用 rostopic list 看看它都发布了哪些我们能用的话题:
这里image_raw_throttle 是摄像头录的image,clock是时钟,laser是雷达数据,odom_throttle是里程计数据,这些以后会用到。

3. 写gmapping的启动launch

先把时间设定为数据集中的时间
<param name="use_sim_time" value="true"/>
由于我们录数据集的时候,没有对雷达和底盘进行坐标变换,所以我们需要在launch里写一个静态tf变换,也就是确定雷达和底盘中心点的相对位姿,
<node pkg="tf" type="static_transform_publisher" name="base_to_laser" args="0.0 0.0 0.18 0 0.0 0.0 base_footprint laser 100"/>
rosbag运行时,我们可以通过运行rqt查看tf树,这里的base_footprint是base发布的tf树,laser就是雷达了,数据的单位是m,这里我们的雷达是放在底盘中心18cm的高度。
gmapping包中有一个运行gmapping的launch,我们运行它:
<include file="$(find gmapping)/launch/slam_gmapping_pr2.launch"/>
最终写完的hokuyo_gmapping_demo.launch:

4. 修改slam_gmapping_pr2.launch

gmapping里的launch文件需要把里面的参数和我们数据集中的话题对应上,加上下面三句话就可以了:
<remap from="scan" to="laser"/>
<param name="odom_frame" value="odom" />
<param name="base_frame" value="base_footprint" />
修改后的slam_gmapping_pr2.launch:
<launch>
<param name="use_sim_time" value="true"/>

<node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">

<remap from="scan" to="laser"/>
<param name="odom_frame" value="odom" />
<param name="base_frame" value="base_footprint" />

<param name="map_update_interval" value="5.0"/>
<param name="maxUrange" value="16.0"/>
<param name="sigma" value="0.05"/>
<param name="kernelSize" value="1"/>
<param name="lstep" value="0.05"/>
<param name="astep" value="0.05"/>
<param name="iterations" value="5"/>
<param name="lsigma" value="0.075"/>
<param name="ogain" value="3.0"/>
<param name="lskip" value="0"/>
<param name="srr" value="0.1"/>
<param name="srt" value="0.2"/>
<param name="str" value="0.1"/>
<param name="stt" value="0.2"/>
<param name="linearUpdate" value="1.0"/>
<param name="angularUpdate" value="0.5"/>
<param name="temporalUpdate" value="3.0"/>
<param name="resampleThreshold" value="0.5"/>
<param name="particles" value="30"/>
<param name="xmin" value="-50.0"/>
<param name="ymin" value="-50.0"/>
<param name="xmax" value="50.0"/>
<param name="ymax" value="50.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"/>
</node>
</launch>

5. 运行并查看

rosbag play --clock ~/hellow/database/G6-2017-09-04-16-53-01.bag # 播放数据集
roslaunch turtlebot_navigation hokuyo_gmapping_demo.launch # 运行gmapping
rosrun rviz rviz # rviz查看地图
rqt # 查看话题和tf树
rosrun map_server map_saver -f /home/nlsde/hellow/turtlebot_maps/g6_2 # 保存地图


6. 注意

  • rosbag play 一定要加上 --clock,因为我们使用的是包内的时钟,如果不加的话,tf树会不完整;
  • 可以通过 rqt_bag play ~/hellow/database/G6-2017-09-04-16-53-01.bag --clock 进行可视化的play,可以自己设定播放起止时间,还能输出位姿曲线等;
  • rviz里需要的话题:

参考:


猜你喜欢

转载自blog.csdn.net/qintianhaohao/article/details/80704083