【ROS2】初级:客户端-编写一个简单的发布者和订阅者(Python)

目标:使用 Python 创建并运行一个发布者和订阅者节点。

 教程级别:初学者

 时间:20 分钟

 目录

  •  背景

  •  先决条件

  •  任务

    • 1. 创建一个包

    • 2. 编写发布者节点

    • 3. 编写订阅者节点

    • 4. 构建并运行

  •  摘要

  •  下一步

  •  相关内容

 背景

在本教程中,您将创建节点,这些节点通过主题相互传递字符串消息形式的信息。这里使用的示例是一个简单的“说话者”和“监听者”系统;一个节点发布数据,另一个节点订阅主题以便接收该数据。

这些示例中使用的代码可以在这里找到。

 先决条件

在之前的教程中,您学习了如何创建工作区和创建包。

建议具备基础的 Python 理解,但不是完全必需的。

 任务

1. 创建一个包

打开一个新的终端并且初始化您的 ROS 2 安装,这样 ros2 命令就会生效。

导航到在之前教程中创建的 ros2_ws 目录。

请记住,包应该在 src 目录中创建,而不是在工作区的根目录中。因此,请导航到 ros2_ws/src ,然后运行包创建命令:

cxy@ubuntu2404-cxy:~/ros2_ws/src$ ros2 pkg create --build-type ament_python --license Apache-2.0 py_pubsub
going to create a new package
package name: py_pubsub
destination directory: /home/cxy/ros2_ws/src
package format: 3
version: 0.0.0
description: TODO: Package description
maintainer: ['cxy <cxy@todo.todo>']
licenses: ['Apache-2.0']
build type: ament_python
dependencies: []
creating folder ./py_pubsub
creating ./py_pubsub/package.xml
creating source folder
creating folder ./py_pubsub/py_pubsub
creating ./py_pubsub/setup.py
creating ./py_pubsub/setup.cfg
creating folder ./py_pubsub/resource
creating ./py_pubsub/resource/py_pubsub
creating ./py_pubsub/py_pubsub/__init__.py
creating folder ./py_pubsub/test
creating ./py_pubsub/test/test_copyright.py
creating ./py_pubsub/test/test_flake8.py
creating ./py_pubsub/test/test_pep257.py

您的终端将返回一条消息,确认您的包 py_pubsub 及其所有必要的文件和文件夹已创建。

2. 编写发布者节点

导航到 ros2_ws/src/py_pubsub/py_pubsub 。请记住,这个目录是一个 Python 包,它的名称与其嵌套的 ROS 2 包的名称相同。

下载示例说话者代码,请输入以下命令:

cxy@ubuntu2404-cxy:~/ros2_ws/src/py_pubsub/py_pubsub$ wget https://raw.githubusercontent.com/ros2/examples/jazzy/rclpy/topics/minimal_publisher/examples_rclpy_minimal_publisher/publisher_member_function.py
--2024-07-06 11:23:35--  https://raw.githubusercontent.com/ros2/examples/jazzy/rclpy/topics/minimal_publisher/examples_rclpy_minimal_publisher/publisher_member_function.py
正在连接 127.0.0.1:2334... 已连接。
已发出 Proxy 请求,正在等待回应... 200 OK
长度:1576 (1.5K) [text/plain]
正在保存至: ‘publisher_member_function.py’


publisher_member_fu 100%[===================>]   1.54K  --.-KB/s    用时 0s    


2024-07-06 11:23:37 (6.48 MB/s) - 已保存 ‘publisher_member_function.py’ [1576/1576])

现在将有一个名为 publisher_member_function.py 的新文件与 __init__.py 相邻。

使用您喜欢的文本编辑器打开文件。

# 版权 2016 开源机器人基金会,公司。
#
# 根据 Apache 许可证,版本 2.0(“许可证”)许可;
# 除非符合许可证,否则不得使用此文件。
# 您可以在以下位置获取许可证副本:
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# 除非适用法律要求或书面同意,否则在许可证下分发的软件
# 将按“原样”基础分发,无任何明示或暗示的保证或条件。
# 请参阅许可证以了解管理权限和
# 许可证下的限制。


import rclpy  # 导入 ROS 客户端库
from rclpy.node import Node  # 从 rclpy.node 模块导入 Node 类


from std_msgs.msg import String  # 从 std_msgs.msg 模块导入 String 消息类型




class MinimalPublisher(Node):  # 定义一个名为 MinimalPublisher 的类,它继承自 Node 类


    def __init__(self):  # 定义类的初始化函数
        super().__init__('minimal_publisher')  # 调用父类(Node)的初始化函数,并设置节点名称为 'minimal_publisher'
        self.publisher_ = self.create_publisher(String, 'topic', 10)  # 创建一个发布者,消息类型为 String,主题名为 'topic',队列长度为 10
        timer_period = 0.5  # 设置定时器的时间间隔,单位为秒
        self.timer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值