封装动态坐标系的相对位置发布

需求

将动态坐标系的发布,进行封装,传入参数:话题、parent_link、child_link

代码实现

#! usr/bin/env python

import rospy
import tf.transformations
from turtlesim.msg import Pose
from geometry_msgs.msg import TransformStamped
import tf
import tf2_ros
import sys
'''

    封装:传入话题、两个坐标系的名称
    需求:订阅小乌龟位置信息的话题,在回调函数中,发布小乌龟的位置信息
    步骤:
        1.导包
        2.初始化ros节点
        3.创建订阅者对象
        4.回调函数
        5.spin()

'''
pose_topic_name = sys.argv[1]
parent_link = sys.argv[2]
child_link = sys.argv[3]

def pub_callback(msg):
    #获取小乌龟的位置信息
    '''
    float32 x
    float32 y
    float32 theta
    float32 linear_velocity
    float32 angular_velocity
    '''

    rospy.loginfo("乌龟的位置信息:(%.2f,%.2f)",msg.x,msg.y)

    #有了两个坐标系之间的相对关系,转化成标准格式
    transform_msg = TransformStamped()
    '''
    std_msgs/Header header
        uint32 seq
        time stamp
        string frame_id
    string child_frame_id
    geometry_msgs/Transform transform
    geometry_msgs/Vector3 translation
        float64 x
        float64 y
        float64 z
    geometry_msgs/Quaternion rotation
        float64 x
        float64 y
        float64 z
        float64 w

    '''
    #---------header-----------------
    transform_msg.header.frame_id = parent_link
    transform_msg.header.stamp = rospy.Time.now()
    #---------child_frame_id-----------------
    transform_msg.child_frame_id = child_link
    #---------位置坐标系之间转化的坐标点,设置偏移量-----------------
    transform_msg.transform.translation.x = msg.x
    transform_msg.transform.translation.y = msg.y
    transform_msg.transform.translation.z = 0.0
    #---------四元数的转化----------------
    qtn = tf.transformations.quaternion_from_euler(0,0,msg.theta)
    transform_msg.transform.rotation.x = qtn[0]
    transform_msg.transform.rotation.y = qtn[1]
    transform_msg.transform.rotation.z = qtn[2]
    transform_msg.transform.rotation.w = qtn[3]

    #采用广播发布
    broadcaster = tf2_ros.TransformBroadcaster()
    broadcaster.sendTransform(transform_msg)






if __name__ == "__main__":
    
    #节点初始化
    rospy.init_node('tf_optimistic')

    #创建订阅者对象
    sub = rospy.Subscriber(pose_topic_name, Pose, pub_callback,queue_size=10)

    #编写回调函数

    #挂起,等待消息来临
    rospy.spin()
    

结果:
在这里插入图片描述

总结

关键API

import sys
sys.args:是获取命令中的数据,以列表形式进行的保存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值