这是launch文件内容
<launch><!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched --><include file="$(find gazebo_ros)/launch/empty_world.launch"><arg name="world_name" value="$(find wpr_simulation)/worlds/wpb_simple.world"/><arg name="paused" value="false"/><arg name="use_sim_time" value="true"/><arg name="gui" value="true"/><arg name="recording" value="false"/><arg name="debug" value="false"/></include><!-- Spawn the objects into Gazebo --><node name="bookshelft" pkg="gazebo_ros" type="spawn_model" args="-file $(find wpr_simulation)/models/bookshelft.model -x 3.0 -y 0.2 -z 0 -Y 3.14159 -urdf -model bookshelft" /><node name="bottle" pkg="gazebo_ros" type="spawn_model" args="-file $(find wpr_simulation)/models/bottles/red_bottle.model -x 2.8 -y 0 -z 0.6 -Y 0 -urdf -model red_bottle" /><!-- Spawn a robot into Gazebo --><node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-file $(find wpr_simulation)/models/wpb_home.model -urdf -model wpb_home" /><!-- Robot Description --><arg name="model" default="$(find wpr_simulation)/models/wpb_home.model"/><param name="robot_description" command="$(find xacro)/xacro $(arg model)" /><node 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" />
</launch>
这段 XML 代码是一个 ROS(Robot Operating System)中的 launch
文件,主要用于在 Gazebo 模拟环境中加载一个世界并生成对象和机器人。下面是对代码各部分的详细讲解:
1. 包含 Gazebo 世界
<include file="$(find gazebo_ros)/launch/empty_world.launch"><arg name="world_name" value="$(find wpr_simulation)/worlds/wpb_simple.world"/><arg name="paused" value="false"/><arg name="use_sim_time" value="true"/><arg name="gui" value="true"/><arg name="recording" value="false"/><arg name="debug" value="false"/>
</include>
<include>
标签:引入了empty_world.launch
文件,这是 Gazebo 提供的一个默认启动文件,用于启动一个空的模拟环境。world_name
参数:指定要加载的世界,这里设置为wpb_simple.world
,这是在wpr_simulation
包中的一个世界文件。- 其他参数:
paused
: 是否启动时暂停 Gazebo。use_sim_time
: 是否使用仿真时间。gui
: 是否显示 Gazebo GUI。recording
: 是否记录仿真数据。debug
: 是否启用调试模式。
2. 生成对象
<node name="bookshelft" pkg="gazebo_ros" type="spawn_model" args="-file $(find wpr_simulation)/models/bookshelft.model -x 3.0 -y 0.2 -z 0 -Y 3.14159 -urdf -model bookshelft" />
<node name="bottle" pkg="gazebo_ros" type="spawn_model" args="-file $(find wpr_simulation)/models/bottles/red_bottle.model -x 2.8 -y 0 -z 0.6 -Y 0 -urdf -model red_bottle" />
<node>
标签:用于定义要启动的节点。spawn_model
节点:这是 Gazebo 中用于生成模型的节点。args
参数:指定模型文件和位置等信息。- 对于
bookshelft
:-file
: 指定书架模型文件的路径。-x
,-y
,-z
: 模型在 Gazebo 中的坐标位置。-Y
: 模型的旋转角度(以弧度为单位)。-urdf
: 指明该模型是一个 URDF 文件。-model
: 指定模型的名称。
- 对于
red_bottle
,参数设置类似,模型位置和旋转角度有所不同。
3. 生成机器人
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-file $(find wpr_simulation)/models/wpb_home.model -urdf -model wpb_home" />
- 这个节点用于生成一个机器人模型。
- 参数:
-file
: 指定机器人模型文件的路径。-urdf
: 指明该模型是一个 URDF 文件。-model
: 指定机器人模型的名称。
4. 机器人描述和状态发布
<arg name="model" default="$(find wpr_simulation)/models/wpb_home.model"/>
<param name="robot_description" command="$(find xacro)/xacro $(arg model)" />
<node 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" />
<arg>
标签:定义一个参数model
,用于指定机器人的 URDF 文件路径。<param>
标签:将机器人的描述(使用xacro
处理)发布到 ROS 参数服务器,以便其他节点可以访问。joint_state_publisher
:发布机器人的关节状态,使其在 Gazebo 中能够正确模拟。robot_state_publisher
:发布机器人的整体状态(包括位置和姿态),以便其他节点或工具可以使用这些信息。