之前博文《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關閉再運行。即可以實現不需要手動鍵盤遙控讓機器人自動把整個環境都探索完~