P186静态坐标变换 python 发布方(发布两个坐标系相对关系)

1.代码 

#! /usr/bin/env python

# 1.导包
import rospy
import tf.transformations
import tf2_ros
import tf
from geometry_msgs.msg import TransformStamped

""" 
    发布方:发布两个坐标系的相对关系(车辆底盘--base_link 和 雷达--laser
    流程:
        1.导包
        2.初始化节点
        3.创建发布者对象
        4.组织被发布的数据
        5.发布数据
        6.spin()
        #若不添加spin(),节点发布完,直接结束了。它的作用是启动一个 ROS 节点的事件处理循环,等待相应回调函数的触发
 """




if __name__ == "__main__":
    # 2.初始化 ROS 节点
    rospy.init_node("static_pub_p")
    # 3.创建发布对象  静态坐标广播器
    pub = tf2_ros.StaticTransformBroadcaster()#需要导包tf2_ros
    # 4.创建并组织被发布的消息
    #消息是geometry_msgs/TransformStamped,需要导包geometry_msgs.msg
    ts = TransformStamped()
    #消息格式见5.1.1
    # --- 头信息
    # header
    #tf.header.seq = 101#seq序列号可不用设置
    ts.header.stamp = rospy.Time.now()
    ts.header.frame_id = "base_link"#父坐标系
    
    # --- 子坐标系
    #child frame
    ts.child_frame_id = "laser"
    # --- 坐标系相对信息
    # ------ 偏移量(子坐标系相对父坐标系,在xyz轴上的偏移量)
    ts.transform.translation.x = 0.2
    ts.transform.translation.y = 0.0
    ts.transform.translation.z = 0.5
    # ------ 四元数
    #子坐标系相对父坐标线上,角度的偏移;翻滚x,俯仰y,偏航z
    #一般不直接设置四元数,先设置欧拉角(本次雷达相对小车均为0),再转换为四元数(此时xyz均为0,w=1)
    #需要导包tf
    qtn = tf.transformations.quaternion_from_euler(0,0,0)#从欧拉角获取四元数
    ts.transform.rotation.x = qtn[0]
    ts.transform.rotation.y = qtn[1]
    ts.transform.rotation.z = qtn[2]
    ts.transform.rotation.w = qtn[3]

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

 2.发布的数据 geometry_msgs/TransformStamped

 格式如下

表1

std_msgs/Header header                     #头信息

  uint32 seq                                #|-- 序列号  #可不用设置

  time stamp                                #|-- 时间戳

  string frame_id                            #|-- 坐标 ID(被参考坐标系)

string child_frame_id                    #子坐标系的 id

geometry_msgs/Transform transform        #坐标信息

  geometry_msgs/Vector3 translation        #偏移量(两个坐标系在xyz三个轴的偏移量)

    float64 x                                #|-- X 方向的偏移量

    float64 y                                #|-- Y 方向的偏移量

    float64 z                                #|-- Z 方向上的偏移量

  geometry_msgs/Quaternion rotation        #四元数(子坐标系相对父坐标线上,角度的偏移;翻滚,俯仰,偏航)(不直接设置四元数,先设置欧拉角(本次雷达相对小车均为0),再转换为四元数(此时xyz均为0,w=1),需要导包tf,)

    float64 x                                

    float64 y                                

    float64 z                                

    float64 w

3. 运行

 先启动roscore,刷新环境变量,rosrun   .py文件

 1)获取当前话题相关消息

 

 

获取当前话题的相关信息

消息类型

发布者信息

订阅者信息

消息类型  Type: tf2_msgs/TFMessage

订阅者有两个:1)rostopic echo /tf_static  ;2)rviz(两种查看发布消息的方式)

rostopic type /tf_static  打印该话题的消息类型

rosmsg info tf2_msgs/TFMessage   显示该消息类型的描述信息

2)两种查看发布消息的方式

(1)查看方式1  rostopic echo /tf_static

打印(echo)tf_static话题发布的消息

(注意:本次未设置话题,是tf2函数自带的,tf_static是tf2包的一部分,用于发布静态变换。)

该方式不适合查看动态消息发布,因为会不断刷新,导致在屏幕上不容易观察。

(2)查看方式2  Rviz

红色x,绿色y,蓝色z,

显示了laser相对于base_link的位置关系

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值