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 分钟前
Ubuntu 开启wifi 5G 热点
服务器·5g·ubuntu
音视频牛哥7 分钟前
智能平台的感知进化:AI × 视频通感在群体终端协同中的应用探索
人工智能·计算机视觉·音视频开发
小一亿16 分钟前
【0基础PS】PS工具详解--仿制图章工具
学习·平面·adobe·信息可视化·媒体·photoshop
所念皆为东辞23 分钟前
elk部署加日志收集
linux·elk·elasticsearch·centos
拓端研究室25 分钟前
专题:2025半导体行业研究报告:从AI芯片到封测突围的生死局|附40+份报告PDF、数据汇总下载
人工智能
百世修行28 分钟前
用 TensorFlow 1.x 快速找出两幅图的差异 —— 完整实战与逐行解析 -Python程序图片找不同
人工智能·python·tensorflow
TLucas35 分钟前
Centos 7部署.NET 8网站项目
linux·nginx·postgresql·centos·.net
lishaoan7735 分钟前
tensorflow目标分类:分绍(二)
人工智能·分类·tensorflow
W.KN3 小时前
机器学习【二】KNN
人工智能·机器学习
淮北4943 小时前
STL学习(十一、常用的算数算法和集合算法)
c++·vscode·学习·算法