<launch> <include file="$(find gazebo_ros)/launch/empty_world.launch"> <arg name="world_name" value="$(find e100_sim)/worlds/office.world"/> <arg name="use_sim_time" value="true"/> <arg name="debug" value="false"/> <arg name="paused" value="false"/> <arg name="gui" value="true"/> </include> <param name="robot_description" command="$(find xacro)xacro '$(find e100_description)/include/urdf/ria_e100_gazebo.urdf.xacro'"/> <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen" args="-urdf -model ria -param robot_description"/> <rosparam file="$(find e100_sim)/controller/gazebo_diff_control.yaml" command="load"/> <node name="base_controller_spawner" pkg="controller_manager" type="spawner" args="ria_base_controller ria_joint_state_controller" respawn="false" output="screen"/> <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"/> </launch>
时间: 2025-06-19 21:15:04 浏览: 17
### Gazebo ROS Launch 文件示例
在 Gazebo 中进行仿真的过程中,通常需要创建一个 `launch` 文件来集成自定义的世界文件、机器人描述 (`robot_description`) 和控制器配置。以下是基于用户需求的一个完整的 Gazebo ROS 启动文件示例。
#### 自定义世界的加载
为了加载自定义世界文件,在启动文件中可以通过设置参数传递给 Gazebo 的插件实现。例如:
```xml
<arg name="world_name" default="$(find pkg_name)/worlds/custom_world.world"/>
```
此部分通过 `<arg>` 定义了一个可选参数 `world_name`,默认指向包路径下的 `custom_world.world` 文件[^1]。
#### 加载机器人描述 (Robot Description)
机器人的 URDF 或 XACRO 描述通常是通过 `robot_state_publisher` 节点发布的。以下是一个典型的配置方式:
```xml
<param name="robot_description" command="$(find xacro)/xacro --inorder $(find pkg_name)/urdf/robot_model.urdf.xacro" />
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" output="screen">
<remap from="/joint_states" to="/my_robot/joint_states"/>
</node>
```
这里使用了 `command` 属性调用了 `xacro` 工具解析 `.xacro` 文件并将其转换为标准的 URDF 格式[^3]。
#### 控制器配置
对于控制关节运动或其他功能模块,可以引入控制器管理器以及相应的 YAML 配置文件。下面展示了一种常见的做法:
```xml
<!-- Load controllers -->
<rosparam file="$(find pkg_name)/config/controllers.yaml" command="load"/>
<node name="controller_manager" pkg="controller_manager" type="spawner" args="joint_state_broadcaster diff_drive_base_controller" output="screen"/>
```
这段代码片段会加载指定的控制器配置文件,并激活两个主要组件——`joint_state_broadcaster` 和差分驱动控制器 `diff_drive_base_controller`[^4]。
#### 整合后的完整启动文件
综合以上各部分内容,最终得到如下所示的整体结构化启动脚本:
```xml
<?xml version="1.0"?>
<launch>
<!-- Arguments -->
<arg name="use_sim_time" default="true"/>
<arg name="world_name" default="$(find pkg_name)/worlds/custom_world.world"/>
<!-- Start Gazebo with custom world -->
<include file="$(find gazebo_ros)/launch/gzserver.launch.xml">
<arg name="world_name" value="$(arg world_name)" />
<arg name="extra_gazebo_args" value="--verbose" />
</include>
<include file="$(find gazebo_ros)/launch/gzclient.launch.xml"/>
<!-- Robot description parameter -->
<param name="robot_description" command="$(find xacro)/xacro --inorder $(find pkg_name)/urdf/robot_model.urdf.xacro" />
<!-- Publish robot state information -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" output="screen">
<param name="publish_frequency" value="50.0"/>
<remap from="/joint_states" to="/my_robot/joint_states"/>
</node>
<!-- Spawn the robot into Gazebo -->
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-urdf -model my_robot -param robot_description" respawn="false" output="screen"/>
<!-- Controller manager setup -->
<rosparam file="$(find pkg_name)/config/controllers.yaml" command="load"/>
<node name="controller_manager" pkg="controller_manager" type="spawner" args="joint_state_broadcaster diff_drive_base_controller" output="screen"/>
</launch>
```
该启动文件涵盖了从初始化仿真环境到部署机器人模型及其控制器的所有必要步骤。
---
###
阅读全文
相关推荐


















