【ROS2笔记八】ROS2编写Python launch 文件

2024-04-24 17:28
文章标签 python 笔记 编写 launch ros2

本文主要是介绍【ROS2笔记八】ROS2编写Python launch 文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【ROS2笔记八】ROS2编写Python launch 文件

文章目录

  • 【ROS2笔记八】ROS2编写Python launch 文件
    • 1.创建功能包和launch文件
    • 2.编写Python的launch文件
    • 3.将launch文件拷贝到工作空间下
    • 4.编译与测试
    • Reference

在ROS2中launch文件有三种格式,pythonmxlyaml。其中ROS2官方推荐使用python来编写launch文件,原因在于python是一种编程语言,更加灵活,可以完成许多别的特性。这里主要介绍如何使用python来编写launch文件。

1.创建功能包和launch文件

在这里我们使用前面教程中(【ROS2笔记五】ROS2服务通信)已经创建好的工作空间colcon_test03_ws和功能包example_service_rclcpp作为基础。

首先我们新建一个功能包用于存放launch文件

cd ~/colcon_test03_ws/src
ros2 pkg create robot_startup --build-type ament_cmake

然后新建一个launch目录,接着touch一个launch.py文件

mkdir -p src/robot_startup/launch
touch src/robot_startup/launch/example_start.launch.py

2.编写Python的launch文件

首先,我们需要import两个库,分别用于对launch文件内容进行描述和声明节点的位置

# 导入库
from launch import LaunchDescription
from launch_ros.actions import Nodedef generate_launch_description():"""launch内容描述函数,由ros2 launch 扫描调用"""node1 = Node(package="example_service_rclcpp",executable="service_server_01")node2 = Node(package="example_service_rclcpp",executable="service_client_01")# 创建LaunchDescription对象launch_description,用于描述launch文件launch_description = LaunchDescription([node1, node2])# 返回让ROS2根据launch描述执行节点return launch_description

注意,这里函数的名字必须为generate_launch_description,ROS2会对该函数的名字进行识别。

3.将launch文件拷贝到工作空间下

我们需要配置CMakeLists.txt来让这个功能包robot_startup中的launch文件拷贝到工作空间colcon_test03_ws中的install目录中,我们使用的是ament_camke类型的功能包,所以这里直接配置CMakeListst.txt来进行拷贝。

CMakeLists.txt

...# a copyright and license is added to all source filesset(ament_cmake_cpplint_FOUND TRUE)ament_lint_auto_find_test_dependencies()
endif()# >>> add these tow lines <<<
install(DIRECTORY launchDESTINATION share/${PROJECT_NAME})ament_package()

因为我们这里启动了别的功能包example_service_rclcpp的节点,所以需要将别的功能包也添加到搜索路径中

CMakeLists.txt

# find dependencies
find_package(ament_cmake REQUIRED)
# >>> add this line <<<
find_package(example_service_rclcpp REQUIRED)
# uncomment the following section in order to fill in
# further dependencies manually.
# find_package(<dependency> REQUIRED)

package.xml

<buildtool_depend>ament_cmake</buildtool_depend>
<!-- >>> add this line <<< -->
<depend>example_service_rclcpp</depend><test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>

4.编译与测试

然后我们就能够进行编译了,

cd ~/colcon_test03_ws
colcon build --packages-select robot_startup

等待编译完成,我们可以在colcon_test03_ws/launch/robot_startup/share目录下看到拷贝过去的.launch.py文件,然后我们直接可以启动launch文件了

source install/setup.bash
ros2 launch robot_startup example_startup.launch.py 

运行的结果如下:

sjh@sjh:~/colcon_test03_ws$ ros2 launch robot_startup example_start.launch.py 
[INFO] [launch]: All log files can be found below /home/sjh/.ros/log/2024-04-23-09-48-15-916564-tclsjh-343849
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [service_server_01-1]: process started with pid [343857]
[INFO] [service_client_01-2]: process started with pid [343859]
[service_server_01-1] [INFO] [1713836896.557137503] [service_server_01]: Node: service_server_01 has been launched
[service_client_01-2] [INFO] [1713836896.557686664] [service_client_01]: Node: service_client_01 has been launched
[service_client_01-2] [INFO] [1713836896.560214629] [service_client_01]: Calculate 5 + 6 + 7
[service_server_01-1] [INFO] [1713836896.561889115] [service_server_01]: Recieve a: 5 b: 6 c: 7
[service_client_01-2] [INFO] [1713836896.562288840] [service_client_01]: Result: 18

可以看到,我们成功启动了两个节点。

Reference

[1]d2lros2

[2]Creating a launch file

这篇关于【ROS2笔记八】ROS2编写Python launch 文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/932367

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',