学习大纲:

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

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
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