还需要解释吗?
举个栗子吧:我在运行某个ros2程序时,可能还需要打开rqt(查看camera的图像和设置)。
所以通过launch文件
1、运行shell命令‘’rqt‘’
的例子如下:
# 导入描述launch文件的库,这是launch文件所必需的
from launch import LaunchDescription
# 这是调用shell命令所需要导入的库
from launch.actions import ExecuteProcess
def generate_launch_description():
"""launch内容描述函数,由ros2 launch 扫描调用"""
# 运行shell命令的书写格式
cmd = ExecuteProcess(
# rqt替换成你要运行的shell命令,多个命令用逗号隔开
# 例如,cmd=['some-cmd', 'some-cmd'],
cmd=['rqt'],
# 运行信息输出到屏幕上
output='screen'
)
# 创建LaunchDescription对象launch_description,用于描述launch文件
ld = LaunchDescription()
ld.add_action(cmd)
# 返回让ROS2根据launch描述执行节点
return ld
注释解释的很清楚了哟。
2、同时运行节点和shell命令
# 导入描述launch文件的库,这是launch文件所必需的
from launch import LaunchDescription
# 导入运行shell命令所需要的库,这是运行shell命令所必需的
from launch.actions import ExecuteProcess
# 导入运行节点所需要的库,这是运行节点所必需的
from launch_ros.actions import Node
def generate_launch_description():
"""launch内容描述函数,由ros2 launch 扫描调用"""
# 运行一个节点的书写格式
camera_driver = Node(
# fishbot_camera替换成你要运行的节点所在的包
package="fishbot_camera",
# camera_driver替换成你要运行的节点所在的文件
executable="camera_driver"
)
# 运行shell命令的书写格式
cmd = ExecuteProcess(
# rqt替换成你要运行的shell命令,多个命令用逗号隔开
# 例如,cmd=['some-cmd', 'some-cmd'],
cmd=['rqt'],
# 运行过程输出到屏幕
output='screen'
)
# 创建LaunchDescription对象launch_description,用于描述launch文件
ld = LaunchDescription()
ld.add_action(camera_driver)
ld.add_action(cmd)
# 返回让ROS2根据launch描述执行节点
return ld
3、豪华大礼包——运行shell命令的所有配置
# 导入描述launch文件的库,这是launch文件所必需的
from launch import LaunchDescription
# 这是调用shell命令所需要导入的库
from launch.actions import ExecuteProcess
def generate_launch_description():
"""launch内容描述函数,由ros2 launch 扫描调用"""
example_cmd = ExecuteProcess(
cmd=['some-cmd', 'some-cmd'], # some-cmd为可替换的命令,多个命令用逗号隔开
additional_env={'EXAMPLE_PATH': path}, #可以添加临时的环境变量
output='screen' # 输出到屏幕
)
ld = LaunchDescription()
ld.add_action(example_cmd)
# 返回让ROS2根据launch描述执行节点
return ld