ROS 2边学边练(37)-- 使用时间参数(C++)

news2024/12/24 2:33:17

前言

        在前几篇内容中,我们已经了解过了tf2广播、tf2监听,并且还了解了如何添加一个坐标系到tf2树图中,以及如何查看坐标系间的转换情况。实际上,是通过lookupTransform函数来查找的,这个函数允许我们查找所有的转换数据(我们并不需要了解这些数据是在何时被记录下来的),这节我们将学习如何获取一个特定时间的转换数据。

动动手

tf2和时间

        我们打开learing_tf2_cpp包下的turtle_tf2_listener.cpp,重点关注下面这块代码:

try {
    t = tf_buffer_->lookupTransform(
       toFrameRel,
       fromFrameRel,
       tf2::TimePointZero);
} catch (const tf2::TransformException & ex) {

        lookupTransform函数一共传入了3个参数,前两个分别是目标帧和源帧,最后一个是tf2::TimePointZero,其值为0,数据类型是tf2中关于时间的数据类型tf2::TimePoint(许多API都会自动处理rclcpp::time和tf2::TimePoint之间的转换),在tf2包中,这个值为0代表的是缓存中最新的可用的转换数据,我们现在来改变下这个参数(用rclcpp里面的形式),修改如下:

rclcpp::Time now = this->get_clock()->now();
try {
    t = tf_buffer_->lookupTransform(
        toFrameRel, fromFrameRel,
        now);
} catch (const tf2::TransformException & ex) {

        定义一个now变量(rclcpp::Time类型),其值为系统当前时间,重新构建下learning_tf2_cpp包,并启动launch文件:

$ros2 launch learning_tf2_cpp turtle_tf2_demo_launch.py

        但是我们会得到如下的反馈信息,当前时间查找不到转换数据:

        首先每一个tf2监听者节点都会保存所有tf2广播者发出的坐标转换数据到一个缓存中,其次,当一个tf2广播者发出数据到一个tf2监听者保存数据到缓存,这个过程需要毫秒级的时间消耗。所以上面的现象就很好理解了,我们要查找当前这个点的数据,但它还在路上,若干毫秒后才会被保存到缓存区,那个时候才能查找到。

等待转换数据 

        那么我们是不是可以设置个等待时间呢(超时时间),等待时间内数据到达则返回转换数据,如无,则一直阻塞在这里直到有数据或者到达超时时间。

        修改如下:

rclcpp::Time now = this->get_clock()->now();
try {
    t = tf_buffer_->lookupTransform(
        toFrameRel,
        fromFrameRel,
        now,
        50ms);
} catch (const tf2::TransformException & ex) {

        添加了第四个参数为50ms,我们再重新构建包试试看。

检查结果

        没有报错了,如果超时了还没数据,程序就会根据代码里面写的那样抛出一个异常(比如我们可以将超时时间改成2ms,此时就会抛出异常)。 

本篇完。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1635122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构中的栈(C语言版)

一.栈的概念 栈是一种常见的数据结构,它遵循后进先出的原则。栈可以看作是一种容器,其中的元素按照一种特定的顺序进行插入和删除操作。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做…

品牌百度百科词条需要什么资料?

品牌百度百科词条是一个品牌的数字化名片,更是品牌历史、文化、实力的全面展现。 作为一个相当拿得出手的镀金名片,品牌百度百科词条创建需要什么资料,今天伯乐网络传媒就来给大家讲解一下。 一、品牌基本信息:品牌身份的明确 品…

神之浩劫2下载教程 MOBA新游神之浩劫2在哪下载/怎么下载

《神之浩劫2Smite 2》重新定义了MOBA游戏的征服模式,为玩家带来更多的互动和进展。最近的开发者深度挖掘展示了游戏地图的全新设计,既简化了基本操作,又丰富了游戏选择。游戏中的敌人也有了新的进展方式。例如,击败火巨人和金之怒…

兄弟们,哪一家做智慧校园的公司比较靠谱?

开发技术参数 1、使用springboot框架Javavue2 2、数据库MySQL5.7 3、移动端小程序使用小程序原生语言开发 4、电子班牌固件安卓7.1;使用Java Android原生 5、elmentui ,Quartz,jpa,jwt 6、SaaS云平台,私有云部署…

社区新零售:重构邻里生活圈,赋能美好未来

新时代的邻里脉动 在城市的肌理中,社区作为生活的基本单元,正经历一场由新零售引领的深刻变革。社区新零售,以其独特的商业模式、创新的技术手段和以人为本的服务理念,重新定义了社区商业的边界,重构了邻里生活的形态…

hive-row_number() 和 rank() 和 dense_rank()

row_number() 是无脑排序 rank() 是相同的值排名相同,相同值之后的排名会继续加,是我们正常认知的排名,比如学生成绩。 dense_rank()也是相同的值排名相同,接下来的排名不会加。不会占据排名的坑位。

【全开源】Java上门老人护理老人上门服务类型系统小程序APP源码

功能: 服务分类与选择:系统提供详细的老人护理服务分类,包括日常照护、康复训练、医疗护理等,用户可以根据老人的需求选择合适的服务项目。预约与订单管理:用户可以通过系统预约护理服务,并查看订单详情&a…

2024年618哪些数码家电值得入手?热门家电好物抢先看!

618购物狂欢节即将来临,这是一年一度的大促销活动,家电和数码产品在这个时间段内通常都会有优惠和折扣。但随着产品的多样化,很多时候一款产品就有多款品牌,在这不同品牌又各自擅长不同的东西,看着眼花缭乱。今天我就给…

有没有一种可能性,你不投递简历,让HR主动联系你

你是否觉得自己得主动给某个公司投递了简历,他们才会联系你,亦或者是自己得主动在招聘APP上联系那个BOSS,他才会反过来跟你说话,又或者是你千方百计的跟他打招呼了,还是没有回应,这一节有可能让你明白,有时候是可以,你不主动,他也会主动联系你的。 目录 1 简历是如何…

IDEA 编码规约扫描 Code inspection did not find anything to report.

IDEA安装了Alibaba Java Coding Guidelines插件,却看不到规约检查结果。手动进行编码规约扫描,弹窗提示“Code inspection did not find anything to report.”: 这种情况是因为代码文件所在的目录被标记成了测试文件(Test Source…

EOCR-SS-05W电子式过电流继电器 0.5-6A 施耐德韩国三和

三和EOCR株式会社是韩国的电动机保护器生产企业,公司由金仁锡博士(施耐德电气集团韩国执行官)于1981年建立。 2001年,为了把企业发展成性的、战略性企业,随后加入了法国施耐德电气集团公司。 EOCR主要产品有电子式电…

C++复盘(一)

文章目录 常量标识符命名规则数据类型sizeof关键字浮点数字符型转义字符字符串型布尔类型bool 比较运算符switch-case语句rand()随机数种子srand() goto语句一维数组函数函数的声明函数的分文件编写 指针指针所占内存空间空指针野指针const修饰指针1、常量指针2、指针常量3、co…

centOS 7.9操作

名称日期版本作者centOS7.9操作2024.4.271.0lll 实验题目: 创建一个用户。 在创建的用户中再创建一个2024的目录。 在2024的下在创建一个 1---10的目录,再创建一个a--z.txt的文件。 在创建一个2024bak的目录。 再将当前用户的所有文件备份到2024ba…

渗透之sql注入---实战1

本期的sql注入实战在:BUUCTF在线评测 (buuoj.cn) 该网站上进行。 启动靶机: 1.进来后搜索web1 2.点击【SWPU2019】Web1启动靶机。 3.进来之后在此界面进行注入。 开始注入: 1.找注入点: 我们输入1 后查看广告详情发现报错&a…

基于OpenCv的图像基本操作

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

Multi-Head Multi-Loss Model Calibration论文速读

文章目录 Multi-Head Multi-Loss Model Calibration摘要方法Multi-Head Ensemble Diversity 实验结果 Multi-Head Multi-Loss Model Calibration 摘要 当然,我会按照你的要求逐步列出: 背景: 提供有意义的不确定性估计对于机器学习模型在…

前端打包过大如何解决?

前端开发完毕部署到线上是,执行npm run build。当打包过大时,部署到服务端后加载缓慢,如何优化? 我们可以通过执行npm run analyze。可以看到各个包文件大小的区别。 当打包过大时,通过压缩gzip的方式,可以…

数据结构——栈的应用

数据结构——栈的应用 括号匹配中缀转后缀什么是中缀后缀中缀表达式 (Infix Notation)后缀表达式 (Postfix Notation, Reverse Polish Notation, RPN) 加减,乘除运算处理括号后缀转中缀 我们今天来看栈的应用: 括号匹配 栈一个经典的应用就是括号匹配&…

前端如何将接口传来的列表数据(数组)直接下载成csv文件

前言:最近遇到一个需求,需要实现一个下载表格数据的操作,一般来说是前端请求后端的下载接口,将文件流下载下来,但是因为这个项目任务时间比较紧,后端没时间做下载接口,所以暂时由前端直接调列表…

[iOS]使用CocoaPods发布公开库

1.检查库名是否已被占用 选择库名时,尽量选择具有描述性并且独特的名字,这不仅可以避免命名冲突,还可以帮助用户更好地理解库的用途和功能。 在实际创建和发布 CocoaPods 库之前,确实应该检查库名是否已经被占用,以避…