由于课题任务的安排,并不需要搞多机器人建图的融合,笔者在此搞了半天的多地图融合,就是没有搞出来,不知道是命名空间的问题还是主题名哪里设置的不对,就用一个机器人创建了一张地图,然后在这张地图上实现导航等功能。以后如果有时间了,再回来研究地图融合。
1.建一个建图的父launch(gmap_main,launch)
catkin_create_pkg gmap_map
<launch>
<!--- Run gmappings-->
<include file="$(find multiple_gmapping)/launch/gmapping_robot1.launch"/>
<include file="$(find multiple_gmapping)/launch/gmapping_robot2.launch"/>
<include file="$(find multiple_gmapping)/launch/gmapping_robot3.launch"/>
<!--- Merge of maps -->
<include file="$(find multirobot_map_merge)/launch/map_merge.launch"/>
<!-- Rviz -->
<arg name="model" default="$(find wpr1_bringup)/urdf/wpr1.urdf"/>
<param name="robot_description" command="$(find xacro)/xacro $(arg model)" />
<arg name="rvizconfig" default="$(find wpr_simulation)/rviz/turtlebots_rrt_exploration.rviz" />
<node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig)" required="true" />
</launch>
1.1 为三个机器人皆添加建图部分的程序
<!--- Run gmappings-->
<include file="$(find multiple_gmapping)/launch/gmapping_robot1.launch"/>
<include file="$(find multiple_gmapping)/launch/gmapping_robot2.launch"/>
<include file="$(find multiple_gmapping)/launch/gmapping_robot3.launch"/>
1.2 构建多地图融合部分
<!--- Merge of maps -->
<include file="$(find multirobot_map_merge)/launch/map_merge.launch"/>
2.gmapping_robot1.launch
<launch>
<group ns="/robot_1">
<!-- <arg name="scan_topic" default="/robot1_tf/laser/scan" /> -->
<arg name="base_frame" default="/robot_1/base_footprint"/>
<arg name="odom_frame" default="/robot_1/odom"/>
<arg name="map_frame" default="/robot_1/map"/>
<node pkg="gmapping" type="slam_gmapping" name="slam_gmapping_robot1" output="screen" ns="/robot_1">
<param name="base_frame" value="$(arg base_frame)"/>
<param name="map_frame" value="$(arg map_frame)"/>
<param name="odom_frame" value="$(arg odom_frame)"/>
<param name="map_update_interval" value="5.0"/>
<param name="maxUrange" value="6.0"/>
<param name="maxRange" value="8.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="minimumScore" value="200"/>
<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="0.5"/>
<param name="angularUpdate" value="0.436"/>
<param name="temporalUpdate" value="-1.0"/>
<param name="resampleThreshold" value="0.5"/>
<param name="particles" value="80"/>
<param name="xmin" value="-1.0"/>
<param name="ymin" value="-1.0"/>
<param name="xmax" value="1.0"/>
<param name="ymax" value="1.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)"/> -->
<remap from="map" to="/robot_1/map" />
</node>
</group>
</launch>
3.map_merge.launch
地图融合模块的官方介绍:http://wiki.ros.org/multirobot_map_merge
<launch>
<group ns="map_merge">
<node pkg="qiming_map_merge" type="map_merge" respawn="false" name="map_merge" output="screen">
<param name="robot_map_topic" value="map"/>
<!-- <param name="robot_map_updates_topic" value="map_updates"/> -->
<param name="robot_namespace" value="robot_"/>
<param name="merged_map_topic" value="map"/>
<param name="world_frame" value="map"/>
<param name="known_init_poses" value="false"/>
<group ns="/robot_1/map_merge">
<param name="init_pose_x" value="8.950 "/>
<param name="init_pose_y" value="-15.4501"/>
<param name="init_pose_z" value="0.0"/>
<param name="init_pose_yaw" value="0.0"/>
</group>
<group ns="/robot_2/map_merge">
<param name="init_pose_x" value="25.8001"/>
<param name="init_pose_y" value="-5.5"/>
<param name="init_pose_z" value="0.0"/>
<param name="init_pose_yaw" value="0.0"/>
</group>
<group ns="/robot_3/map_merge">
<param name="init_pose_x" value="4.7"/>
<param name="init_pose_y" value="-26.9"/>
<param name="init_pose_z" value="0.0"/>
<param name="init_pose_yaw" value="0.0"/>
</group>
<param name="merging_rate" value="4.0"/>
<param name="discovery_rate" value="0.05"/>
<param name="estimation_rate" value="0.5"/>
<param name="publish_rate" value="1.0"/>
<param name="estimation_confidence" value="0.25"/>
</node>
</group>
</launch>
4.驱使某一个机器人运动
rosrun teleop_twist_keyboard teleop_twist_keyboard.py /cmd_vel:=/robot_1/cmd_vel
修改/cmd_vel主题即可
5.保存某一个机器人构建的地图
保存某个机器人创建的地图
rosrun map_server map_saver map:=/robot_1/map -f robot_1_map
参考:https://blog.csdn.net/sylin211/article/details/93779801
如上,修改保存地图的主题map即可。
5.27文件夹保存在了