载入已经创建好的仿真环境
不论是使用前面两种方法创建的.world 文件,还是从网络上下载的第三方仿真环境文件,要载入这些仿真环境首先需要在功能包下创建 worlds 文件夹,然后把仿真环境文件保存在该文件下,如果仿真环境还需要载入一些预定义的模型,那么同样在功能包下创建 models 文件夹,把与该仿真环境相关的预定义模型文件复制到 models 文件夹中。最后修改 Launch 文件,在载入 empty_world.launch文件的 标签下添加参数 world_name,同时为该参数设置仿真环境文件.world 的地址。下面以 TurtleBot3 提供的第三方仿真环境为例,使用运行 Gazebo 的 Launch 文件7.20为基础进行修改,如代码7.35所示,执行该 Launch 文件,就可以得到如图7-45所示的效果。
Code 7.19: Gazebo 插件配置
<!-- package.xml文 件 配 置 -->
...
<build_depend >gazebo_plugins </build_depend >
<build_depend >gazebo_ros </build_depend >
<build_depend >gazebo_ros_control </build_depend >
...
<build_export_depend >gazebo_plugins </build_export_depend >
<build_export_depend >gazebo_ros </build_export_depend >
<build_export_depend >gazebo_ros_control </build_export_depend >
<exec_depend >gazebo_plugins </ exec_depend >
<exec_depend >gazebo_ros </ exec_depend >
<exec_depend >gazebo_ros_control </ exec_depend >
<!-- CMakeLists.txt文 件 配 置 -->
find_package (catkin REQUIRED COMPONENTS
...
gazebo_plugins
gazebo_ros
gazebo_ros_control
)
catkin_package (
...
CATKIN_DEPENDS ... gazebo_plugins gazebo_ros gazebo_ros_control
...
)
Code 7.20: Gazebo 环境的 Launch 文件(simple_model_gazebo.launch)
<launch >
<arg name="paused" default="false"/>
<arg name="use_sim_time" default="true"/>
<arg name="gui" default="true"/>
<arg name="headless" default="false"/>
<arg name="debug" default="false"/>
<!-- 指 定 模 型 的URDF文 件 地 址 -->
<arg name="model"
default="$(find begin1)/urdf/simple_sai_robot.urdf"/>
<!-- RVIZ配 置 文 件 的 存 放 地 址 -->
<arg name="rvizconfig"
default="$(find begin1)/rviz/simple_model.rviz" />
<!-- 模 型 描 述 的 参 数 -->
<param name="robot_description"
command="$(find xacro)/xacro $(arg model)" />
<!-- 载 入 空 的 物 理 世 界 -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="debug" value="$(arg debug)" />
<arg name="gui" value="$(arg gui)" />
<arg name="paused" value="$(arg paused)"/>
<arg name="use_sim_time" value="$(arg use_sim_time)"/>
<arg name="headless" value="$(arg headless)"/>
</include >
<node if="$(arg gui)" name="joint_state_publisher_gui"
pkg="joint_state_publisher_gui"
type="joint_state_publisher_gui" />
<node unless="$(arg gui)" name="joint_state_publisher"
pkg="joint_state_publisher"
type="joint_state_publisher" />
<node name="robot_state_publisher" pkg="robot_state_publisher"
type="robot_state_publisher" />
<!-- 创 建 一 个 模 型 对 象 -->
<node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model"
args="-x 0.0 -y 0.0 -z 0.0 -unpause -urdf
-model sai_robot -param robot_description"
respawn="false" output="screen" />
<node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig)"
required="true" />
</launch >
Code 7.35: 第三方仿真环境的使用(simple_model_gazebo_world.launch)
<launch>
<arg name="paused" default="false"/>
<arg name="use_sim_time" default="true"/>
<arg name="gui" default="true"/>
<arg name="headless" default="false"/>
<arg name="debug" default="false"/>
<!-- 指 定 模 型 的URDF文 件 地 址 -->
<arg name="model"
default="$(find begin1)/urdf/simple_sai_robot.urdf"/>
<!-- RVIZ配 置 文 件 的 存 放 地 址 -->
<arg name="rvizconfig"
default="$(find begin1)/rviz/simple_model.rviz" />
<!-- 模 型 描 述 的 参 数 -->
<param name="robot_description"
command="$(find xacro)/xacro $(arg model)" />
<!-- 载 入 空 的 物 理 世 界 -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="debug" value="$(arg debug)" />
<arg name="gui" value="$(arg gui)" />
<arg name="paused" value="$(arg paused)"/>
<arg name="use_sim_time" value="$(arg use_sim_time)"/>
<arg name="headless" value="$(arg headless)"/>
</include>
<node if="$(arg gui)" name="joint_state_publisher_gui"
pkg="joint_state_publisher_gui"
type="joint_state_publisher_gui" />
<node unless="$(arg gui)" name="joint_state_publisher"
pkg="joint_state_publisher"
type="joint_state_publisher" />
<node name="robot_state_publisher" pkg="robot_state_publisher"
type="robot_state_publisher" />
<!-- 创 建 一 个 模 型 对 象 -->
<node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model"
args="-x 0.0 -y 0.0 -z 0.0 -unpause -urdf
-model sai_robot -param robot_description"
respawn="false" output="screen" />
<node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig)"
required="true" />
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name"
value="$(find begin1)/worlds/turtlebot3_world.world"/>
</include>
</launch >