在ROS 2中,launch文件用于同时启动多个节点,并配置各个节点的参数、重映射话题等。在ROS 2中,launch文件通常使用Python或者XML格式编写。
其中,Node 是 launch 文件的核心部分,用于描述要启动的 ROS 2 节点。下面详细讲解 Node
在 launch 文件中的各个参数及使用方式。
1. Node 在 launch 文件中的基本用法
Python Launch 文件中的 Node
在 Python launch 文件中,launch_ros.actions.Node
是启动节点的类。示例如下:
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='demo_nodes_cpp', # 节点所在的包名
executable='talker', # 可执行文件名
name='my_talker', # 节点名,可选
namespace='demo', # 命名空间,可选
output='screen', # 输出方式(screen 表示打印到终端)
parameters=[
{
'param1': 'value1'}, # 参数列表
{
'param2': 'value2'}
],
remappings=[
('/chatter', '/my_topic') # 话题重映射
],
arguments=['--ros-args', '--log-level', 'DEBUG'], # 传递额外的参数
emulate_tty=True # 用于显示彩色输出(终端仿真)
)
])
2. Node
参数详解
参数 | 类型 | 描述 |
---|---|---|
package |
str |
包含节点的包名。例如:demo_nodes_cpp |
executable |
str |
可执行节点的名称(可执行文件名),例如:talker |
name |
str |
节点的名称(节点名),用于覆盖默认节点名,默认为空 |
namespace |
str |
节点的命名空间。默认为空,设置后会影响节点的话题、服务等的前缀 |
output |
str |
节点输出位置。screen 表示输出到终端,log 表示保存到日志文件 |
parameters |
list |
传递参数给节点。可以是字典或 YAML 文件路径列表。 |
remappings |
list |
话题、服务或参数的重映射。格式为列表,元素是元组:('旧名称', '新名称') |
arguments |
list |
额外的命令行参数,通常用于 --ros-args 传递日志级别等配置 |
emulate_tty |
bool |
终端仿真。如果设置为 True ,可以在终端显示带颜色的输出(对彩色日志有帮助) |
prefix |
str |
在启动节点前添加命令前缀,例如 gdb 、valgrind 等,用于调试 |
cwd |
str |
节点运行的工作目录,如 'node' 或 'launch' |
env |
dict |
指定启动节点时的环境变量,格式为字典:{'env_var1': 'value1', ...} |
respawn |
bool |
是否在节点崩溃时自动重启。默认值为 False |
respawn_delay |
float |
节点崩溃后重启的延迟时间,单位为秒 |
3. 参数设置方式
在 launch 文件中,parameters
参数支持两种方式:
-
字典形式:
parameters=[ { 'param1': 'value1'}, { 'param2': 42} ]
-
YAML 文件:
parameters=[ '/path/to/config.yaml' ]
YAML 文件中格式如下:
param1: "value1" param2: 42
4. 话题重映射
在 Node
中,可以通过 remappings
参数来重映射话题名称。格式为 ('旧名称', '新名称')
。
例如:
remappings=[
('/chatter', '/new_chatter')