Ros入门学习001——发布/订阅

Ros小海龟发布/订阅程序

思路:
1.节点间话题通讯分为:发布者(Publisher)和订阅者(Subscriber),发布者在话题(通道)中发布消息(message),订阅者接收话题中的消息,并执行回调函数。
2.发布者:初始化并定义节点–>创建并初始化发布者–>设置发布频率–>设置发布消息内容–>发布
3.订阅者:初始化并定义节点–>调用订阅函数–>调用循环(消息回调处理函数)–>运行回调函数

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import rospy
import time
import numpy as np
from geometry_msgs.msg import Twist
from turtlesim.msg import Pose
def circle(rate,publisher):
    # 定义并设置话题中的消息信息
    vel_msg = Twist()
    vel_msg.linear.x = 1
    vel_msg.angular.z =0.5
    publisher.publish(vel_msg)
    rate.sleep()
    # 发布者发布消息
def square(rate,publisher):
    msg_one=Twist()
    msg_two=Twist()
    msg_one.linear.x=4#m/s
    msg_two.angular.z=np.pi#rad/s
    publisher.publish(msg_one)
    rate.sleep()
    publisher.publish(msg_two)
    rate.sleep()
def velocity_publisher():
    #初始化节点
    rospy.init_node('velocity_publisher',anonymous=True)
    #创建发布者并初始化
    #发布话题名name of topic:/turtle1/cmd_vel
    #数据类型data_class:Twist
    #消息长度message lenth=10
    turtle_vel_pub=rospy.Publisher('/turtle1/cmd_vel',Twist,queue_size=10)
    #发布频率
    rate=rospy.Rate(2)#hz
    #循环发送
    while(not rospy.is_shutdown()):
        begin=time.time()
        #square(rate,turtle_vel_pub)
        circle(rate,turtle_vel_pub)
        end=time.time()
        print('Time:{0}'.format(end-begin))
#回调函数
def poseCallback(msg):
    print('pose_x:{0}  pose_y:{1}'.format(msg.x,msg.y))
def pose_subscriber():
    #节点初始化
    rospy.init_node('pose_subscriber',anonymous=True)
    #调用订阅函数
    rospy.Subscriber('/turtle1/pose',Pose,poseCallback)
    #消息回调处理函数(死循环)
    rospy.spin()
if __name__=='__main__':
    pose_subscriber()
    velocity_publisher()



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值