TF报错及解决方法 Error: TF_DENORMALIZED_QUATERNION
1. Problem
用HDL做定位时会出现如下报错,然后就没办法继续run了,卡在这,然后出现如下报错:
Error: TF_DENORMALIZED_QUATERNION: Ignoring transform for
child_frame_id “odom” from authority “unknown_publisher” because of an
invalid quaternion in the transform (0.0 0.0 0.983641 0.122190)
2. Solution
从报错中可以看出,提示的是四元数出问题了,关键就是说没有归一化,发布TF有严格的要求,四元数必须归一化,也就是xyzw平方和等于1,如果不等于就报上述的错,简单算一下,上述报错提示的四元数是: (0.0 0.0 0.983641 0.122190), 即 0.9836412+0.1221902=0.9824800129810.983641^2 + 0.122190 ^2 =0.9824800129810.9836412+0.1221902=0.982480012981 ,明显不等于1,所以就会出现上述问题,解决方法也简单,在输出之前做个归一化处理即可:
Eigen::Quaterniond quatern = {0.0 0.0 0.983641 0.122190}; // w x y zquatern.normalize();odom_trans.transform.rotation.x = quatern.x();odom_trans.transform.rotation.y = quatern.y();odom_trans.transform.rotation.z = quatern.z();odom_trans.transform.rotation.w = quatern.w();odom_trans.header.stamp = stamp;odom_trans.header.frame_id = "map";odom_trans.child_frame_id = odom_child_frame_id;tf_broadcaster.sendTransform(odom_trans);
用Eigen的库函数可以快速得到结果,也可以直接自己写个归一化公式处理,比如:
xx2+y2+z2+w2=0\frac{x}{ \sqrt{x^2+y^2+z^2+w^2}}=0x2+y2+z2+w2x=0
yx2+y2+z2+w2=0\frac{y}{ \sqrt{x^2+y^2+z^2+w^2}}=0x2+y2+z2+w2y=0
zx2+y2+z2+w2=0.9836410.982480012981=0.9923725907873522\frac{z}{ \sqrt{x^2+y^2+z^2+w^2}}=\frac{0.983641}{0.982480012981}=0.9923725907873522x2+y2+z2+w2z=0.9824800129810.983641=0.9923725907873522
wx2+y2+z2+w2=0.1221900.982480012981=0.12327465698187301\frac{w}{ \sqrt{x^2+y^2+z^2+w^2}}=\frac{0.122190}{0.982480012981}=0.12327465698187301x2+y2+z2+w2w=0.9824800129810.122190=0.12327465698187301
引起这个问题的原因是之前改了hdl里面的算法部分,修改了输出的四元数,默认不会出现roll和pitch的情况,所以四元数的x和y都设成0,但是修改了这个后,又忘了重新给修改后的四元数归一化再输出,就出现了上述的报错。
在这里感谢实验室里的好伙伴,yongji,发现了解决办法
困扰了挺久,原来是漏了归一化的原因。如果遇到类似报错,也应该从这个角度去检查,应该很快能定位到问题所在。
TF报错及解决方法 Error: TF_DENORMALIZED_QUATERNION相关推荐
- uncaught exception: Error: couldn’t add user: No role named root@myblog : 报错的解决方法
uncaught exception: Error: couldn't add user: No role named root@myblog : 报错的解决方法 说明 最近在学习 MongoDB创建 ...
- vue项目Error: Cannot find module ‘xxx’类报错的解决方法
现发现只要是报错 Error: Cannot find module 'xxx'(例如 Error: Cannot find module 'webpack')这类的问题都可以用下面的方法解决. 报错 ...
- Python3.5 win10环境下导入kera/tensorflow报错的解决方法
这篇文章主要介绍了Python3.5 win10环境下导入keras/tensorflow报错的解决方法,较为详细的分析了Python3.5在win10环境下导入keras/tensorflow提示错 ...
- mysql adminer 导入csv_mysql导入csv的4种报错的解决方法
以此悼念我今天踩过的4个坑-- 坑一:local的错 报错: error 3948 (42000): loading local data is disabled; this must be enab ...
- kettle连接数据mysql查_Kettle连接MySQL报错的解决方法
使用Kettle报错的解决方法 1.当你在navicat上面测试数据库连接的时候可以看到数据库连接成功.而在Kettle上面连接同样的库的时候报出一大段错误出来,这时候是不是感觉有点懵逼了. 错误内容 ...
- R安装WGCNA包(MacOS M1芯片)及impute包安装报错的解决方法【已成功】
R安装WGCNA包(MacOS M1芯片) WGCNA R安装WGCNA包 安装impute时的错误 impute包安装报错的解决方法 WGCNA 加权基因共表达网络分析 (WGCNA, Weight ...
- 引入文件报错的解决方法(bootstrap+jquery项目)
这篇文章主要介绍了bootstrap+jquery项目引入文件的常见报错问题,下面给大家分享了一些错误及错误的解决方法,需要的朋友可以参考下 做一个项目的时候 ,控制台总是会出现各种bug,其实不用慌 ...
- Linux安装ElasticSearch启动报错的解决方法
Linux安装ElasticSearch后,ElasticSearch是不能用root用户启动的,以root用户启动会报错Refer to the log for complete error det ...
- kettle连接mysql一直报错_Kettle连接MySQL报错的解决方法
使用Kettle报错的解决方法 1.当你在navicat上面测试数据库连接的时候可以看到数据库连接成功.而在Kettle上面连接同样的库的时候报出一大段错误出来,这时候是不是感觉有点懵逼了. 错误内容 ...
最新文章
- 如何让敏捷中的每日站会发挥最大效果?
- JMC | 人工智能在药物发现中的应用:走进广阔的天地
- 【Spring】BeanFactory解析bean详解
- MySQL入门,了解下、
- 产品方法论之:菜鸟做加法,高手做减法!
- 苹果树(线段树+Dfs序)
- java arcgis server_ArcGIS Server Java 开发实战---自定义command
- python初学者用什么软件_初学者编写python用什么软件
- html定位ajax php,AJAX HTML PHP问题
- 分页存储过程--From:桌面备份 - sql2005新功能.docx
- Markdown 中设置图片图注
- jdk 7 下载地址(全新)
- 银河麒麟V10(Kylin Linux V10)之MySQL编译安装
- 股票、债券、基金、期权、期货等的异同
- React启动时报Plugin “react“ was conflicted between “package.json ......错误的解决办法。
- 5x2cv配对t检验(5x2cv paired t test)
- echarts饼图默认中间显示总数
- 数据库理论第八章部分作业——基于《数据库系统概念》第七版
- dos2unix 解决脚本执行过程中的莫名错误 “not found”
- SpringBoot、EasyPoi、Echarts 实现文档导入、出、图表显示 (饼状图、柱状图) 保姆级教程
热门文章
- c语言将图像转换成字符画,25行Java代码将普通图片转换为字符画图片和文本的实现...
- springboot中AOP总结
- 潮人篮球ios android,潮人篮球ios怎么在电脑上玩?潮人篮球ios电脑版玩法教程!...
- 2023年助理工程师初级职称怎么申报,伴德诚
- SIM800C--实现正常通话
- Watch OS开发笔记
- 秃头整理:TCP/IP 详解卷一 笔记--完结撒花
- 那些TensorFlow上好玩的和黑科技
- 零基础学java web开发_从零基础学Java成为一个专业的java web 开发者
- Nightingale夜莺服务监控