在ROS 2的launch系统中,parameters
和arguments
在Node
动作(action)中扮演着不同的角色,尽管它们都用于向节点提供配置信息,但它们的目的和用法有所不同。
parameters
parameters
属性用于传递节点在运行时需要的配置参数。这些参数通常是静态的,并且在节点启动时被读取一次,用于配置节点的行为。例如,节点可能需要知道某个阈值、服务地址、文件路径等,这些信息就可以通过parameters
来传递。
在ROS 2中,这些参数通常是通过ROS 2的参数服务器来管理的,这意味着你可以在节点运行时查询和修改这些参数(如果节点支持的话)。
在launch文件中,parameters
是以字典(或字典列表)的形式传递的,每个字典代表一个参数,其中键是参数名,值是参数值。
Node(
package='your_package',
executable='your_node',
name='your_node_name',
parameters=[
{'param_name': 'value'},
# 或者对于更复杂的参数结构
{
'another_param_name': {
'key1': 'value1',
'key2': 'value2'
}
}
],
# 其他配置...
)
arguments
arguments
属性用于传递命令行参数给节点的可执行文件。这些参数通常用于控制可执行文件的行为,而不是配置节点内部的状态或行为。例如,你可能需要传递一个文件名、一个运行模式标识符或任何其他类型的命令行开关给节点。
arguments
是一个简单的字符串列表,每个字符串代表一个命令行参数。这些参数会按照你提供的顺序直接传递给节点的可执行文件。
Node(
package='your_package',
executable='your_node',
name='your_node_name',
arguments=[
'-f', 'config_file.yaml',
'--mode', 'production'
],
# 其他配置...
)
区别总结
parameters | arguments | |
---|---|---|
用途 | 用于配置节点内部的状态或行为 | 用于控制可执行文件的行为 |
管理 | 通常通过ROS 2的参数服务器进行管理,可在运行时查询和修改(如果节点支持) | 一旦传递给节点,就固定了,除非重新启动节点 |
格式 | 以字典(或字典列表)的形式传递 | 以字符串列表的形式传递 |
目标 | 节点的ROS 2接口(如参数服务器) | 可执行文件的命令行接口 |
在编写ROS 2 launch文件时,你需要根据你的具体需求来选择使用parameters
还是arguments
,或者两者都使用。通常,如果参数与ROS 2的参数服务器交互有关,或者需要节点在运行时能够访问这些参数,那么应该使用parameters
。如果参数是控制可执行文件行为的,那么应该使用arguments
。