一、编写话题发布文件
(1)在功能包目录下新建一个scripts文件夹用于存放python文件,在scripts文件夹下新建一个python文件,命名为demo01_pub_p.py,编写程序:
#! /sur/bin/env python
import rospy
from std_msgs.msg import String #发布的消息类型
"""
使用python实现消息发布:
1.导包
2.初始化ROS节点
3.创建发布者对象
4.编写发布逻辑并发布数据
"""
if __name__=="__main__":
#2.初始化ROS节点
rospy.init_node("fabuzhe02")
#3.创建发布者对象
pub = rospy.Publisher("huati02",String,queue_size=10)
#4.编写发布逻辑并发布数据
msg = String()
#指定发布频率
rate = rospy.Rate(1)
#设置计数器
count = 0
#使用循环发布数据
while not rospy.is_shutdown():
count += 1
msg.data = "hello" + str(count)
#发布数据
pub.publish(msg)
#日志输出
rospy.loginfo("发布的数据是:%s",msg.data)
#延迟一秒
rate.sleep()
(2)保存文件后,打开终端,输入指令赋予文件权限:
chmod +x *.py
(3)打开与功能包同级的CMake.Lists.text文件,去掉catkin_install_python一栏的注释,并修改文件名为自定义python文件文件名。
(4)保存后,按快捷键编译执行。
(5)配置环境,运行程序:
source ./devel/setup.bash
rosrun plumbing_pub_sub demo01_pub_p.py
话题内容成功打印在屏幕上,话题发布程序无问题。
二、编写话题订阅文件
(1)在scripts文件夹下新建一个Python文件命名为demo02_sub_p.py,编写订阅文件代码:
#! /sur/bin/env python
import rospy
from std_msgs.msg import String #发布的消息类型
"""
使用python实现消息订阅:
1.导包
2.初始化ROS节点
3.创建订阅者对象
4.编写回调函数处理数据
5.spin()
"""
def doMsg(msg):
rospy.loginfo("我订阅的数据:%s",msg.data)
if __name__=="__main__":
#2.初始化ROS节点
rospy.init_node("dingyuezhe02")
#3.创建订阅者对象
sub = rospy.Subscriber("huati02",String,doMsg,queue_size=10)
#4.编写回调函数处理数据
#5.spin()
rospy.spin()
(2)保存文件后,打开与功能包同级的CMake.Lists.text文件,修改文件名:
catkin_install_python(PROGRAMS
scripts/demo02_sub_p.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
(3)编译保存后,启动roscore核心,分别运行demo01_pub_p.py以及demo02_sub_p.py文件,结果如下:
运行成功,无报错。
三、节点通信
在ROS系统中,C++和Python之间可以进行话题通信,只需要话题名称相同即可。