ROS静态坐标转化

#! /usr/bin/env python

"""
    发布方: 发布两个坐标系的相对关系(车辆底盘 --- base_link 和 雷达 --- laser)
"""

import rospy
import tf2_ros
import tf
from geometry_msgs.msg import TransformStamped

if __name__ == "__main__":
     
    # 2. 初始化节点
    rospy.init_node("start_pub_p")
    # 3. 创建发布对象 头文件2
    pub = tf2_ros.StaticTransformBroadcaster()
    # 4. 组织被发布的数据 头文件4
    tfs = TransformStamped()
    # 4.1 header
    tfs.header.stamp = rospy.Time.now()
    tfs.header.frame_id = "base_link"
    # 4.2 child frame
    tfs.child_frame_id = "laser"
    # 4.3 相对关系(偏移 与 四元数)
    tfs.transform.translation.x = 0.2
    tfs.transform.translation.y = 0.0
    tfs.transform.translation.z = 0.5
    # 4.4 先从欧拉角转换成四元数 头文件3
    qtn = tf.transformations.quaternion_from_euler(0,0,0)
    # 4.5 再设置四元数
    tfs.transform.rotation.x = qtn[0]
    tfs.transform.rotation.y = qtn[1]
    tfs.transform.rotation.z = qtn[2]
    tfs.transform.rotation.w = qtn[3]

    # 5. 发布数据
    pub.sendTransform(tfs)
    # 6. spin()
    rospy.spin()
 


#! /usr/bin/env python
# encoding:utf-8
 
from ast import Try
import rospy
import tf2_ros
from tf2_geometry_msgs import tf2_geometry_msgs
# """
# 订阅方实现:订阅坐标变换信息,传入被转换的坐标点,调用转换算法
# """
 
if __name__ == "__main__":
 
    rospy.init_node("static_sub_p")
 
    buffer = tf2_ros.Buffer()
    sub = tf2_ros.transform_listener(buffer)
 
    ps = tf2_geometry_msgs.PointStamped()
    ps.header.stamp = rospy.Time.now()
    #参考的坐标系是雷达坐标系
    ps.header.frame_id = "laser"
    ps.point.x = 2.0
    ps.point.y = 3.0
    ps.point.z = 5.0

 
    rate = rospy.Rate(10)
    while not rospy.is_shutdown():
        try:
            ps_out  = buffer.transform(ps,"base_link")
            rospy.loginfo("转换后的坐标:(%.2f,%.2f,%.2f),当前参考的坐标系:%s",ps_out.point.x,ps_out.point.y,ps_out.point.z,ps_out.header.frame_id)
        except Exception as e:
            rospy.logwarn("%s",e)
        rate.sleep()
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vsropy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值