首页 > 其他分享 >理解ROS2的坐标转换模块tf2

理解ROS2的坐标转换模块tf2

时间:2023-12-19 18:58:24浏览次数:28  
标签:转换 编译 static 坐标 模块 tf ROS2 tf2

0 概述

tf2是ROS的核心库之一,它记录了所有坐标系的转换关系,包括动态坐标转换tf,和静态坐标转换tf_static;

首先,介绍tf2库(即,geometry2)编译/调试环境的搭建步骤;然后,介绍部分的类图结构,和调用时序;

1 搭建ROS2的编译环境

参考:http://docs.ros.org/en/iron/Installation/Ubuntu-Install-Debians.html

2 搭建tf2的编译环境

2.1 编译tf2

tf2模块的代码在:https://github.com/ros2/geometry2

下载代码到服务器后,编译步骤如下:

colcon build
# 可以指定要编译的包:colcon build --packages-select tf2

2.2 静态坐标转换的发布节点

uav@uav-mt:/tmp/geometry2$ build/tf2_ros/static_transform_publisher --frame-id "world" --child-frame-id "robot"

2.3 查看静态坐标转换

每次订阅/tf_static 都会收到1次全量的静态tf 关系;

. /tmp/geometry2/install/setup.bash
ros2 topic list
ros2 topic echo /tf_static

3 坐标转换的发布者的类图

3.1 静态坐标转换

在StaticTransformBroadcaster::sendTransform 中,通过判断net_message_ 中是否已经存在入参的tf(根据child_frame_id),决定在net_message_ 中更新或追加该tf;

之后,发布net_message_;

3.2 动态坐标转换

与StaticTransformBroadcaster 相比,TransformBroadcaster 的区别如下,

 StaticTransformBroadcasterTransformBroadcaster
构造函数中的qos 选项 无rclcpp::QosPolicyKind::Durability 有rclcpp::QosPolicyKind::Durability
发布的topic 名 /tf_static /tf
sendTransform 的实现 维护了net_message_(内含tf_static 数组),如果存在与输入的tf 相同child_frame_id 的tf,更新该tf 直接发布输入的tf

4 坐标转换的监听器的类图

在TransformListener 的构造函数中,完成对"/tf_static" 和"/tf" 的订阅,注册回调函数subscription_callback;

subscription_callback 通过TimeCacheInterface::insertData 接口,往成员变量frames_ 中,写入静态,或者动态tf;

5 时序图

以运动补偿节点Compensator 为例,如下:

x 参考

x.1 https://zhuanlan.zhihu.com/p/28288871

x.2 http://dev.ros2.fishros.com/doc/Tutorials/Tf2/Learning-About-Tf2-And-Time-Cpp.html

 

标签:转换,编译,static,坐标,模块,tf,ROS2,tf2
From: https://www.cnblogs.com/xiaochou/p/17914437.html

相关文章

  • Numpy模块
    Numpy模块的核心就是基于数组的运算,相比于列表和其他数据结构,数组的运算效率是最高的。常用的数学函数np.pi常数pnp.e常数enp.fabs(arr)  例如:np.fabs(-3) 计算各元素的浮点型绝对值np.ceil(arr) 例如:np.ceil(3.2)对元素向上取整np.floor(arr) 类似ceil 向下取整对......
  • DC电源模块的安装和使用步骤是什么?
    DC电源模块的安装和使用步骤是什么?安装和使用DC电源模块的步骤如下:确定模块的电源需求:查阅模块的规格和说明书,确定所需的输入电压范围和输出电流能力。配置电源线:根据电源模块的输入要求,选择合适的电源线。确保电源线具备足够的额定电流和正确的接线方式。连接电源线:将电源线的一......
  • BOSHIDA DC电源模块的安装和使用步骤是什么?
    BOSHIDADC电源模块的安装和使用步骤是什么?安装和使用DC电源模块的步骤如下: 1.确定模块的电源需求:查阅模块的规格和说明书,确定所需的输入电压范围和输出电流能力。2.配置电源线:根据电源模块的输入要求,选择合适的电源线。确保电源线具备足够的额定电流和正确的接线方式。3......
  • Git:submodule子模块操作
    一、子模块添加gitsubmoduleadd<url><path>gitsubmoduleaddhttps://github.com/../.gitthemes/MeiFixIt二、子模块更新gitsubmoduleupdate--remote--merge三、下载子模块同父模块一起下载子模块gitclone--recurse-submodules<repository-url>父模块......
  • 【GD32307E-START】06 ST7735 SPI-LCD显示模块移植
    软硬件平台GD32F307E-STARTBoard开发板GCCMakefile1.8寸TFTLCD分辨率128*160驱动ICST7735S接口定义序号引脚标号说明1GND接地2VCC5V/3.3V电源输入3SCKSPI总线时钟信号4SDASPI总线写数据信号5RESET液晶屏复位信号,低电平复位6DC......
  • Python实现模块热加载
    为什么需要热加载在某些情况,你可能不希望关闭Python进程并重新打开,或者你无法重新启动Python,这时候就需要实现实时修改代码实时生效,而不用重新启动Python在我的需求下,这个功能非常重要,我将Python注入到了其他进程,并作为一个线程运行。如果我想关闭Python,要么杀死Python相关的线程......
  • ABP模块的测试项目从默认的Microsoft SQL Server替换成MySQL
    1、替换项目引用2、重新生成解决方案3、删除Migrations4、模块的引用替换成:AbpEntityFrameworkCoreMySQLModule5、命名空间替换成:Volo.Abp.EntityFrameworkCore.MySQL;6、ConfigureServices中的修改替换成:UseMySQL();7、DbContext中的修改替换成:UseMySql(configuration.GetConnect......
  • Python实现模块热加载
    为什么需要热加载在某些情况,你可能不希望关闭Python进程并重新打开,或者你无法重新启动Python,这时候就需要实现实时修改代码实时生效,而不用重新启动Python在我的需求下,这个功能非常重要,我将Python注入到了其他进程,并作为一个线程运行。如果我想关闭Python,要么杀死Python相关的线......
  • python3.8 模块 paramiko报错 AttributeError: 'NoneType' object has no attribute '
    报错信息Exceptionignoredin:<functionBufferedFile.__del__at0x7f4886fbd160>Traceback(mostrecentcalllast):File"/usr/local/python3/lib/python3.8/site-packages/paramiko/file.py",line67,in__del__File"/usr/local/python3/......
  • 给已安装的nginx动态添加模块
    以添加echo-nginx-module模块为例查看现有nginx的编译参数$nginx-Vnginxversion:nginx/1.20.2builtbygcc4.8.520150623(RedHat4.8.5-44)(GCC)builtwithOpenSSL1.0.2k-fips26Jan2017TLSSNIsupportenabledconfigurearguments:--user=nginx--group=......