3 通过话题(Topics)通讯

 

话题(topic)是ROS各个节点(即各个程序)之间进行通讯的载体,其上承载了消息(message)。而ROS各类库(如std_msgs.msg、geometry_msgs.msg)中已定义了常用的消息类型。如在自己的项目中需要定制特定的消息也可,将在后续课程中讲授。

3.1 建立一个ROS包

 

使用ROS的方法在前二章已讲授,即建立一个catkin空间,然后在catkin空间中建立若干功能包。在此简单回顾,建立catkin空间三步骤如下(假设%为Ubuntu中提示符)。

 

   % mkdir -p ~/catkin_ws/src

   % cd ~/catkin_ws/src

   % catkin_init_workspace

 

此处,catkin_ws为catkin空间名,可以取任何名字为catkin空间名。运行完初始化catkin空间的命令后,在~/catkin_ws/src目录中将会看到一个新的名为CMakeLists.txt文件,供catkin_make编译空间时使用。

 

在catkin空间内,有二个方法可以创建一个ROS功能包。如果在github中已有第三方ROS功能包,可直接将其提取到caktin空间中,经编译后使用即可,本章稍后使用此法。前二章也介绍了如何创建一个新的功能包,下面介绍自建一个发布/接收简单消息的功能包。

 

   % catkin_create_pkg beginner_tutorials rospy roscpp std_msgs

 

此命令将在 ~/catkin_ws/src 子目录中创建一个名为 beginner_tutorial 的功能包,该功能包有三个依赖项,分别为rospy, roscpp和std_msgs三个客户端库,提供了丰富的API供编程使用。运行该命令后,将在 ~/catkin_ws/src 子目录中看到新的名为 CMakeLists.txt 和 package.xml 二个文件,此二个文件中有若干被注释掉的行,将在以后创建服务(service)和行动(action)等时用到。目前,可关注到,命令行中的三个依赖项已经自动写在文件中。此时,一个空白的功能包创建完成,已可退至 ~/catkin_ws 空间编译此空白功能包。

 

   % cd ..

   % catkin_make

 

3.2 话题发布

 

在新创建的功能包内编写Python程序。

 

   % cd ~/catkin_ws/src/beginner_tutorials

   % mkdir scripts

   % cd scripts

   % gedit talker.py

 

https://github.com/Zhijun2/roslab0/blob/master/scripts/talker.py, 将此链接的程序拷贝黏贴在publisher.py写字板中并存储, 退出gedit。

 

将publisher.py的属性改成可执行文件。

 

   % chmod +x talker.py

 

此后即可编译执行发布程序。

 

   % cd ~/catkin_ws

   % catkin_make

   % source ./devel/setup.bash

   % roscore

 

同时按下三键 Ctrl + Alt + t, 打开一个新终端。

 

   % source ~/catkin_ws/devel/setup.bash

   % rosrun beginner_tutorials talker.py

 

此刻,发布节点已经运行,发布了一个名为 /chatter 的话题,可通过如下命令查看。

 

   % rostopic list 

 

3.3 话题接收

 

同时按下三键 Ctrl + Alt + t, 打开一个新终端,

 

   % source ~/catkin_ws/devel/setup.bash

   % roscd beginner_tutorials

   % gedit listener.py

 

https://github.com/Zhijun2/roslab0/blob/master/scripts/listener.py, 将此链接的程序拷贝黏贴在listener.py写字板中并存储, 退出gedit。

 

将listener.py的属性改成可执行文件。

 

   % chmod +x listener.py

 

此后即可编译执行接收程序。

 

   % cd ~/catkin_ws

   % catkin_make

   % source ./devel/setup.bash

   % rosrun beginner_tutorials listener.py

 

此刻,发布节点仍在运行,通过上面的接收节点运行命令,可看到接收节点收到了话题。打开一个新终端,通过如下命令可看到节点和话题状态。

 

   % source ~/catkin_ws/devel/setup.bash

   % rqt_graph 

 

3.4 标准和常用消息(messages)

 

3.4.1 标准消息

 

标准消息 (std_msgs) 包含代表基本数据种类和基本消息结构(如多维数组)的常用消息种类。其组成如下。

  • Bool
  • Byte
  • ByteMultiArray
  • Char
  • ColorRGBA
  • Duration
  • Empty
  • Float32
  • Float32MultiArray
  • Float64
  • Float64MultiArray
  • HeaderCheck your run_id folder and browse the rosout.log file
  • Int16
  • Int16MultiArray
  • Int32
  • Int32MultiArray
  • Int64
  • Int64MultiArray
  • Int8
  • Int8MultiArray
  • MultiArrayDimension
  • MultiArrayLayout
  • String
  • Time
  • UInt16
  • UInt16MultiArray
  • UInt32
  • UInt32MultiArray
  • UInt64
  • UInt64MultiArray
  • UInt8
  • UInt8MultiArray

小练习:以下命令使用rqt工具浏览消息种类。

   % rqt -s rqt_msg

 

3.4.2 常用消息

 

常用消息 (common_msgs) 包括被ROS功能包所常用的消息类型,例如:

同样可用rqt工具查看。

 

练习题

 

新建一个catkin空间,取得一个发布/接收功能包 https://github.com/Zhijun2/roslab0.git, 编译运行。然后执行以下任务:修改发布频率和发布内容,编译运行观察效果;采用rqt_graph观察节点与消息关系 (参考以下NOTE步骤)。

 

NOTE:  可尝试第二种方法,即从github下载使用第三方功能包,如发布/接收话题的例子。关闭所有打开的终端,新开一个终端,执行如下命令 。

 

   % cd ~/catkin_ws/src

   % git clone https://github.com/Zhijun2/roslab0.git

   % cd roslab0/scripts

   % chmod +x *.py

   % cd ~/catkin_ws

   % catkin_make

   % source ./devel/setup.bash

   % roslaunch roslab0 talker_listener.launch

 

另外打开一个终端,执行可视化命令:

   % rosrun rqt_graph rqt_graph

 

 

课后作业

 

1. 请下载练习题

 

2. 复习本周学习的知识,重点理解:

  • 如何用Python编写简单的话题发送和接收节点
  • 如何用ROS工具查看消息和节点信息

   

如你需要编程能力补充练习:

 

选择下面的视频,利用这几天时间补强你的Python编程技术(需要领英账户,英文版本全免费,中文版本需要付费或注册试用账户免费学习):

 

英文版本:https://www.linkedin.com/learning/learning-python-2/

中文版本:https://www.linkedin.com/learning/learning-python-the-basics/2315461?u=42408908

 

二个版本的参考练习题可在此下载