Python编码不需要修改makefile文件,脚本语言,直接执行。
代码解释
- talker.py
#!/usr/bin/env python #调用的是python2.7编译器
import rospy
from std_msgs.msg import String
def talker():
pub = rospy.Publisher('chatter', String, queue_size=10)
#Publisher函数创建发布节点(topic名‘chatter’,消息类型String,queue_size发布消息缓冲区大小都是未被接收走的)
rospy.init_node('talker', anonymous=True)
#启动节点talker,同时为节点命名,若anoymous为真则节点会自动补充名字,实际名字以talker_322345等表示,
#若为假,则系统不会补充名字,采用用户命名。如果有重名,则最新启动的节点会注销掉之前的同名节点
rate = rospy.Rate(10) # 10hz
#延时的时间变量赋值,通过rate.sleep()实现延时
while not rospy.is_shutdown():
# 判定开始方式,循环发送,以服务程序跳出为终止点 一般ctrl+c也可
hello_str = "hello world %s" % rospy.get_time()
# 数据变量的内容 rospy.get_time() 是指ros系统时间,精确到0.01s
rospy.loginfo(hello_str)
#在运行的terminal界面info 出信息,可不加,可随意改
pub.publish(hello_str)
#发布数据 必须发布
rate.sleep()
# 按rospy.Rate()设置的速率延迟
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
- listener.py
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def callback(data):
rospy.loginfo(rospy.get_caller_id() + 'I heard %s', data.data)
#回调函数 收到的参数.data是通信的数据 默认通过这样的 def callback(data) 取出data.data数据
def listener():
# In ROS, nodes are uniquely named. If two nodes with the same
# name are launched, the previous one is kicked off. The
# anonymous=True flag means that rospy will choose a unique
# name for our 'listener' node so that multiple listeners can
# run simultaneously.
rospy.init_node('listener', anonymous=True)
#启动节点并同时为节点命名
rospy.Subscriber('chatter', String, callback)
#启动订阅,订阅主题‘chatter’,及标准字符串格式,同时调用回调函数,当有数据时调用函数,取出数据
# spin() simply keeps python from exiting until this node is stopped
rospy.spin()
if __name__ == '__main__':
listener()