之前博文《ROS仿真笔记之——基于gazebo的多机器人探索环境仿真》实现了移动机器人自动探索环境。而博文《 ROS仿真笔记之——多移动机器人SLAM地图融合》实现了基于gazebo的移动机器人SLAM。那么问题来了,要手动的键盘控制让机器人遍历整个地图,有点麻烦。如果能让机器人自己去探索环境,自己构建地图那将会非常的方便快捷。
首先开启gazebo
export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_gazebo turtlebot3_world.launch
然后开启SLAM仿真
roslaunch turtlebot3_slam turtlebot3_gmapping.launch set_base_frame:=base_footprint set_odom_frame:=odom set_map_frame:=map
跟博文《 ROS仿真笔记之——多移动机器人SLAM地图融合》一开始出现的bug一样,修改文档,添加tf变换描述,修改如下
<launch>
<arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
<arg name="x_pos" default="-2.0"/>
<arg name="y_pos" default="-0.5"/>
<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="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" output="screen">
<param name="publish_frequency" type="double" value="50.0" />
</node>
<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>
然后就可以了
然后启动rviz
rosrun rviz rviz -d `rospack find turtlebot3_gazebo`/rviz/turtlebot3_gazebo_model.rviz
然后运行explore
export TURTLEBOT3_MODEL=waffle
roslaunch explore_lite explore.launch
由于explore本身就自带了slam,所以可以把上面的slam关闭再运行。即可以实现不需要手动键盘遥控让机器人自动把整个环境都探索完~