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+w2​x​=0
yx2+y2+z2+w2=0\frac{y}{ \sqrt{x^2+y^2+z^2+w^2}}=0x2+y2+z2+w2​y​=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+w2​z​=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+w2​w​=0.9824800129810.122190​=0.12327465698187301

引起这个问题的原因是之前改了hdl里面的算法部分,修改了输出的四元数,默认不会出现roll和pitch的情况,所以四元数的x和y都设成0,但是修改了这个后,又忘了重新给修改后的四元数归一化再输出,就出现了上述的报错。

在这里感谢实验室里的好伙伴,yongji,发现了解决办法
困扰了挺久,原来是漏了归一化的原因。如果遇到类似报错,也应该从这个角度去检查,应该很快能定位到问题所在。

TF报错及解决方法 Error: TF_DENORMALIZED_QUATERNION相关推荐

  1. 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创建 ...

  2. vue项目Error: Cannot find module ‘xxx’类报错的解决方法

    现发现只要是报错 Error: Cannot find module 'xxx'(例如 Error: Cannot find module 'webpack')这类的问题都可以用下面的方法解决. 报错 ...

  3. Python3.5 win10环境下导入kera/tensorflow报错的解决方法

    这篇文章主要介绍了Python3.5 win10环境下导入keras/tensorflow报错的解决方法,较为详细的分析了Python3.5在win10环境下导入keras/tensorflow提示错 ...

  4. mysql adminer 导入csv_mysql导入csv的4种报错的解决方法

    以此悼念我今天踩过的4个坑-- 坑一:local的错 报错: error 3948 (42000): loading local data is disabled; this must be enab ...

  5. kettle连接数据mysql查_Kettle连接MySQL报错的解决方法

    使用Kettle报错的解决方法 1.当你在navicat上面测试数据库连接的时候可以看到数据库连接成功.而在Kettle上面连接同样的库的时候报出一大段错误出来,这时候是不是感觉有点懵逼了. 错误内容 ...

  6. R安装WGCNA包(MacOS M1芯片)及impute包安装报错的解决方法【已成功】

    R安装WGCNA包(MacOS M1芯片) WGCNA R安装WGCNA包 安装impute时的错误 impute包安装报错的解决方法 WGCNA 加权基因共表达网络分析 (WGCNA, Weight ...

  7. 引入文件报错的解决方法(bootstrap+jquery项目)

    这篇文章主要介绍了bootstrap+jquery项目引入文件的常见报错问题,下面给大家分享了一些错误及错误的解决方法,需要的朋友可以参考下 做一个项目的时候 ,控制台总是会出现各种bug,其实不用慌 ...

  8. Linux安装ElasticSearch启动报错的解决方法

    Linux安装ElasticSearch后,ElasticSearch是不能用root用户启动的,以root用户启动会报错Refer to the log for complete error det ...

  9. kettle连接mysql一直报错_Kettle连接MySQL报错的解决方法

    使用Kettle报错的解决方法 1.当你在navicat上面测试数据库连接的时候可以看到数据库连接成功.而在Kettle上面连接同样的库的时候报出一大段错误出来,这时候是不是感觉有点懵逼了. 错误内容 ...

最新文章

  1. 如何让敏捷中的每日站会发挥最大效果?
  2. JMC | 人工智能在药物发现中的应用:走进广阔的天地
  3. 【Spring】BeanFactory解析bean详解
  4. MySQL入门,了解下、
  5. 产品方法论之:菜鸟做加法,高手做减法!
  6. 苹果树(线段树+Dfs序)
  7. java arcgis server_ArcGIS Server Java 开发实战---自定义command
  8. python初学者用什么软件_初学者编写python用什么软件
  9. html定位ajax php,AJAX HTML PHP问题
  10. 分页存储过程--From:桌面备份 - sql2005新功能.docx
  11. Markdown 中设置图片图注
  12. jdk 7 下载地址(全新)
  13. 银河麒麟V10(Kylin Linux V10)之MySQL编译安装
  14. 股票、债券、基金、期权、期货等的异同
  15. React启动时报Plugin “react“ was conflicted between “package.json ......错误的解决办法。
  16. 5x2cv配对t检验(5x2cv paired t test)
  17. echarts饼图默认中间显示总数
  18. 数据库理论第八章部分作业——基于《数据库系统概念》第七版
  19. dos2unix 解决脚本执行过程中的莫名错误 “not found”
  20. SpringBoot、EasyPoi、Echarts 实现文档导入、出、图表显示 (饼状图、柱状图) 保姆级教程

热门文章

  1. c语言将图像转换成字符画,25行Java代码将普通图片转换为字符画图片和文本的实现...
  2. springboot中AOP总结
  3. 潮人篮球ios android,潮人篮球ios怎么在电脑上玩?潮人篮球ios电脑版玩法教程!...
  4. 2023年助理工程师初级职称怎么申报,伴德诚
  5. SIM800C--实现正常通话
  6. Watch OS开发笔记
  7. 秃头整理:TCP/IP 详解卷一 笔记--完结撒花
  8. 那些TensorFlow上好玩的和黑科技
  9. 零基础学java web开发_从零基础学Java成为一个专业的java web 开发者
  10. Nightingale夜莺服务监控