ROS的tf包中坐标变换的方法

2023-05-16

1、setRotation函数的参数

在坐标变换的时候常有这样的写法:
tfTutorialsAdding a frame (C++)

transform.setOrigin( tf::Vector3(0.0, 2.0, 0.0) );
transform.setRotation( tf::Quaternion(0, 0, 0, 1) );
br.sendTransform(tf::StampedTransform(transform,ros::Time::now(), "turtle1", "carrot1"));

这三句话分别做了以下工作:
1、设置carrot1在turtle1坐标系下的坐标原点
2、设置carrot1相对于turtle1的旋转角度,这里用四元数表示
3、发送变换信息
上面四元数表示旋转角度的方式不太直观,我们写代码的时候不想将旋转变换换算成四元数的时候可以采用如下方法写这个变换:

turtle_tf_ broadcaster.cpp

static tf::TransformBroadcaster br;
tf::Transform transform;
transform.setOrigin( tf::Vector3(msg->x, msg->y, 0.0) );
tf::Quaternion q;
q.setRPY(0, 0, msg->theta);
transform.setRotation(q);
br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "world", turtle_name));

这样通过这三句话就可以直接用RPY(分别对应绕XYZ轴旋转角度)来设置旋转变换了

tf::Quaternion q;
q.setRPY(0, 0, msg->theta);
transform.setRotation(q);

这里的msg->x, msg->y,msg->theta是解引用msg并获取该元素名为x(或者y,theta)的成员,相当于(*msg).x,(*msg).y,(*msg).theta

四元数的直观意义:
四元数 (x,y,z,w) 表示绕轴 (x0,y0,z0) 旋转 α 角度,他们之间的关系是: w=cos(α2) x=x0sin(α2) y=y0sin(α2) z=z0sin(α2)
在使用的时候往往将四元数归一化,即要求四元数的模为1:
x2+y2+z2+w2=1

2、 tf listener遇到的报错

[ERROR] [1397783547.530858724]: "turtle2" passed to lookupTransform argument target_frame does not exist.

根据教程写完turtle_tf_listener.cpp之后,用catkin_make命令编译,再在start_demo.launch文件里面添加这句

 <node pkg="learning_tf" type="turtle_tf_listener"
          name="listener" />

接下来运行

 $ roslaunch learning_tf start_demo.launch

程序出现两只乌龟,且一切正常,turtle2可以跟随turtle1,但是出现报错

[ERROR] [1397783547.530858724]: "turtle2" passed to lookupTransform argument target_frame does not exist.

可以按照如下代码修改turtle_tf_listener.cpp

tf::StampedTransform transform;
    try{
      listener.waitForTransform("/turtle2", "/turtle1", ros::Time(0), ros::Duration(3.0));
      listener.lookupTransform("/turtle2", "/turtle1",ros::Time(0), transform);
    }

就是在原本listener.lookupTransform函数的前面再加一行listener.waitForTransform(“/turtle2”, “/turtle1”, ros::Time(0), ros::Duration(3.0));报错就会消失。我在indigo下面运行到这里就正常了,没有接下来的问题。
注:如果按键只能控制一只乌龟,另外一只还在不停的从一边移动到另外一边,再将turtle_tf_broadcaster.cpp中的 “q.setRPY(msg->theta, 0, 0)” 改为 “q.setRPY(0, 0, msg->theta)”此时则没有错误了,按键能控制一只乌龟移动,另外一只会跟着这只乌龟的轨迹移动

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS的tf包中坐标变换的方法 的相关文章

  • 百分比透明度与16进制透明度的对应关系

    转载请注明出处 xff1a From 李诗雨 http blog csdn net cjm2484836553 article details 78025443 不诗意的女程序猿不是好厨师 最近又是对老项目各种修改 xff0c 这期间经常要
  • LiDAR 3 MEMS激光雷达

    与传统机械雷达相比 xff0c MEMS Micro Electro Mechanical Systems 激光雷达使用微型的MEMS mirror反射光线 xff0c 用微机电执行器代替电机 xff0c 有些厂商也称MEMS激光雷达为固态
  • Docker在CentOS上硬盘使用被占满的问题(备忘)

    摘录至 https github com yeasy docker practice blob master image rm md centosrhel 的用户需要注意的事项 在CentOS上 xff0c 遇到过这个问题 没有细究过 正好
  • ZooKeeper集群安装后无法启动ZooKeeper JMX enabled by default

    ZooKeeper做三节点集群 xff0c 启动后报错如下 xff1a root 64 centos conf zkServer sh start ZooKeeper JMX enabled by default Using config
  • Simulink建模:一阶滤波模型

    本文研究一阶滤波算法的Simulink模型及其代码生成 文章目录 1 一阶滤波算法2 Simulink建模2 1 对公式的理解2 2 建模过程2 3 模型配置 3 模型更新及代码生成3 1 模型更新3 2 代码生成 4 总结 1 一阶滤波算
  • CubeMX配置:FreeRTOS及串口配置

    本文通过CubeMX配置F103RCT6的FreeRTOS和串口 文章目录 1 引入2 配置过程2 1 配置时钟过程2 2 配置FreeRTOS过程2 3 配置串口过程 3 生成工程代码4 测试串口5 总结 1 引入 拿到一个STM32控制
  • Simulink建模:PID控制-串级PID

    本文研究串级PID控制的概念 应用场景以及Simulink模型实现 文章目录 1 问题引入2 串级PID控制3 Simulink建模3 1 建模前的理解3 2 建模过程3 3 代码生成 4 总结 1 问题引入 在之前的博客 Simulink
  • ROS导航中 的位姿描述

    转载出处 xff1a http blog csdn net u013453604 article details 47320237 补充 xff1a turtlebot包如果没有安装成功或者文件夹做了改动运行不起来需要重装就需要uninst
  • Git托管:将本地项目代码上传(push)到自己的Git repository

    首先下载并安装git版本控制软件 xff0c 我安装的是Git 1 9 2 preview20140411 xff0c 这里是我上传的有需要的可以download然后安装即可 http download csdn net detail u0
  • strstr函数用法小结

    strstr 函数原型 xff1a char strstr char str1 char str2 功能就是找出在字符串str1中第一次出项字符串str2的位置 也就是说字符串sr1中要包含有字符串str2 xff0c 找到就返回该字符串位
  • WebSphere宕机问题解决方法总结

    Websphere参数调整 涉及性能的参数 xff1a 1 数据源连接池连接数 2 线程池 xff1a default 参数 ORB THREAD POOL参数 Webcontainer 参数 3 jvm 堆最大最小值 xff0c 线程池调
  • 使用GreenDao存储list集合数据

    转载请注明出处 xff1a From李诗雨 http blog csdn net cjm2484836553 article details 78279493 不诗意的女程序猿不是好厨师 点击下载Demo源代码 xff1a 源码 不知道为什
  • catkin简析

    题记 xff1a 转载一篇catkin总结不错的原创 xff1a http blog csdn net zyh821351004 article details 50388429 catkin简析 catkin 编译支持传入cmake的宏定
  • Package name is not valid解决

    刚刚新建项目 xff0c 将com打成con xff0c 提示 Package name is not valid xff0c 在eclipse中有些单词不能命名
  • 路由器与交换机

    在工作中 xff0c 不管是办公上网还是设备调试 xff0c 经常都会用到路由器与交换机 xff0c 那他们二者的区别是什么呢 xff1f 笔者之前也没太搞明白 恰好出差周末闲来无事 xff0c 特来梳理一下并共享 xff0c 希望对那些跟
  • 用数据驱动思想来设计游戏

    游戏由两部分组成 xff0c 逻辑和数据 这是一种对游戏的有效划分 逻辑部分定义游戏引擎的核心原则和算法 xff0c 数据部分则提供其内容 和行为的具体细节 在最初的游戏开发的过程中 xff0c 大家总是喜欢将逻辑和数据都写入代码中 xff
  • 架构师之路:一个架构师需要掌握的知识技能

    Java团长 2017 04 15 21 30 没有设计的思想 xff0c 你就不能成为一名架构师 架构师是一个能撸的了一手好代码 xff0c 画的了一个漂亮的UML 原型 xff0c 写的了一篇技术文档 xff0c 更加能解决好项目关键技
  • 【Python】Windows下PyCharm安装Numpy包及无法安装问题解决方案

    step1 打开pycharm安装目录 xff0c 路径如下图 xff1a step2 在上个界面 xff0c 按 shift 43 右键 xff0c 打开命令窗口 xff0c 检查pip版本是否为最新 xff0c 如下图 xff1a st
  • 【python/tensorflow】pycharm 2019,python 3.6.2, win7 64bit系统,安装tensorflow出错,错误如下,解决办法给出!

    D aWork PycharmProjects Pro3 test venv Scripts python exe D aWork PycharmProjects Pro3 test test 1 py Traceback most rec
  • 【C++】基于 OpenCV 的人脸识别(强烈推荐)

    xfeff xfeff 原文网址 xff1a http www jianshu com p 96be2417cc98 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库 它包含成千上万优化过的算法 xff0c 为各种计算机视觉应

随机推荐

  • 【matlab】雷达截面积(Radar Cross Section,RCS)(MATLAB部分仿真+Code)

    xfeff xfeff 一 RCS定义 任何具有确定极化的电磁波照射到目标上时 xff0c 都会产生各个方向上的折射或散射 其中散射波分为两部分 xff1a 一 是由与接收天线具有相同极化的散射波组成 xff1b 二 是散射波具有不同的变化
  • 【Get深一度】自适应波束形成算法 之 算法篇【二】(Adaptive Beamforming Algorithm)

    神器镇楼 xff01 一 自适应波束形成阶段划分 xff1a 自适应阵列信号处理的概念最早由 Van Atta 于 20 世纪 60 年代末提出 本文总结了前30 年的研究成果 xff0c 将自适应阵列信号处理划分为三个阶段 xff1a 6
  • 使用adb指令往机顶盒上安装应用

    转载请注明出处 From李诗雨 https blog csdn net cjm2484836553 article details 82970881 不诗意的女程序猿不是好厨师 已有一个机顶盒端应用的apk 想通过adb指令将其安装到机顶盒
  • 多摄像机标定和去畸变

    Table of Contents xff11 kalibr多摄像机标定 1 1 系统安装 xff0c 环境配置 xff1a 实测Ubuntu 16 04 1 2 多摄像机标定 2 OpenCV双目标定 3 Matlab多摄像机标定 4 利
  • 【Get深一度】信号处理(三)——3db带宽

    1 3db带宽定义 3dB 带宽指幅值等于最大值的二分之根号二倍时对应的频带宽度 这个3分贝是多大呢 xff1f 由10log xff08 1 2 xff09 61 3 0103 xff0c 可知 xff0c 这时的输出功率是输入功率的1
  • Matlab中set-gca函数的使用

    Matlab坐标修改gca 1 坐标轴删除 set gca xtick 去掉x轴的刻度 set gca ytick 去掉y轴的刻度 set gca xtick ytick 同时去掉x轴和y轴的刻度 2 Matlab中 坐标轴刻度 的不同风格
  • 【matlab】函数meshgrid的用法详解(生成网格矩阵)和ndgrid的区别及用法

    meshgrid 函数用来生成网格矩阵 xff0c 可以是二维网格矩阵 exp1 1 生成 二维 网格 xff0c 用法为 xff1a x y 61 meshgrid a b a 和b是一维数组 xff0c 如a 61 1 2 3 b 61
  • 【matlab】./和/ .*和* 有什么区别

    matlab中 与 有什么区别 点运算是处理元素之间的运算直接 在矩阵计算中只能处理符合矩阵运算法则的运算矩阵计算和作图都是点运算在对数值计算时 xff0c 和 其实是没有区别的 例 xff1a 对于矩阵A 61 a b c d xff0c
  • 【matlab】 GMSK的调制与解调【附详尽注释】

    简介code 1 简介 MSK调制是调制指数为0 5的二元数字频率调制 xff0c 具有很好的特性 xff0c 如恒包络 相对窄的带宽 并可以相干检测 MSK 最小频移键控 信号在任一码元间隔内 xff0c 其相位变化为 2 xff0c 而
  • 【matlab】利用matlab在图形中绘制箭头、标注、圈圈 - 很帅很酷炫

    转载声明 xff1a 感谢 xff1a MyBear 尊重原作者劳动 xff1a http www 360doc com content 14 0527 21 1054746 381542462 shtml 一 二维箭头 1 xff0e 调
  • 【杂谈】甘于平凡?还是思索求生?

    前言 不觉然 xff0c 已19年 xff0c 不知不觉 xff0c 求学生涯至此告一段落 有感觉 xff0c 岁月的痕迹开始发酵 xff0c 身体抑或精神 xff0c 今不如往 思考下 xff0c 互联网浪潮之下 xff0c 之后 xff
  • 匈牙利算法-看这篇绝对就够了!

    本文讲述的是匈牙利算法 xff0c 即图论中寻找最大匹配的算法 xff0c 暂不考虑加权的最大匹配 xff08 用KM算法实现 xff09 xff0c 文章整体结构如下 xff1a 基础概念介绍 算法的实现 好的 xff0c 开始 xff0
  • 面试的一般流程及其常见的问题

    又是一年毕业季 xff0c 也要踏上求职之路 xff0c 在这段时间也关注很多求职方面的消息 下面是一些面试的一般流程及其常见的问题 xff1a 面试职位 xff1a XXXX 开始语 xff1a 你好 xff0c 首先祝贺你通过了前几个环
  • 构建库函数(STM32)

    一 定义外设的各基地址 xff0c 参考存储器映射 span class token comment 由存储器的映射可知 xff0c 片上外设基地址0x4000 0000 span span class token macro proper
  • PID控制器原理概述

    PID控制 PID概述 xff1a 控制框图 xff1a 增量式PID和位置式PID特点 xff1a PID控制参数整定口诀 xff1a 注 xff1a 本文部分内容摘自 先进PID控制MATLAB仿真 xff08 第4版 xff09 刘金
  • PyQt5 事件处理机制

    PyQt5 事件处理机制 PyQt为事件处理提供了两种机制 xff1a 高级的信号与槽机制 xff0c 以及低级的事件处理机制 信号与槽可以说是对事件处理机制的高级封装 常见事件类型 xff1a 键盘事件 xff1a 按键按下和松开 鼠标事
  • PyQt5 实现串口接数据波形显示工具

    PyQt5 实现串口接数据波形显示工具 工具简述主程序代码Qt Designer设计UI界面程序运行效果 工具简述 基于PyQt5开发UI界面使用QtDesigner设计 xff0c 需要使用到serial模块 xff08 串口库 xff0
  • ROS CMakeLists.txt的编写学习

    调用ROS中的函数 xff0c cmakelists的编写学习过程 如有错误 xff0c 请留言指教 多谢 A 首先要了解的 CMakeLists txt是CMake的构建系统构建软件包的输入文件 任何兼容的CMake都包含了描述如何构建代
  • 【Node】Buffer 与 Stream

    node 为什么会出现 Buffer 这个模块 在最初的时候 xff0c JavaScript 只运行在浏览器端 xff0c 对于处理 Unicode 编码的字符串很容易 xff0c 但是对于处理二进制以及非 Unicode 编码的数据便无
  • ROS的tf包中坐标变换的方法

    1 setRotation函数的参数 在坐标变换的时候常有这样的写法 xff1a tfTutorialsAdding a frame C 43 43 transform setOrigin span class hljs symbol tf