版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ROS2核心工具:launch与rosbag2实践指南2026年7月8日CONTENTS目录01
launch文件概述02
launch文件基本使用流程03
launch之Python实现04
launch之XML、YAML实现CONTENTS目录05
rosbag2工具详解06
launch与rosbag2综合应用案例07
总结与展望
01launch文件概述多节点启动场景launch文件的场景与作用
在机器人操作系统中,节点是程序的基本构成单元,一个完整的功能模块由若干节点组成。以机器人导航功能为例,涉及底盘驱动、雷达驱动、摄像头驱动、imu驱动、地图服务、路径规划、运动控制、环境感知、定位等多个节点。ros2run指令的不足
若使用ros2run指令逐一执行节点,效率低下,且涉及节点间参数导入、执行逻辑处理等问题,难以满足复杂功能模块的启动需求。launch文件的核心作用
ROS2中提供launch模块,用于实现节点的批量启动,简化节点的配置与启动流程,显著提高程序的启动效率。launch文件的基本概念launch模块的组成launch模块由launch文件与ros2launch命令组成。launch文件用于打包并配置节点,ros2launch命令用于执行launch文件。launch文件的功能launch文件字面意为“启动”“发射”,在ROS2中主要用于启动程序,可对节点进行打包和配置,实现多个节点的统一管理和启动。ros2launch命令的功能ros2launch命令是执行launch文件的工具,通过该命令可以运行launch文件中配置的节点,实现节点的批量启动。
launch文件使用准备工作01新建工作空间新建工作空间ws02_tools,本章后续编码实现都基于此工作空间。
02创建功能包终端下进入工作空间的src目录,调用命令“ros2pkgcreatecpp01_launch--build-typeament_cmake--dependenciesrclcpp”创建C++功能包,调用“ros2pkgcreatepy01_launch--build-typeament_python--dependenciesrclpy”创建Python功能包。
03VScode配置代码模板在VScode中修改配置文件python.json,添加“ros2node”和“ros2launchpy”代码模板,以提高Python版launch文件的编码效率。其中“ros2launchpy”模板包含导包、生成启动描述等基础代码结构。02launch文件基本使用流程
launch文件编写与编译执行(C++)Python格式launch文件编写在cpp01_launch功能包的launch/py目录下创建py00_base.launch.py文件,通过Node对象定义两个turtlesim_node节点,设置package为"turtlesim"、executable为"turtlesim_node",名称分别为"t1"和"t2",并返回LaunchDescription对象包含这两个节点。
XML与YAML格式launch文件编写XML格式在launch/xml目录下创建xml00_base.launch.xml,使用<node>标签设置pkg、exec、name属性;YAML格式在launch/yaml目录下创建yaml00_base.launch.yaml,以launch节点列表形式定义节点,均实现启动两个turtlesim_node节点。launch文件编写与编译执行(C++)
CMakeLists.txt配置与编译执行在CMakeLists.txt中添加install(DIRECTORYlaunchDESTINATIONshare/${PROJECT_NAME}),编译时执行colconbuild--packages-selectcpp01_launch,执行前需source.install/setup.bash,通过ros2launchcpp01_launchpy00_base.launch.py启动,最终启动两个turtlesim_node节点。
launch文件编写与编译执行(Python)launch文件编写与C++包异同在py01_launch功能包的launch目录下分py、xml、yaml文件夹存储对应格式文件,文件内容与C++包中完全一致,均实现启动两个turtlesim_node节点,支持直接通过文件路径执行ros2launch命令。
setup.py配置方式编辑setup.py的data_files属性,添加('share/'+package_name,glob("launch/py/*.launch.py"))等路径配置,将launch文件安装到指定目录,无需像C++包那样修改CMakeLists.txt,仅需一次配置即可包含所有launch文件。
编译执行与依赖建议编译执行colconbuild--packages-selectpy01_launch,执行时source后通过ros2runpy01_launchpy00_base.launch.py启动。建议在package.xml中添加<exec_depend>ros2launch</exec_depend>,确保ros2launch命令可用及launch文件识别。03launch之Python实现节点设置核心属性配置Node对象通过package(功能包)、executable(可执行文件)、namespace(命名空间)、name(节点名称)等属性定义节点基本信息。例如设置respawn=True可实现节点关闭后自动重启。参数设置方式支持直接设置参数(如parameters=[{"background_r":0}])或从YAML文件加载(需在CMakeLists.txt中安装config目录),YAML文件需按特定格式(如/t2/ros__parameters)组织参数。话题重映射与传参通过remappings=[("/原话题","/新话题")]实现话题重命名;arguments用于传递节点启动参数(如加载RViz配置文件),ros_arguments相当于带--ros-args前缀的参数传递。执行指令ExecuteProcess对象用于在launch中执行系统命令,核心参数包括cmd(命令内容)、output(日志输出方式,"both"表示终端和日志文件)、shell(是否以shell方式执行)。ROS2服务调用示例通过cmd执行ROS2服务调用命令,如生成新乌龟:cmd=["ros2servicecall/spawnturtlesim/srv/Spawn"{x:8.0,y:9.0,theta:0.0,name:'turtle2'}""],需注意命令格式与空格处理。FindExecutable工具可通过FindExecutable(name="ros2")获取命令路径,避免硬编码,增强指令可移植性,如cmd=[FindExecutable(name="ros2"),"servicecall",...]。01参数设置参数声明(DeclareLaunchArgument)使用DeclareLaunchArgument声明参数,包含name(参数名)和default_value(默认值),如声明背景色参数:DeclareLaunchArgument(name="background_r",default_value="255")。02参数调用(LaunchConfiguration)通过LaunchConfiguration(variable_name="参数名")获取声明的参数值,在Node的parameters中引用,实现动态参数传递。03动态传参案例启动launch文件时可动态传入参数,如ros2launchcpp01_launchpy03_args.launch.pybackground_r:=200,覆盖默认值,实现turtlesim_node背景色的灵活配置。
文件包含与分组设置文件包含(IncludeLaunchDescription)通过PythonLaunchDescriptionSource指定被包含的launch文件路径,结合launch_arguments传递参数,实现launch文件的模块化复用,如包含设置背景色的launch文件并传入自定义参数。
节点分组(GroupAction)使用GroupAction对节点进行分组管理,配合PushRosNamespace为组内节点统一设置命名空间,如将多个turtlesim_node节点分别归入"g1"和"g2"命名空间,避免节点名冲突。
提升可维护性文件包含减少代码冗余,分组设置简化节点管理,二者结合使大型项目的launch文件结构更清晰,便于维护与扩展。
事件添加事件注册(RegisterEventHandler)通过RegisterEventHandler注册事件处理逻辑,关联事件对象(如OnProcessStart、OnProcessExit)与目标节点,实现节点生命周期的事件响应。
启动事件(OnProcessStart)节点启动时触发指定动作,例如turtlesim_node启动后调用spawn服务生成新乌龟,通过on_start参数绑定ExecuteProcess执行服务调用命令。
退出事件(OnProcessExit)节点退出时执行特定逻辑,如通过OnProcessExit结合LogInfo输出日志信息:"turtlesim_node退出!",便于监控节点运行状态。04launch之XML、YAML实现节点核心属性配置XML格式节点设置与执行指令通过<node>标签设置节点属性,包括pkg(功能包)、exec(可执行文件)、name(节点名称)、namespace(命名空间)、exec_name(流程标签)、respawn(自动重启)等。示例:<nodepkg="turtlesim"exec="turtlesim_node"name="t1"namespace="t1_ns"respawn="true"/>。参数设置与话题重映射参数设置通过<param>标签实现,支持直接赋值(name="background_r"value="255")或从文件加载(from="$(find-pkg-sharepkg)/config/t2.yaml");话题重映射使用<remap>标签,格式为<remapfrom="/原话题"to="/新话题"/>。执行指令实现通过<executable>标签执行系统命令,属性包括cmd(命令内容)和output(日志输出方式,如"both"表示终端和日志文件同时输出)。示例:<executablecmd="ros2servicecall/spawn..."output="both"/>。
XML格式参数设置、文件包含与分组参数声明与调用使用<arg>标签声明参数,包含name(参数名)和default(默认值),调用时通过$(var参数名)引用。示例:<argname="bg_r"default="255"/>,节点中用<paramname="background_r"value="$(varbg_r)"/>。
文件包含语法通过<include>标签包含其他launch文件,file属性指定文件路径,可配合<let>标签传递参数。示例:<includefile="$(find-pkg-sharepkg)/launch/xml03_args.launch.xml"><letname="bg_r"value="0"/></include>。
节点分组管理使用<group>标签对节点分组,结合<push_ros_namespace>设置组内命名空间。示例:<group><push_ros_namespacenamespace="g1"/><node.../></group>,实现节点隔离与命名空间统一管理。XML格式参数设置、文件包含与分组
与Python实现的差异XML格式语法简洁,适合静态配置;Python格式支持逻辑控制(如条件、循环),功能更灵活。XML通过标签属性实现配置,Python通过代码逻辑动态生成,适用场景分别为简单启动与复杂流程控制。
YAML格式实现要点
节点配置核心语法以键值对形式定义节点,包含pkg(功能包)、exec(可执行文件)、name(节点名)等属性,支持嵌套结构。示例:-node:{pkg:"turtlesim",exec:"turtlesim_node",name:"t1",namespace:"t1_ns"}。
参数与重映射设置参数通过param字段配置,支持直接赋值或文件导入;话题重映射使用remap字段,格式为remap:{from:"/原话题",to:"/新话题"}。示例:param:[{from:"$(find-pkg-sharepkg)/config/t2.yaml"}]。
文件包含与分组文件包含通过include字段实现,指定file路径;分组使用group字段,内部可嵌套push_ros_namespace和node。示例:-group:[-push_ros_namespace:{namespace:"g1"},-node:{...}]。
格式对比与适用场景YAML格式简洁易读,适合简单配置;XML结构严谨,适合标准化场景;Python支持动态逻辑,适合复杂流程。YAML与XML均为静态配置,Python为动态生成,根据项目复杂度选择使用。05rosbag2工具详解
rosbag2的场景、概念与作用应用场景在机器人导航地图绘制中,可留存传感器数据事后分析生成地图,相比实时处理更灵活。
核心概念是用于录制和回放话题的工具集,实现数据的序列化存储与反序列化读取。
主要作用实现数据复用,方便调试与测试,支持对数据进行自定义处理和筛选。ros2bag命令工具record命令用于录制bag文件数据,基本语法为ros2bagrecord[话题名称]。play命令回放bag文件数据,语法为ros2bagplay[bag文件路径]。info命令输出bag文件相关信息,如话题、消息类型、录制时间等,语法为ros2baginfo[bag文件路径]。其他命令convert可转换bag文件配置,list输出可用插件信息,reindex重建bag元数据文件。rosbag2编程(C++):序列化
实现步骤概述包含头文件、初始化ROS客户端、定义节点类、调用spin函数、释放资源。
节点类核心操作创建Writer对象指针,设置写出目标文件(如"my_bag"),订阅话题并在回调函数中写出消息。
配置文件编辑package.xml需添加rclcpp、rosbag2_cpp、geometry_msgs依赖;CMakeLists.txt设置编译目标及安装路径。
编译与执行编译命令:colconbuild--packages-selectcpp02_rosbag;执行录制程序后生成my_bag目录。rosbag2编程(C++):反序列化实现步骤概述包含头文件、初始化ROS客户端、定义节点类、调用spin函数、释放资源。节点类核心操作创建Reader对象指针,设置读取目标文件,通过循环读取消息并解析,读取完毕关闭文件。数据读取与输出读取Twist类型消息,打印线速度和角速度,如RCLCPP_INFO输出"%.2f----%.2f"形式数据。执行效果运行回放程序后,终端打印录制的速度指令数据。
rosbag2编程(Python):序列化01实现步骤概述导包、初始化ROS客户端、定义节点类、调用spin函数、释放资源。
02节点类核心操作创建SequentialWriter对象,配置存储(uri='my_bag_py')和转换选项,创建话题信息并写出消息。
03消息写出方式在订阅回调中使用serialize_message序列化消息,结合时间戳写出到指定话题。
04配置与执行setup.py的entry_points添加可执行脚本;执行后生成my_bag_py目录存储数据。
rosbag2编程(Python):反序列化实现步骤概述导包、初始化ROS客户端、定义节点类、调用spin函数、释放资源。
节点类核心操作创建SequentialReader对象,配置存储和转换选项,通过循环读取消息。
数据读取与输出读取消息后,打印话题、时间戳和内容(二进制格式),使用get_logger输出信息。
与C++实现对比Python使用SequentialReader/Writer,需手动序列化/反序列化;C++通过模板读取指定类型消息,更简洁。06launch与rosbag2综合应用案例多节点启动与数据录制案例多节点启动配置(Pythonlaunch实现)创建Python格式launch文件,配置turtlesim_node(乌龟仿真节点)、rviz2(可视化节点),设置节点名称、命名空间及参数。示例代码通过Node对象定义节点属性,如turtlesim_node命名为"t1",rviz2加载指定配置文件。rosbag2录制话题数据在launch文件中集成rosbag2录制功能,指定录制话题(如/turtle1/cmd_vel速度指令),设置存储路径与格式。通过SequentialWriter对象创建话题元数据,订阅目标话题并将消息序列化写入"my_bag"目录。工具协同执行流程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 5G工业互联网平台
- 2026年产品发货情况通知函(4篇范文)
- 2026年零售业私有云促销活动资源预留方案
- 筑牢心理堤坝,预防心理疾病,小学主题班会课件
- 多模态大模型融合创新
- 小学教师语文教育课堂互动技巧提升手册
- 汽车售后服务质量监测手册
- 2026三年级诗词同课异构设计课件
- 2026年年终工作总结及新年计划汇报通知(4篇)
- 2026年遗传规律测试题及答案
- 医学26年:胆道出血诊疗要点解读 查房课件
- 2026宁夏水务集团有限公司社会化招聘5人笔试模拟试题及答案解析
- 介护2026特定技能考试全真模拟题库附答案解析
- 《内燃机 活塞环 第7部分:矩形铸铁环》
- 上清所登记托管结算业务培训参考试题
- 2025年商场突发事件应对培训
- 检验科保密制度培训
- 限额以下小型工程常见安全隐患指导手册(2026版)
- 超声造影技术在肝脏疾病中的应用
- 2026年军事基础理论知识考试题库及答案
- 二级医院技术服务项目目录
评论
0/150
提交评论