1.1 Beginner Level学习之“编写简单的发布服务器和订阅服务器”(第十二节)

学习大纲:

1. 编写发布服务器节点

在ROS中,**节点(Node)**是与ROS网络通信的基本单位。在这个部分,我们将创建一个简单的发布节点(talker),它会不断向话题(topic)广播消息。

创建ROS包

首先,我要确保我的工作空间结构正确。我创建的工作空间在~/catkin_ws目录下,所以我需要先创建beginner_tutorials包:

cd ~/catkin_ws/src

catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

编写发布节点

接下来,我们进入beginner_tutorials包并创建一个scripts目录来存放Python脚本:

cd ~/catkin_ws/src/beginner_tutorials

mkdir scripts

cd scripts

然后,我下载示例代码文件talker.py并将其设为可执行:

wget

​​​​​​https://raw.github.com/ros/ros_tutorials/kinetic-devel/rospy_tutorials/001_talker_listener/talker.py

chmod +x talker.py

代码解释

#!/usr/bin/env python:

确保Python解释器执行该脚本。

导入ROS模块:我们需要rospy模块来编写ROS节点,同时需要String消息类型来发布字符串消息。

创建发布者:

Publisher()声明了该节点会发布消息到名为chatter的话题上。

init_node()初始化节点,并设置名称为talker。

anonymous=True确保每次运行的节点名唯一。

循环发布消息:

这个循环会每秒10次发布消息,直到节点关闭。

2. 写入订阅节点

接下来,我会创建一个简单的**订阅节点(listener)**来接收发布节点发送的消息。

进入scripts目录并下载listener.py代码:

cd ~/catkin_ws/src/beginner_tutorials/scripts

wget https://raw.github.com/ros/ros_tutorials/kinetic-devel/rospy_tutorials/001_talker_listener/listener.py

chmod +x listener.py

代码解释

创建订阅节点:

这个节点订阅了chatter话题,并调用回调函数callback()来处理接收到的消息。

回调函数处理消息:

当接收到消息时,callback()会打印消息内容。

保持节点运行:rospy.spin()

该函数会保持节点运行,直到节点被手动关闭。

3. 构建并运行节点

编译ROS工作空间

我们需要回到工作空间的根目录并运行catkin_make来构建工作空间:

cd ~/catkin_ws

catkin_make

然后刷新环境:source devel/setup.bash

运行发布节点和订阅节点

在两个终端窗口中分别运行发布和订阅节点:

终端 1(运行发布节点):rosrun beginner_tutorials talker.py

终端 2(运行订阅节点):rosrun beginner_tutorials listener.py

如果一切正常,订阅节点会在终端中显示类似以下内容:

/listener_12345 I heard hello world 1697812456.12

相关推荐
无奈笑天下2 小时前
银河麒麟上nproc命令教程详解
linux·运维·服务器
泯泷3 小时前
让 Agent 分清“马上办、等一等、顺手办”
人工智能·llm·agent
鲜于言悠9054 小时前
Claude Fable 5.2 登场,专治复杂推理与长任务
人工智能
联犀5 小时前
如何工程化降低语音交互AI设备的延迟(小智ai,芙崽这样的ai设备)
人工智能
杉岩数据5 小时前
杉岩数据董事长陈坚:从数据存储到行业智能——杉岩的AI时代战略布局
人工智能
冬奇Lab5 小时前
Loop 工程到底是高深的新技术,还是炒冷饭?用训练一个识别狗的模型讲明白
人工智能
冬奇Lab5 小时前
一天一个开源项目(第260篇):Plannotator —— 给 AI 编码 Agent 配一块「可批注的审阅台」,计划和代码改动都能在浏览器里逐条批示
人工智能·开源·claude
泯泷5 小时前
语音,正在成为 AI Agent 最自然的接口
人工智能·llm·agent
Rabitebla5 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
Gary移动存储固件6 小时前
eMMC5.1协议中文学习讲解(6.6.17~6.6.22.4.6)
学习·ufs·emmc·nand·存储固件