ros launch 从yaml文件读取参数
时间: 2025-06-29 18:09:55 浏览: 21
### 如何在ROS中通过Launch文件从YAML文件读取参数
为了实现从 YAML 文件加载参数到 ROS 节点,在 Launch 文件中的配置至关重要。对于 ROS 2 的情况,可以采用如下方式来完成这一操作。
创建一个 XML 格式的 launch 文件用于启动节点,并从中加载参数设置。下面是一个具体的例子:
```xml
<launch>
<!-- 启动 EKF 定位节点 -->
<node pkg="robot_localization" type="ekf_localization_node" name="ekf_node_name" clear_params="true">
<!-- 加载来自 YAML 文件的参数 -->
<rosparam command="load" file="$(find robot_localization)/params/ekf_template.yaml"/>
<!-- 输出话题重映射占位符 (可根据需求调整) -->
<!--<remap from="odometry/filtered" to=""/>
<remap from="accel/filtered" to=""/>-->
</node>
</launch>
```
上述代码片段展示了如何利用 `<rosparam>` 标签配合 `command="load"` 属性以及 `file` 属性指向外部 YAML 配置文件的位置[^2]。这里使用的路径表达式 `$(find package_name)` 是一种查找包内资源的方式,它会自动定位至指定软件包下的相应位置[^3]。
当涉及到更复杂的场景比如使用 `controller_manager` 和其控制器时,则可以在对应的 `.yaml` 中定义好所有必要的参数结构,再于 launch 文件里引入这些预设好的参数集。例如:
```yaml
# 假定这是 controllers.yaml 文件的内容
controller_manager:
ros__parameters:
update_rate: 100 # Hz
joint_state_broadcaster:
type: joint_state_broadcaster/JointStateBroadcaster
joint_1_controller:
type: canopen_ros2_controllers/CanopenProxyController
ros__parameters:
joint: joint_1
joint_2_controller:
type: canopen_ros2_controllers/CanopenProxyController
ros__parameters:
joint: joint_2
```
接着是在 launch 文件中应用此 YAML 文件作为参数源的一部分:
```xml
<launch>
...
<node ... >
<rosparam command="load" file="$(find your_package_name)/config/controllers.yaml"/>
</node>
...
</launch>
```
这样就可以确保所有的参数都被正确地传递给了目标节点,而无需手动硬编码每一个单独的参数项[^4]。
阅读全文
相关推荐


















