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

相关推荐
进阶小白猿3 小时前
Java技术八股学习Day36
学习
学嵌入式的小杨同学3 小时前
从零打造 Linux 终端 MP3 播放器!用 C 语言实现音乐自由
linux·c语言·开发语言·前端·vscode·ci/cd·vim
EverydayJoy^v^3 小时前
RH134学习进程——十二.运行容器(1)
linux·运维·容器
syseptember3 小时前
Linux网络基础
linux·网络·arm开发
Niuguangshuo3 小时前
深入解析Stable Diffusion基石——潜在扩散模型(LDMs)
人工智能·计算机视觉·stable diffusion
迈火4 小时前
SD - Latent - Interposer:解锁Stable Diffusion潜在空间的创意工具
人工智能·gpt·计算机视觉·stable diffusion·aigc·语音识别·midjourney
wfeqhfxz25887824 小时前
YOLO13-C3k2-GhostDynamicConv烟雾检测算法实现与优化
人工智能·算法·计算机视觉
芝士爱知识a4 小时前
2026年AI面试软件推荐
人工智能·面试·职场和发展·大模型·ai教育·考公·智蛙面试
zl_dfq4 小时前
Linux 之 【多线程】(线程的概念、Linux中的线程、页表)
linux
Li emily4 小时前
解决港股实时行情数据 API 接入难题
人工智能·python·fastapi