ROS话题通信的理论查阅ROS话题通信流程理论
ROS话题通信的自定义数据的准备可以查阅ROS话题通信流程自定义数据格式
在ROS话题通信机制实现中,ROS master 不需要实现,且连接的建立也已经被封装了,需要关注的关键点有三个:
- 发布方(二狗子)
- 订阅方(翠花)
- 数据(此处为普通文本)
创建ROS工程
创建一个ROS工程包括以下几个步骤:
- 创建一个
topic_ws
的ROS工作空间 - 启动VScode
- VScode 编译ROS
- 创建ROS功能包
- 在功能包下创建一个
scripts
文件
详细操作可以查阅VScode创建ROS项目 ROS集成开发环境
VScode配置
为了方便代码提示以及误抛异常,需要先配置 vscode,将前面自定义数据格式生成的 python 文件路径配置进 settings.json
发布方(二狗子)
-
基本流程
- 1.包含头文件
- 2.初始化 ROS 节点:命名(唯一)
- 3.实例化 发布者 对象
- 4.组织被发布的数据,并编写逻辑发布数据
-
代码实现
#! /usr/bin/env python3 import rospy from plumbing_pub_sub.msg import Person """ 实现流程: 1.导包 2.初始化 ROS 节点:命名(唯一) 3.实例化 发布者 对象 4.组织被发布的数据,并编写逻辑发布数据 """ if __name__ == "__main__": #2.初始化 ROS 节点:命名(唯一) rospy.init_node("banZzhuRen") #3.实例化 发布者 对象 pub = rospy.Publisher("liaoTian", Person, queue_size=10) #4.组织被发布的数据,并编写逻辑发布数据 p = Person() p.name = "ZhangSan" p.age = 24 p.height = 1.75 # 设置循环频率 rate = rospy.Rate(1) rospy.sleep(3) # 休眠3s等待 publisher 注册完成,不然订阅者读不到第一条消息 while not rospy.is_shutdown(): # 发布数据 pub.publish(p) rate.sleep() rospy.loginfo("姓名:%s, 年龄:%d, 身高:%.2f",p.name, p.age, p.height)
-
添加可执行权限
进入到scripts文件下,打开Terminal,执行chmod +x *.py
对demo_pub_person_p.py文件添加可执行的权限
-
验证是否存在问题
-
编辑配置文件
修改plumbing_pub_sub
功能包下的CMakeLists.txt,找到catkin_install_python
,修改成如图所示:
-
按快捷键
ctrl + shift + B
编译 -
开启一个Terminal,运行 roscore 命令;再开启一个新的Terminal,运行
source ./devel/setup.bash rosrun plumbing_pub_sub demo_pub_person_p.py
;再开启一个Terminal,运行rostopic echo liaoTian,查看订阅数据
-
订阅方(翠花)
-
基本流程
- 1.包含头文件
- 2.初始化 ROS 节点:命名(唯一)
- 3.实例化 订阅者 对象
- 4.处理订阅的消息(回调函数)
- 5.设置循环调用回调函数
-
代码实现
#! /usr/bin/env python3 import rospy from std_msgs.msg import String """ 实现流程: 1.导包 2.初始化 ROS 节点:命名(唯一) 3.实例化 订阅者 对象 4.处理订阅的消息(回调函数) 5.设置循环调用回调函数 """ def doMsg(msg): rospy.loginfo("订阅到的数据是:%s", msg.data) if __name__ == "__main__": #2.初始化 ROS 节点:命名(唯一) rospy.init_node("cuiHua") #3.实例化 订阅者 对象 sub = rospy.Subscriber("fang", String, doMsg, queue_size=10) #4.处理订阅的消息(回调函数) #5.设置循环调用回调函数 rospy.spin()
-
添加可执行权限
进入到scripts文件下,打开Terminal,执行chmod +x *.py
对demo_sub_person_p.py文件添加可执行的权限
发布方、订阅方声明的话题必须一致,案例中的话题是 liaoTian
编辑配置文件
修改 plumbing_pub_sub
功能包下的CMakeLists.txt,找到同时复制一个catkin_install_python
,修改成如图所示
编译并执行
-
按快捷键
ctrl + shift + B
编译
-
执行代码
-
1.启动 roscore;
开启一个Terminal,启动 roscore
-
2.启动发布节点;
开启一个新的Terminalcd topic_ws/ source ./devel/setup.bash rosrun plumbing_pub_sub demo_pub_person_p.py
-
3.启动订阅节点。
cd topic_ws/ source ./devel/setup.bash rosrun plumbing_pub_sub demo_sub_person_p.py
-
计算图查看Python话题机制节点
开启一个Terminal,运行 roscore 命令;再开启一个新的Terminal,运行source ./devel/setup.bash rosrun plumbing_pub_sub demo_pub_person_p.py
;再开启一个Terminal,运行rosrun plumbing_pub_sub demo_sub_person_p.py
,查看订阅数据;再开启一个Terminal,运行 rqt_graph
计算图如图所示: