当前位置: 首页 > news >正文

ros2 launch 常用python模块详细使用范例

ros2 laulnch 常用python模块详细使用范例

from launch import LaunchDescription
from launch.actions import GroupAction, DeclareLaunchArgument
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
from launch_ros.actions import PushROSNamespace, Node, IncludeLaunchDescription
from launch_ros.substitutions import FindPackageShare 

详细解释一段ROS 2启动文件中的Python代码,包括每个导入的模块的功能、语法和详细范例。首先,我需要回忆每个模块的作用,然后结合代码中的具体用法进行解释。

首先,用户提供的代码片段导入了多个模块,包括launch、launch_ros中的类和函数。我需要逐一解释每个模块和类的功能,以及它们在启动文件中的使用方式。

首先,LaunchDescription是ROS 2启动文件的核心类,用于描述启动过程中要执行的动作。GroupAction用于将多个动作分组,通常用于组织启动文件中的不同部分。DeclareLaunchArgument用于声明启动参数,允许在运行时传递参数。LaunchConfiguration用于获取这些参数的值。PathJoinSubstitution用于路径拼接,特别是在跨包引用资源时。PushROSNamespace用于设置ROS命名空间,确保节点在正确的命名空间下运行。Node和IncludeLaunchDescription分别用于启动节点和包含其他启动文件。FindPackageShare用于查找包的共享目录,常用于定位配置文件或启动文件。

接下来,我需要详细解释每个模块的具体功能、语法和提供范例。例如,DeclareLaunchArgument的用法,如何声明参数并设置默认值。LaunchConfiguration如何引用这些参数。GroupAction如何将多个动作组合在一起,比如同时设置命名空间和包含其他启动文件。

还需要注意这些模块之间的协作方式,比如在GroupAction中使用PushROSNamespace和IncludeLaunchDescription,实现命名空间的自动应用。此外,PathJoinSubstitution和FindPackageShare的组合使用,用于定位其他包中的资源文件,如配置文件或启动文件。

在解释过程中,需要结合用户提供的代码示例,说明每个部分的具体作用。例如,在顶层启动文件中,如何通过GroupAction组织不同子系统的启动,使用PushROSNamespace设置命名空间,并通过IncludeLaunchDescription包含其他启动文件。同时,参数如何通过DeclareLaunchArgument声明,并通过LaunchConfiguration在节点配置中使用。

还需要考虑最佳实践,比如如何组织大型项目的启动文件,使用模块化设计,参数化配置,以及动态加载等特性。例如,使用顶层启动文件包含多个子启动文件,每个子启动文件负责一个子系统,如感知、控制、导航等。参数存储在YAML文件中,通过路径引用加载,实现参数的集中管理和覆盖。

最后,需要确保解释清晰,涵盖每个模块的功能、语法和详细范例,帮助用户全面理解ROS 2启动文件的编写方法。

以下是对代码中导入的ROS 2启动系统核心模块的详细解析,包含功能说明、语法规则和实战范例:

1. from launch import LaunchDescription

功能:ROS 2启动文件的核心容器类,用于描述启动时需执行的所有动作序列。
语法

ld = LaunchDescription([Action1(),Action2(),...
])

范例

from launch import LaunchDescriptiondef generate_launch_description():return LaunchDescription([DeclareLaunchArgument('speed'),Node(package='controller', executable='velocity_controller')])

2. from launch.actions import GroupAction

功能:将多个启动动作分组执行,常用于组织逻辑相关的动作块。
语法

GroupAction([Action1(),Action2()
])

范例

GroupAction([PushROSNamespace('camera'),Node(package='image_pipeline', executable='camera_node')
])

3. from launch.actions import DeclareLaunchArgument

功能:声明可配置的启动参数,支持运行时动态修改。
语法

DeclareLaunchArgument('param_name', default_value='default',description='参数描述'
)

范例

DeclareLaunchArgument('resolution',default_value='640x480',description='相机分辨率'
)

4. from launch.substitutions import LaunchConfiguration

功能:获取通过DeclareLaunchArgument声明的参数值。
语法

LaunchConfiguration('param_name')

范例

Node(parameters=[{'resolution': LaunchConfiguration('resolution')}]
)

5. from launch.substitutions import PathJoinSubstitution

功能:安全拼接文件路径,支持跨包资源引用。
语法

PathJoinSubstitution([FindPackageShare('pkg_name'),'subdir','file.yaml'
])

范例

parameters=[PathJoinSubstitution([FindPackageShare('navigation'),'config','nav_params.yaml'
])]

6. from launch_ros.actions import PushROSNamespace

功能:为后续节点设置ROS命名空间,解决多节点命名冲突。
语法

PushROSNamespace('namespace')

范例

GroupAction([PushROSNamespace('lidar'),Node(executable='lidar_driver')  # 自动进入/lidar命名空间
])

7. from launch_ros.actions import Node

功能:启动ROS 2节点,支持参数、重映射和命名空间配置。
语法

Node(package='pkg_name',executable='node_name',name='node_name',  # 可覆盖默认名称namespace='ns',parameters=[{...}],remappings=[('old_topic', 'new_topic')]
)

范例

Node(package='turtlesim',executable='turtlesim_node',name='sim1',parameters=[{'bg_r': 200}],remappings=[('/image', '/camera/image_raw')]
)

8. from launch_ros.actions import IncludeLaunchDescription

功能:包含其他启动文件,实现模块化启动。
语法

IncludeLaunchDescription(PythonLaunchDescription([...]),launch_arguments={'arg': 'value'}.items()
)

范例

IncludeLaunchDescription(PathJoinSubstitution([FindPackageShare('perception'),'launch/lidar.py']),launch_arguments={'sensor': 'velodyne'}.items()
)

9. from launch_ros.substitutions import FindPackageShare

功能:定位ROS 2包的共享目录(含launch/config文件)。
语法

FindPackageShare('pkg_name')

范例

rviz_config = PathJoinSubstitution([FindPackageShare('navigation'),'rviz','nav.rviz'
])

完整实战案例:多机器人控制系统

from launch import LaunchDescription
from launch.actions import GroupAction, DeclareLaunchArgument
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
from launch_ros.actions import PushROSNamespace, Node, IncludeLaunchDescription
from launch_ros.substitutions import FindPackageSharedef generate_launch_description():# 声明全局参数robot_model = DeclareLaunchArgument('robot_model', default_value='model_A',description='机器人硬件型号')return LaunchDescription([robot_model,# 摄像头子系统(带命名空间)GroupAction([PushROSNamespace('camera'),Node(package='image_pipeline',executable='camera_node',parameters=[{'fps': LaunchConfiguration('cam_fps', default=30)}])]),# 包含激光雷达启动文件(带参数传递)IncludeLaunchDescription(PathJoinSubstitution([FindPackageShare('lidar_driver'),'launch','lidar.py']),launch_arguments={'sensor_type': 'Velodyne'}.items()),# 机器人控制节点(参数文件加载)Node(package='control',executable='pid_controller',parameters=[PathJoinSubstitution([FindPackageShare('control'),'config',f'{LaunchConfiguration("robot_model")}_params.yaml'])]),# RViz可视化(跨包配置文件)Node(package='rviz2',executable='rviz2',arguments=['-d', FindPackageShare('control') / 'rviz/control.rviz'])])

最佳实践建议

  1. 模块化设计:通过IncludeLaunchDescription实现功能模块解耦
  2. 参数化配置:使用DeclareLaunchArgument和YAML文件实现动态配置
  3. 命名空间管理:通过PushROSNamespace避免多节点冲突
  4. 资源定位FindPackageShare+PathJoinSubstitution实现跨包资源访问
  5. 条件加载:结合IfCondition实现按需加载功能模块

通过组合这些核心组件,可构建出灵活可扩展的ROS 2启动系统,适用于从单机器人到多机器人集群的各种复杂场景。

http://www.dtcms.com/a/533692.html

相关文章:

  • Spring AOP XML配置实战:传统方式的进阶应用与对比分析(含核心关键词)
  • 映像星球官网网页版入口 - 最新影视资源高清在线观看平台
  • 如何评判一个网站建设的怎么样怎么用html做移动网站吗
  • 苏州网站建设网站开发庐江网站建设
  • 1.6 大数据方法论与实践指南-数据治理工具
  • 基于python大数据的台风灾害分析及预测系统
  • 城乡住房建设网站手机网站最小宽度
  • 华为OD算法开发指导-比赛的冠亚季军
  • 算法:矩形面积II
  • app怎么查网站备案计算机网站php设计代做
  • 晋中公司做网站装修效果图软件app哪个好
  • yum安装配置
  • 网站标题算关键词优化吗吴忠北京网站建设
  • 做ps网页设计的网站有哪些wordpress配置文件路径
  • 笔试强训(九)
  • 线程池ThreadPoolExecutor
  • 合同的系统培训约定
  • cf租号网站怎么做的河南建设安全协会网站
  • 建设的网站别人登录密码公司企业邮箱号
  • 电商网站怎样做天津网站建设哪个好
  • 长沙网站建设接单wordpress站点名没有更改
  • 手机wap网站建设一套完整的app 开发流程
  • 在线制作wap网站中牟建设工程信息网站
  • K8S--标签(labels)和选择器(selectors)的作用
  • G1 垃圾收集器
  • 湛江免费建站公司磁力在线搜索引擎
  • 广东省城乡建设厅网站首页如何判断网站有cdn加速
  • Bugku-Web题目-no select
  • 健康门户网站建设内容求职网站开发
  • Linux 信号处理视角下的 volatile 关键字