目录
- 0 专栏介绍
- 1 ROS2的启动脚本优化
- 2 ROS2多节点启动案例
- 2.1 C++架构
- 2.2 Python架构
- 3 其他格式的启动文件
- 3.1 `.yaml`启动
- 3.2 `.xml`启动
0 专栏介绍
本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。
🚀详情:《ROS2从入门到精通》
1 ROS2的启动脚本优化
在ROS从入门到精通1-3:ROS运行管理与常用配置文件中我们介绍到ROS1的.launch文件是待启动节点的管理容器,优化了多个节点的启动流程,其本质上是一个.xml文件。
在ROS2中,launch文件依然用于启动多个ROS节点以及它们之间的通信,不同在于:
-
组织架构:在ROS1中,
.launch文件使用.xml格式编写,定义了节点、参数、命名空间等信息,具有较为静态的结构;在ROS2中,launch文件使用Python编写,通过Python脚本的方式来启动节点和设置参数,因此可以编写复杂的逻辑,支持条件语句、循环等,提供了更高的扩展性和可定制性;
组织结构: -
启动速度:ROS1的
.launch文件在启动时可能会有一定的延迟,特别是在启动大型系统时;ROS2的launch文件相对更快速,启动时间更短,这得益于ROS2架构的一些优化。
总的来说,经过ROS2的启动脚本优化,使得系统的启动和管理更加便捷和高效,也更适合复杂系统的部署和管理。
2 ROS2多节点启动案例
实验目标:一次性启动以下节点:
turtlesim仿真器turtlesim生成节点
2.1 C++架构
文件结构如下所示
<pkg>
├── build
├── install
├── log
└── src
└── pkg_name
├── CMakeLists.txt
├── launch
├── package.xml
└── src
按以下步骤设置启动脚本
-
添加
package依赖关系:在package.xml清单文件中,添加对依赖项的声明<exec_depend>ros2launch</exec_depend> -
添加
CMakeLists编译信息:在CMakeLists.txt文件的ament_package()之前添加# Install launch files. install(DIRECTORY launch DESTINATION share/${PROJECT_NAME}/ )目的是把
launch目录添加到运行时的share文件夹 -
在
launch目录编写launch.py文件,本例为from launch import LaunchDescription from launch_ros.actions import Node def generate_launch_description(): return LaunchDescription([ Node( package='launch_lab', executable='launch_lab_client', ), Node( package='turtlesim', executable='turtlesim_node', name='turtle_sim', ), ])其中最关键的
Node对象用于在启动文件中定义一个节点。它的参数包括:package:<str>,表示节点所在的ROS2功能包的名称;executable:<str>,表示在给定包中的可执行文件的名称,在CMakeLists.txt中由install定义,在setup.py中由entry_points定义,详情请复习ROS2从入门到精通0-5:CMakeLists与setup.py编写(附常用配置文件语法);name:[str],用于指定节点的名称。如果未指定将使用可执行文件的名称;namespace:[str],用于指定节点的命名空间。命名空间是一种组织节点的方式,可以帮助避免节点名称的冲突;output:[str],用于指定节点的输出应该如何处理。例如,可以将其设置为screen,以便将节点的输出打印到屏幕上;parameters:[list],用于指定节点的ROS2参数。每个参数都是一个字典,其中包含参数的名称和值;remappings:[list],用于指定话题的重映射。每个重映射都是一个元组,其中包含原始主题的名称和新主题的名称;arguments:[list],用于指定传递给可执行文件的命令行参数。
-
运行
launch.py文件ros2 launch <pkg_name> <launch.py>

2.2 Python架构
文件结构如下所示
<pkg>
├── build
├── install
├── log
└── src
└── launch_lab_py
├── launch
├── launch_lab_py
├── package.xml
├── resource
├── setup.cfg
└── setup.py
按以下步骤设置启动脚本:
- 添加
setup.py安装信息:在setup.py文件的data_files入口添加
目的是把data_files=[ ('share/ament_index/resource_index/packages', ['resource/' + package_name]), ('share/' + package_name, ['package.xml']), (os.path.join('share', package_name, 'launch'), glob(os.path.join('launch', '*.launch.py'))), ],launch目录添加到运行时的share文件夹 - 在
launch目录编写launch.py文件,与2.1节相同 - 运行
launch.py文件ros2 launch <pkg_name> <launch.py>

3 其他格式的启动文件
ROS2也支持其他文件格式的启动方式,如下所示,对这些格式语法不熟悉的请看ROS2从入门到精通0-5:CMakeLists与setup.py编写(附常用配置文件语法)
3.1 .yaml启动
编写以下启动文件
launch:
- node:
pkg: launch_lab_py
exec: node_launch_client
name: launch_client_py
- node:
pkg: turtlesim
exec: turtlesim_node
name: turtle_sim
运行启动脚本
ros2 launch launch_lab_py launch_lab.launch.yaml
3.2 .xml启动
编写以下启动文件
<launch>
<node pkg="launch_lab_py" exec="node_launch_client" name="launch_client_py" />
<node pkg="turtlesim" exec="turtlesim_node" name="turtle_sim" />
</launch>
运行启动脚本
ros2 launch launch_lab_py launch_lab.launch.xml

完整代码通过下方博主名片联系获取
🔥 更多精彩专栏:
- 《ROS从入门到精通》
- 《Pytorch深度学习实战》
- 《机器学习强基计划》
- 《运动规划实战精讲》
- …



















