坐标变换tf2对于发布各类传感器消息非常重要。一些环境辨识相关的传感器都是含有坐标信息,其位置与机器人的关系,对应到机器人对环境的感知,就需要坐标变换。

参考文献:

  • https://index.ros.org/doc/ros2/Tutorials/tf2/

Using tf2 with ROS 2 在ROS 2中使用tf2

There is preliminary support for tf2 in ROS 2. We rely heavily on tf2 in ROS 1 to manage data about coordinate transforms, and we expect to continue to use extensively in ROS 2. ROS 2中有tf2的初步支持。依赖ROS 1中的tf2来管理坐标变换的数据,期望继续在ROS 2中广泛使用。

Here’s how to try it out. In each shell, be sure to start by sourcing the ROS 2 setup file as usual 如何使用它?在每个shell中,一定要像往常一样导入ROS 2安装文件环境(例如在Linux 或Windows上分别如下)。

(e.g. on Linux . ~/ros2_ws/install/setup.bash or on Windows call C:\dev\ros2\install\setup.bat).

Publishing transform data 发布变换数据

First run the static_transform_publisher to generate tf2 data: 首先运行static_transform_publisher以生成tf2数据:

ros2 run tf2_ros static_transform_publisher 1 2 3 0.5 0.1 -1.0 foo bar

That tool will publish a static transform from the parent frame foo to the child frame bar with (X, Y, Z) translation (1, 2, 3) and (roll, pitch, yaw) rotation (0.5, 0.1, -1.0). 该工具将发布从父帧foo到子帧bar的静态变换,其中(X,Y,Z)平移(1,2,3)和(滚动,俯仰,偏航)旋转(0.5,0.1,-1.0)。

Receiving transform data 接收变换数据

Now we can check whether it’s possible to receive that transform data with tf2_echo: 现在检查是否可以接收转换数据, 使用tf2_echo

ros2 run tf2_ros tf2_echo foo bar

You should see repeated output similar to this: 应该看到类似于此的重复输出:

At time 0.0
- Translation: [1.000, 2.000, 3.000]
- Rotation: in Quaternion [-0.475, -0.076, 0.240, 0.843]

Note that tf2_echo is reporting the rotation as a quaternion as opposed to roll, pitch, and yaw. 请注意,tf2_echo将旋转角度输出为四元数而不是滚动,俯仰和偏航。


以上是基本概念,具体如何使用呢?遇到问题如何进行排查呢?来看一个案例吧:

在学习这个案例之前,需要先了解Gazebo,详细内容可以参考:Gazebo和ROS2的使用说明(部分翻译)

打开一个gazebo环境,查看其中传感器数据:

gazebo --verbose /opt/ros/dashing/share/gazebo_plugins/worlds/gazebo_ros_ray_sensor_demo.world

gazebo

如果不支持gpu会报如下警告,编写代码时请避免使用gpu规范的虚拟传感器!

[Wrn] [msgs.cc:1852] Conversion of sensor type[gpu_ray] not supported.

启动环境

复习一下ros2 topic指令和rqt_gui:

$ ros2 topic list 
/clock
/gpu_ray/laserscan
/gpu_ray/parameter_events
/gpu_ray/pointcloud
/gpu_ray/pointcloud2
/gpu_ray/range
/gpu_ray/rosout
/parameter_events
/ray/laserscan
/ray/parameter_events
/ray/pointcloud
/ray/pointcloud2
/ray/range
/ray/rosout
/rosout
打开rviz2,查看数据可视化:

rviz2

这时候,rviz2中什么也没有,还有一个黄色警告。

tf数据没有,map坐标应该也是不对的。怎么办?先看看,激光的坐标吧?

使用ros2 topic echo,当然也可以查看源码确定具体坐标名称:

ray_link

laser no

依旧啥也没有,然后呢?还是有黄色警告。

显示可视化,需要勾选unreliable!

laser yes

消除警告使用:

ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 world ray_link

point

最后合起来看一下:

gazebo rviz2

gazebo

rviz

结合odom、imu等信息和slam算法,就可以建环境地图,并使用navigation2导航了。

下面再看一下,真实传感器的数据吧。预习链接:ROS2使用lidar激光雷达(rplidar和ydlidar)

终端

scan可视化

机器人建立环境地图和导航案例,稍后补充~


ROS2学习tf2坐标变换相关推荐

  1. ROS专题----tf和tf2坐标变换

    ROS专题----tf和tf2坐标变换 ---- 工作区设置 如果您尚未创建用于完成教程的工作区, 请单击此处查看一些简要说明 . 从tf1迁移到tf2 转换数据类型 这是对转换数据类型的语法更改的快 ...

  2. ROS 学习笔记 坐标变换

    TF坐标变换 TF:TransForm Frame,坐标变换. 坐标系:ROS 中是通过坐标系统开标定物体的,确切的将是通过右手坐标系来标定的. 注:在ROS中坐标变换最初对应的是tf,不过在 hyd ...

  3. 电机控制学习笔记——坐标变换

    电机控制学习笔记--坐标变换 0 前言 1 坐标系 2 Clarke变换(abc/ α \alpha α β \beta β变换) 2.1 恒幅值变换 2.2 恒功率变换 2.3 小结 3 Park变 ...

  4. [ROS2基础] TF2使用细节

    运行一个示例 安装依赖 sudo apt-get install ros-galactic-turtle-tf2-py ros-galactic-tf2-tools ros-galactic-tf-t ...

  5. ROS2学习笔记(2)什么是ROS2 nodes

    什么是ROS2 nodes 先了解一下ROS2 graph.ROS2 graph是一个ROS2元素同时处理数据的网络.它包含了所有可执行程序和它们之间的连接. ROS中每个负责单独功能的模块叫做节点( ...

  6. ROS2学习笔记(3)什么是ROS2 topics

    什么是ROS2 topics 上一篇笔记学习了节点,ROS2正是帮我们可以把一个复杂的系统分解成很多个模块化的节点. topics(话题)是ROS的重要元素,它的作用就充当这些模块化的节点之间交换信息 ...

  7. (18)ROS学习-TF坐标变换之静态坐标变换

    1.坐标msg消息: 订阅发布模型中数据载体 msg 是一个重要实现,首先需要了解一下,在坐标转换实现中常用的 msg:geometry_msgs/TransformStamped和geometry_ ...

  8. ROS2 学习古月居ros21讲学习笔记

    ROS21讲学习笔记 在Ubuntu上安装的是ros2 foxy 启动小海龟 ros2 run turtlesim turtlesim_node 启动键盘控制 ros2 run turtlesim t ...

  9. ROS2学习笔记(十)-- ROS2 launch启动文件

    简介:接触过ROS1的同学对launch肯定不陌生,在ROS1中,我们常用launch实现node和master同时启动.多节点同时启动配置等功能,ROS2中的launch也是用于多节点启动.配置功能 ...

最新文章

  1. 吴恩达:机器学习应以数据为中心
  2. oracle export命令使用浅解,Oracle Export命令使用浅解
  3. GDB 命令详细解释
  4. window.location对象、window.navigator对象、window.history对象
  5. mysql怎么判断2个时间戳为同一天_php如何判断两个时间戳是一天
  6. 400是什么错误_404、403、405、500 | 常见网页错误代码解析
  7. 职场真正的潜规则,毕业生却一直不重视!还自以为是的认为这是优点!!HR直接会pass这一群人!!
  8. Fusion 360软件安装
  9. 详解Haar特征与AdaBoost方法原理
  10. Unity3d 免费么?
  11. js 获取浏览器 滚动的高度
  12. 基于Python深度学习的DGA域名检测
  13. JS特效--字体逐渐浮现效果
  14. linux crontab清理脚本,crontab定时清理日志
  15. c语言浮点变量是什么意思,C语言中说的浮点型是什么意思呢 C语言的浮点数是什么...
  16. Visual C++ 11 中新的并发功能
  17. 利用python画空间分布图
  18. html在不可编辑页面字段下沉,[Web前端技术教学]《基于Web标准的网页设计与制作》试题及答案...
  19. MySQL 单个数据库备份还原
  20. 记一次软考高项【信息系统项目管理师】重点

热门文章

  1. linux下模拟登陆环境安装
  2. 数字图像处理第一二章
  3. Android自带模拟器的安装
  4. java实现第六届蓝桥杯穿越雷区
  5. 前端逻辑练习题+学习记录 不定期更新
  6. 【C#】封装的复数运算类库及拓展到复数域的Math类
  7. 2.Lambda表达式
  8. 用队列实现栈(Java)
  9. C语言noip复赛知识点,NOIP复赛知识点简述及复赛算法总结!
  10. 下载delphi 5 至 delphi 2010