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) 包含代表基本数据种类和基本消息结构(如多维数组)的常用消息种类。其组成如下。
小练习:以下命令使用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
如你需要编程能力补充练习:
选择下面的视频,利用这几天时间补强你的Python编程技术(需要领英账户,英文版本全免费,中文版本需要付费或注册试用账户免费学习):
英文版本:https://www.linkedin.com/learning/learning-python-2/
中文版本:https://www.linkedin.com/learning/learning-python-the-basics/2315461?u=42408908
二个版本的参考练习题可在此下载。