ros2关于robot_localization节点运行时不加载ekf.yaml 及 ros2 yaml规则说明
·
我自己写了个.launch.py文件用于启动robot_localization的ekf_node
ekf_yaml = PathJoinSubstitution([
FindPackageShare('start_robot_localization'),
'config',
'ekf.yaml'
])
node = Node(
package='robot_localization',
executable='ekf_node',
name='ekf_robot_localization',
output='screen',
parameters=[ekf_yaml],
remappings=[('/odometry/filtered','/odom_combined')]
)
但是不管怎么改ekf_taml的地址,我指定的那个yaml文件都没有被加载,
后来一直反复问ai改地址格式都没有用,突然ai提出了一个点“robot_localization 要求 yaml 的顶层节点名 必须等于节点名。“,这个点我从来没想过,于是我去看了下我ekf.yaml的第一行写的是什么,
### ekf config file ###
ekf_filter_node:
ros__parameters:
前两行是这样的,第一行确实像是一个节点名,于是我将我的.launch.py中的node启动代码中的name修改为ekf_filter_node
node = Node(
package='robot_localization',
executable='ekf_node',
name='ekf_filter_node',
output='screen',
parameters=[ekf_yaml],
remappings=[('/odometry/filtered','/odom_combined')]
)
终于,再次运行的时候我的ekf.yaml参数被加载了。
后来去查了一下,这并不是robot_localization的要求,而是ros2的要求,
以下是Copilot给出的解释:
ROS2 YAML 参数规则
在 ROS2 中,YAML 文件常用于配置节点参数,方便管理和修改参数而无需重新编译代码。以下是 ROS2 中 YAML 参数的基本规则和使用方法:
1. YAML 文件的基本格式
YAML 文件的格式需要遵循以下规则:
使用缩进表示层级关系(通常为两个空格)。
键值对以 key: value 的形式表示。
字符串可以加引号(单引号或双引号),也可以不加引号。
支持布尔值、数字、列表等多种数据类型。
示例:
my_node:
ros__parameters:
param1: "Hello, ROS2"
param2: 42
param3: true
param_list:
- 1
- 2
- 3
2. ROS2 参数命名规则
节点名称:顶层键为节点名称。
ros__parameters:固定关键字,表示该节点的参数集合。
参数名称:参数名可以是任意字符串,但建议使用有意义的名称,避免特殊字符。
3. 加载 YAML 文件的方式
YAML 文件可以通过 ROS2 的 launch 文件加载,或者直接在命令行中指定。
通过 Launch 文件加载
在 launch.py 文件中,可以使用 Node 的 parameters 参数加载 YAML 文件:
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='my_package',
executable='my_node',
name='my_node',
parameters=['config/my_params.yaml']
)
])
通过命令行加载
可以在运行节点时通过 --ros-args 指定 YAML 文件:
ros2 run my_package my_node --ros-args --params-file config/my_params.yaml
4. 支持的数据类型
ROS2 参数支持以下数据类型:
标量:字符串、整数、浮点数、布尔值。
数组:列表形式的标量值。
嵌套结构:可以通过嵌套 YAML 表示复杂的参数结构。
示例:
my_node:
ros__parameters:
string_param: "example"
int_param: 10
float_param: 3.14
bool_param: false
list_param: [1, 2, 3]
nested_param:
sub_param1: "nested"
sub_param2: 100
5. 注意事项
缩进:YAML 文件对缩进敏感,务必保持一致。
文件路径:确保 YAML 文件路径正确,尤其在团队协作或跨平台时。
参数覆盖:命令行参数会覆盖 YAML 文件中的参数。
通过 YAML 文件管理参数,可以极大地提升 ROS2 应用的灵活性和可维护性!
更多推荐



所有评论(0)