ROS实战之多个turtlebot2建图
首先在远程主机和turtlebot的上位机配置好turtlebot2的各启动文件。具体可以参考创客智造。
1.远程控制多turtlebot
(1)在各个turtlebot主机上配置网络:
sudo gedit ~/.bashrc
将
export ROS_HOSTNAME={turtlebot的ip}
export ROS_MASTER_URI=http://{主机的ip}:11311
写入bashrc文件的最后。
(2)在远程控制的PC端配置网络:
sudo gedit ~/.bashrc
将
export ROS_HOSTNAME={主机的ip}
export ROS_MASTER_URI=http://{主机的ip}:11311
写入bashrc文件的最后。
(2)主机控制多turtlebot
首先主机端启动roscre。
然后分别ssh连接到各turtlebot上
ssh cuiyunxuan@{启动的机器人的ip}
然后在各个机器人终端启动底盘,同时加上命名:
例如其中一台turtlebot的终端输入:
ROS_NAMESPACE=tb2_0 roslaunch turtlebot_bringup minimal.launch --screen
加上ROS_NAMESPACE=tb2_0,将使得小车对应的各话题前带上/tb2_0的命名空间,方便后续多地图融合及多机器人导航的配置。
同样,另一台turtlebot的终端输入:
ROS_NAMESPACE=tb2_1 roslaunch turtlebot_bringup minimal.launch --screen
最后在主机打开两个终端分别启动键盘控制:
ROS_NAMESPACE=tb2_0 roslaunch turtlebot_teleop keyboard_teleop.launch
ROS_NAMESPACE=tb2_1 roslaunch turtlebot_teleop keyboard_teleop.launch
2.多个turtlebot2协同建图
(1)各小车分别启动建图模块
另起两个终端并ssh连接到两个turtlebot小车上并分别启动建图的launch文件:
ROS_NAMESPACE=tb2_0 roslaunch turtlebot_navigation rplidar_gmapping_demo.launch
ROS_NAMESPACE=tb2_1 roslaunch turtlebot_navigation rplidar_gmapping_demo.launch
(2)启动map-merge融合地图
在主机端另起两个新的终端输入:
roslaunch turtlebot_navigation multi_map_merge.launch
rviz
具体multi_map_merge.launch文件的内容如下:
<launch>
<arg name="first_tb2" default="tb2_0"/>
<arg name="second_tb2" default="tb2_1"/>
<arg name="first_tb2_x_pos" default="0.0"/>
<arg name="first_tb2_y_pos" default="0.5"/>
<arg name="first_tb2_z_pos" default=" 0.0"/>
<arg name="first_tb2_yaw" default=" 0.0"/>
<arg name="second_tb2_x_pos" default="0.0"/>
<arg name="second_tb2_y_pos" default="-0.5"/>
<arg name="second_tb2_z_pos" default=" 0.0"/>
<arg name="second_tb2_yaw" default=" 0.0"/>
<group ns="$(arg first_tb2)/map_merge">
<param name="init_pose_x" value="$(arg first_tb2_x_pos)"/>
<param name="init_pose_y" value="$(arg first_tb2_y_pos)"/>
<param name="init_pose_z" value="$(arg first_tb2_z_pos)"/>
<param name="init_pose_yaw" value="$(arg first_tb2_yaw)" />
</group>
<group ns="$(arg second_tb2)/map_merge">
<param name="init_pose_x" value="$(arg second_tb2_x_pos)"/>
<param name="init_pose_y" value="$(arg second_tb2_y_pos)"/>
<param name="init_pose_z" value="$(arg second_tb2_z_pos)"/>
<param name="init_pose_yaw" value="$(arg second_tb2_yaw)" />
</group>
<node pkg="multirobot_map_merge" type="map_merge" respawn="false" name="map_merge" output="screen">
<param name="robot_map_topic" value="map"/>
<param name="robot_namespace" value="tb2"/>
<param name="merged_map_topic" value="map"/>
<param name="world_frame" value="map"/>
<param name="known_init_poses" value="false"/>
<param name="merging_rate" value="0.5"/>
<param name="discovery_rate" value="0.05"/>
<param name="estimation_rate" value="0.1"/>
<param name="estimation_confidence" value="1.0"/>
</node>
<node pkg="tf" type="static_transform_publisher" name="world_to_$(arg first_tb2)_tf_broadcaster" args="0 0 0 0 0 0 /map /$(arg first_tb2)/map 100"/>
<node pkg="tf" type="static_transform_publisher" name="world_to_$(arg second_tb2)_tf_broadcaster" args="0 0 0 0 0 0 /map /$(arg second_tb2)/map 100"/>
<!-- <node pkg="tf" type="static_transform_publisher" name="world_to_$(arg third_tb2)_tf_broadcaster" args="0 0 0 0 0 0 /map /$(arg second_tb2)/map 100"/> -->
</launch>
控制小车运动实现地图构建与融合。