首页 > 编程知识 正文

高斯坐标的椭球参数怎么设定,椭球面半轴长计算公式

时间:2023-05-04 11:03:53 阅读:263178 作者:1475

在搞自动控制中,很少有人能不和陀螺仪,加速度计这些打交道,当然还有些人还不免和地磁计打交道,

这类三轴传感器都有一个特性,三个轴的零飘不一样,三个轴的比例尺不一样,随机游走我们暂且不考虑,

那么这时候对这一类的器件就很需要用到椭球校准了,自然免不了椭球拟合了,

对加速度计做个椭球校准,网上找找,然后就看到了一个叫做Elor的人写的文章,大家也许看过了,网上搜索 “罗盘和加速度计校正方法” 这个文章,但是显然文章不是我要的,要是要了,就没有我这里的分享了,

作者还是蛮不错的,分享了很多,但是个人感觉数学意识不够严谨,他说网上的公式写的晦涩难懂,他推导了一遍,但是实际是有点问题的,此外他的代码也是有点问题的,超过6个采样数据,基本就解算不出来了,少于6个也解算不出来,这样的校正意义很有限,

其实实现起来也很简单,主要是大学数学,数值分析的基本功,我这里参考了Elor的部分架构,但是换了一副汤药,写了下面的代码,不存在以上说的那些问题

东西很简单,我这里只是提供了一个实际验证鲁棒性还好的算法,给有需要的同学

基本原理:基于最小二乘法的椭球拟合

这个基于最小二乘法的椭球拟合,我就不赘述原理了,网上有人整理的很好,通俗易懂,推导严谨,也是正统做法,这里贴出人家CSDN空间二次曲面数据拟合算法推导及仿真分析 - CSDN博客 有兴趣的直接去看人家解释就好了,

可惜人家是matlab代码,不是c代码,想移植做片上系统的朋友可能嫌麻烦了,好在不是很难的东西,我这里也没有参考matlab代码,简单的c就可以写出来了;

VS上直接建立桌面控制台程序粘贴进去就可以用了,

全部用了万精油的double变量,想移植到stm32上的朋友你可能要自己改改float或者定点,

贴出来的点就在于我这个代码可能离实际能用的接近点;

使用的是列主元gauss消去求解的非齐次线性方程组;

程序代码:见下

验证:4个采样点,8个采样点,10个采样点,更多的都试过,没有问题,拟合出来的是离你们所有采样点的误差之和最小的一个曲面

//椭球校准.cpp

运行的结果:

基本就是常规做法;

采样点是通过下面的函数输入的,

CalcData_Input(87,-52,-4454);

数据中87是加速度计x轴数据,-52是y轴数据,-4454是z轴数据,

实际测量的数据,

数据中加速度计采用了±8g的量程,所以重力幅理论应该是4096,

这里可以看出来椭球还是蛮明显的,

在最后的结果上面,给出了增广矩阵,列主元gauss消去时候的算阶梯矩阵的每个步骤

好了,就分享到这里把

与2018.05.24*********************************************************

20180528

新抛出一个问题,有试过我代码的小伙伴,也许会注意到,有时候四个点也是可以算出来这个结果的,甚至3个点也是可以算出来的,神奇不?明明确定一个椭圆是要6个变量的,现在只要三个样本为什么就能确定椭圆了?或者换句话说,为什么系数矩阵没有奇异,很神奇啊,对不对

20181228

就上面的这个问题,今天给个回答啊,直接放一张朋友左神的见解,

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。