ROS TF2当前坐标系如何计算其它历史坐标系的坐标变换

简介: ROS TF2当前坐标系如何计算其它历史坐标系的坐标变换

本教程教您有关tf2的高级功能:
TF2当前坐标系如何计算其它历史坐标系的坐标变换

在上一教程中,介绍了tf2和时间的基本概念。 本教程将使这一步骤更进一步,并介绍最强大的tf2技巧之一。

1、时间旅行

打开之前监听者的例子
就是这个

打开 src/turtle_tf2_listener.cpp 这个文件

更改 这个部分代码

      try{
        transformStamped = tfBuffer.lookupTransform("turtle2", "turtle1", ros::Time::now(),ros::Duration(3.0));
      } catch (tf2::TransformException &ex) {
        ROS_WARN("Could NOT transform turtle2 to turtle1: %s", ex.what());
      }

现在不让第二只乌龟去第一只乌龟当前的位置了,而是去 5s 之前的位置。

代码 改成如下

      try{
        ros::Time past = ros::Time::now() - ros::Duration(5.0);
        transformStamped = tfBuffer.lookupTransform("turtle2", "turtle1",
                               past, ros::Duration(1.0));
      } catch (tf2::TransformException &ex) {
        ROS_WARN("Could NOT transform turtle2 to turtle1: %s", ex.what());
      }

编译运行

第1个5s,乌龟2 应该不会动,因为还没有 5s的历史数据。那之后的5s 呢。 试试

在这里插入图片描述
乌龟2 在 乱动 , 为什么呢?

因为我们向 TF2 请求的是 相对于5s前乌龟1相对与5s前乌龟2 的 位置 。然后 作用在了 当前的 乌龟2的运动中。

那如何 获取 5秒前乌龟1的位置,相对与当前乌龟2的位置呢。

就是用下面 更高级 的 lookupTransform() 函数 API

2、更高级 的 lookupTransform() 函数 API

直接上代码

      try{
        ros::Time now = ros::Time::now();
        ros::Time past = now - ros::Duration(5.0);
        transformStamped = tfBuffer.lookupTransform("turtle2", now,
                             "turtle1", past,
                             "world", ros::Duration(1.0));
      } catch (tf2::TransformException &ex) {
        ROS_WARN("Could NOT transform turtle2 to turtle1: %s", ex.what());
      }

此时 lookupTransform() 函数 有 6 个 参数

  1. 从这个坐标系转换
  2. 参数1 的 时刻
  3. 转到这个坐标系
  4. 参数3 的时刻
  5. 一个 固定不变的坐标系
  6. 时间 溢出时间

原理就是先求 参数 3 和参数4 到固定 坐标系的 变换 再求参数1 和参数2 的

3、检查结果

再编译运行

在这里插入图片描述

第2 只 乌龟 现在 则 由 5s 前 的乌龟1 的位置 为导向了

4、 完成

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
传感器 存储 机器人
ROS TF 将传感器数据转换为机器人坐标系下
ROS TF 将传感器数据转换为机器人坐标系下
ROS TF 将传感器数据转换为机器人坐标系下
|
传感器 缓存
ROS TF2 :通过tf2_ros::MessageFilter 将世界坐标系下的点转为期望坐标系下的点
ROS TF2 :通过tf2_ros::MessageFilter 将世界坐标系下的点转为期望坐标系下的点
|
传感器 C++
ROS TF2 添加一个 坐标系 附实例
ROS TF2 添加一个 坐标系 附实例
ROS TF2 添加一个 坐标系 附实例
|
数据可视化 机器人 C++
ROS TF2
turtlesim的多机器人示例中,展示了tf2的一些功能。 也介绍了使用tf2_echo,view_frames和rviz。 使对tf2可以做的事情有个很好的了解。
ROS TF2
|
XML C++ 数据格式
【古月21讲】ROS入门系列(4)——参数使用与编程方法、坐标管理系统、tf坐标系广播与监听的编程实现、launch启动文件的使用方法
【古月21讲】ROS入门系列(4)——参数使用与编程方法、坐标管理系统、tf坐标系广播与监听的编程实现、launch启动文件的使用方法
209 0
【古月21讲】ROS入门系列(4)——参数使用与编程方法、坐标管理系统、tf坐标系广播与监听的编程实现、launch启动文件的使用方法
|
算法 机器人 定位技术
ROS中阶笔记(八):机器人SLAM与自主导航—机器人自主导航
ROS中阶笔记(八):机器人SLAM与自主导航—机器人自主导航
870 0
ROS中阶笔记(八):机器人SLAM与自主导航—机器人自主导航
|
2月前
|
网络协议 机器人 中间件
单片机和FreeRTOS上跑机器人ROS的应用
单片机和FreeRTOS上跑机器人ROS的应用
74 0
|
4月前
|
传感器 机器人 C++
ROS 2机器人编程实战:基于现代C++和Python 3实现简单机器人项目
ROS 2机器人编程实战:基于现代C++和Python 3实现简单机器人项目
193 0

推荐镜像

更多