搜索
bottom↓
回复: 138

用重力标定加速度计

  [复制链接]

出0入0汤圆

发表于 2012-6-15 19:39:50 | 显示全部楼层 |阅读模式
本帖最后由 js200300953 于 2012-6-15 22:19 编辑

原文:blog.sina.com.cn/s/blog_81f1e26801017aji.html
这几天都在标定加速度计,终于完成了。
  • 方案
    传感器总会有缺陷,测量的值有误差,所以要校正。要校正加速度计,最简单有效的办法就是利用重力了。以不同方向在静止状态测量加速度,然后把数据拟合到当地重力加速度,就完成对加速度计的标定了,直接无视Datasheet上的精度参数。
  • 采集数据
    采集数据就要用到上次做的“黑匣”了,测量到的部分数据如下。

    里面的0x55AA是帧开始符,表示一组测量数据的开始,紧接着就是3个double类型的值,小端格式,表示x,y,z方向的原始测量值。
  • 理论依据
    这次标定加速度计,最大的收获是——把困扰多年的“最小二乘法”弄懂了。
    设x‘,y’,z‘为实际加速度分量,G0为当地重力加速度值。理想情况下有下面的等式:
    但测量有误差,设测量值为[x,y,z],则测量值和实际值可以用下面的公式拟合。拟合方式为线性拟合,其中a',b',c'是比例因子,d',e',f'为偏移因子。通过这条公式,可以把测量值“变成”实际值(下面称作“估计值”),标定加速度计的目标,就是确定[a',b',c',d',e',f']这六个参数(下面称作“参数”),使估计值更接近实际值。
    代入理想情况的等式,有:
    这分明是椭球嘛,展开得:

    为方便推导和运算,写成如下形式:
    比较以上两式,有:(注意要加上系数k)
    反过来有:
    现在已经在静止状态测量出一些数据,记作[xn,yn,zn],表示第n组测量值,对应的实际值都是重力G0。为了衡量参数的合适程度,引入误差函数Δn,表示第n个估计值与实际值的偏差,如果硬要说出具体意义,就是:估计值和实际值的平方差的1/k倍。
    Δn是第n组数据的偏差,我们的目标是整体偏差最小,所以引入整体偏差指数I,等于全部数据的偏差的平方和(“最小二乘法”的“二乘”就是指平方)。
    再次强调,我们的目标是找出一组参数,使整体的估计值最接近实际值。换句话说,就是:已知[xn,yn,zn],求使I最小的[a',b',c',d',e',f']。直接求[a',b',c',d',e',f']有困难,要利用[a,b,c,d,e,f,g],不废话吗?这就是我们引入abc的原因啊。所以不用犹豫了,动用高数中的偏导吧,用I分别对[a,b,c,d,e,f,g]求偏导,然后通通都要是0,这是I最小的必要条件。于是得到下面7条方程,对于[a,b,c,d,e,f,g],都是线性方程,组合起来就是一组7*7的齐次线性方程组。
    仔细观察上面的方程,很有规律。其实可以写成更简洁(传说中的数学的优雅啊)的形式。引入列向量v和pn,v为变量组,pn为系数组,单个偏差可以写成它们的点积。
    神奇的一刻到了,方程组可以用一条式表示!再经过一些变换(向量点积交换,证明不出,归纳出来的。),得到终极的矩阵形式。而且矩阵A相当利于程序实现,算法复杂度甚至是完美的“online”!
    呵呵,一不小心,把最小二乘法的一般形式推导出来了。
    至此,问题归结到线性方程组的求解,理论上已经没有任何障碍(那是当然的,都已经用了上百年了)。
  • 编写软件

    先梳理一下思路。现在有一个原始的RCD格式的数据,首先要提取出[xn,yn,zn],然后用[xn,yn,zn]算出向量pn,再用pn转置自乘,累加成矩阵A,接着求以A为系数矩阵的齐次线性方程组,算出[a,b,c,d,e,f,g],这样就可以得到最佳的[a',b',c',d',e',f']了。

    第一步需要了解RCD文件的结构,那是做黑匣的时候自己设计的,没问题;然后加加减减得到A,这个也不难;以前混ACM的时候,对着《线性代数》写过解线性方程组的库,解方程组小意思;最后再次加加减减,[a',b',c',d',e',f']就出来啦。关键代码如下:

    输入数据循环。


    累加生成矩阵。


    解方程,vp就是[a,b,c,d,e,f,g]啦。


    [a,b,c,d,e,f,g]转[a',b',c',d',e',f']。
  • 校验结果
    一共14339组数据,左边是原始采样值,中间是标定后的加速度,右边是估计值与实际值的误差。
    重力加速度取广州的9.7883m/s²,大多数误差在0.5%以下,结果还算满意。

    后来试过周期性忽略某些采样点,得出不同的参数,发现参数只有3~4位有效数字。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2012-6-15 19:40:38 | 显示全部楼层
图片都挂了

出0入0汤圆

发表于 2012-6-15 20:18:14 | 显示全部楼层
及时雨~~

出0入0汤圆

发表于 2012-6-15 20:21:09 | 显示全部楼层
解决了困扰多天的问题~~赞~~

出0入0汤圆

发表于 2012-6-15 20:21:27 | 显示全部楼层
我证明     图片都没G

出0入0汤圆

 楼主| 发表于 2012-6-15 20:33:48 | 显示全部楼层
蓝海de梦 发表于 2012-6-15 20:21
我证明     图片都没G

哈哈,新浪博客不给外链,要重新上传到这里

出0入0汤圆

 楼主| 发表于 2012-6-15 20:49:57 | 显示全部楼层
40342zz 发表于 2012-6-15 20:21
解决了困扰多天的问题~~赞~~

有什么问题大家一起探讨一下嘛

出0入0汤圆

发表于 2012-6-16 01:58:10 | 显示全部楼层
本帖最后由 g921002 于 2012-6-16 02:10 编辑

推導有小錯誤,g參數應該是常數項,對其作偏導是多餘的。所以P矩陣維度多1,導致解線性方程需要忽略最後一行。
所以實際上維度為6。
而且Datasheet參數還是很重要,因為你需要一個好的initial guess去快速收斂最佳解。

出0入0汤圆

 楼主| 发表于 2012-6-16 09:32:53 | 显示全部楼层
本帖最后由 js200300953 于 2012-6-16 11:22 编辑
g921002 发表于 2012-6-16 01:58
推導有小錯誤,g參數應該是常數項,對其作偏導是多餘的。所以P矩陣維度多1,導致解線性方程需要忽略最後一 ...

对于I,g是变量。

方程的确是有冗余的,我们需要的是[a',b',c',d',e',f'],只有6个自由度,而方程组有7个未知数,所以应该至少有一个任意常数(从k的引入可以看出)。

图片上面是累加后的A,下面是行化简后的结果。
观察对角线,数量级都在1e8以上——除了最后一行。
理论上如果[xn,yn,zn]都在椭球面上,最后一行应该都是0,方程组就至少有一个任意常数。
实际上[xn,yn,zn]有误差,导致对角线最后一行不为0,但数量级差太远,可以视为0(反映出本次拟合效果好)。
所以才“作弊”嘛。

如果用这个方法标定加速度计,是不需要DataSheet的参数的,直接拟合重力。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-6-16 09:44:00 | 显示全部楼层
顶,记下先.

出0入0汤圆

发表于 2012-6-16 17:06:48 | 显示全部楼层
本帖最后由 g921002 于 2012-6-17 11:40 编辑
js200300953 发表于 2012-6-16 09:32
对于I,g是变量。

方程的确是有冗余的,我们需要的是[a',b',c',d',e',f'],只有6个自由度,而方程组有7个 ...


參數冗余那是因為你把
(ax+d)^2+(by+e)^2+(cz+f)^2 = G0^2
這個方程式展開了。其實並不用展開他。
直接令
F(p)=(ax+d)^2+(by+e)^2+(cz+f)^2 - G0^2.為目標函數即可。
這樣v=[a b c d e f] 而不是v=[a b c d e f g]

物理意義上來看,冗余項通常意味該參數可以用其他參數的線型組合而成,所以可以進
一步降階求解,而且從原系統可知的確有冗余的參數。當然,在PC上求解有接近無限的
時間及資源求最佳解,冗余也無所謂。

而且這個方程其實不太會有區域解的問題,初始猜測隨便下都會收斂。不過你的收斂方
式是牛頓-高斯系統的,如果初始參猜測很差,那收斂的速度就會很不理想。

非線性系統作小二乘求解,用的是遞迴方式作,其實很著重在initial guess的設定。
與其用當地重力,還不如用1直接來的直觀。
--

出0入0汤圆

发表于 2012-6-16 17:54:46 | 显示全部楼层

出0入0汤圆

发表于 2012-6-16 18:40:21 | 显示全部楼层
果然都是书到用时方恨少啊,我也是在做线性校准的时候复习的最小二乘法

出0入0汤圆

发表于 2012-6-16 20:14:52 | 显示全部楼层
这个要顶,以前学过的数学都还给数学老师,要好好补习补习了。

出0入0汤圆

 楼主| 发表于 2012-6-16 22:59:18 | 显示全部楼层
g921002 发表于 2012-6-16 17:06
參數冗余那是因為你把
(ax+d)^2+(by+e)^2+(cz+f)^2 = G0
這個方程式展開了。其實並不用展開他。

论坛果然是学习的好地方,多谢g921002指正。
上面这些都是在不懂的情况下,自己独立推导出来的,觉得展开比较方便就展开了。

有一个问题:你提到“初始参数”,究竟是怎么用法呢?
我的测量到一批数据,然后生成矩阵,就解方程组了。中间没有需要初始参数的环节啊。

出0入25汤圆

发表于 2012-6-16 23:10:37 | 显示全部楼层
写繁体的那牛,是否是台湾的?

或者是 台湾人在广州工作

出0入0汤圆

发表于 2012-6-17 00:57:26 | 显示全部楼层
本帖最后由 g921002 于 2012-6-17 11:49 编辑
js200300953 发表于 2012-6-16 22:59
论坛果然是学习的好地方,多谢g921002指正。
上面这些都是在不懂的情况下,自己独立推导出来的,觉得展开 ...


你作偏導的地方,在非線性作小二乘來說是做其函數的Jacobian,物理意義是非線性參數方程式的偏導。如果你的V0=[a0 b0 c0 d0 e0 f0]沒有實際的值。
(前面我的P是指V項量,我看錯了XD,已修訂)P是它的Jacobian,透過它的Jacobian Matrix A尋找下一次的修訂量。所以v和p的維度"一樣",不一樣就表示推導有問題。
如果你的V0沒有初值,你的Jacobian就有問題。

另外你偏導的地方有點奇怪。
F(p)=(ax+d)^2+(by+e)^2+(cz+f)^2 - G0^2. <-- 這裡簡化問題Let G0 = 1; 用1的好處是不管乘方還是開方其值不變,沒有精度損失的問題。
F(p)=(ax+d)^2+(by+e)^2+(cz+f)^2 - 1

J = [ dF/da dF/db dF/dc dF/de dF/dE dF/df]  <-- 偏微符號不好打將就一下

dF/da = 2(ax+d)x, 其他以此類推,裡面的a和d是需要賦予初值的。而你在求偏導時,Δn省略了,使的你的p跟v的係數無關,但是不可能無關,因為P是V的偏導函數。x,y,z可以從感測器讀得,可是裡面的a,b,c,d,e,f,需要給值,因模型是非線性的(橢球),這些參數不會消失.所以目標應該是解(A+uI)h=-g得到h,其中g = J^TF。u的係數可以視作NN裡面的學習系數,或是damping係數。

v_new = v + h 去疊代計算,你沒有疊代近似這個非線性系統(我沒看到疊代過程),而是將Δn忽略,直接解Av=0,認為系統是一階而直接求解而得到一個解,這個解是不是最佳解?Who knows?不過顯然你用了沒問題。 這也是你沒有初值的原因。因為你讓Δn=1,其實就隱性的賦予初值。

以上沒有講得很清楚(懶~~)參考看看就好。這東西推導滿討厭的,得出來的結果只比用統計分佈的準一點點而已。除非要作Real time校正,不然C/P太低。

以加速規來說,目前MEMS技術成熟,其實輸出都很穩定,基本上offset用 (Max+Min)/2,scalar 用(Max-Min)/2 作出來的結果跟用非線性最小二乘的最佳解差不到哪裡。
你看你1g的輸出也不過277,如果誤差1LSB的化,角度誤差就在+-0.4度。浮點計算越多越麻煩。





出0入0汤圆

 楼主| 发表于 2012-6-17 10:08:26 | 显示全部楼层
g921002 发表于 2012-6-17 00:57
你作偏導的地方,在非線性作小二乘來說是做其函數的Jacobian,物理意義是非線性參數方程式的偏導。如果你 ...

看不懂,大致了解。

对。直接用[a',b',c',...]求偏导非线性,不会求,所以才耍耍小聪明,展开,然后对[a,b,a,...]求偏导,这样就线性了。
后来也发现,这样很可能不是最优解,但运算大大简化,甚至可以在单片机上实现(online嘛)。
指标选为平方差的平方和应该也是有问题的,但道不出个所以然。

我解方程的方法是把增广矩阵化行最简,有考虑浮点数误差的。

至于G0,那是需要的,因为[a',b',c',...]都是带单位的,用x'=a'*x+d算出来的x‘就是实际的加速度,m/s²。
(上面的结果,a'=0.0369391等,就是DataSheet的精度9.8/256≈0.038 m/s²)
用1代替也可以,到最后要全部系数再乘以G0。

出0入0汤圆

发表于 2012-6-17 18:36:21 | 显示全部楼层
我想问的是四轴开了电机后测试的值还能准吗?

出0入0汤圆

 楼主| 发表于 2012-6-17 18:46:22 | 显示全部楼层
xue_xi_zhong 发表于 2012-6-17 18:36
我想问的是四轴开了电机后测试的值还能准吗?

这个只是标定,到时还要滤波等。
我刚开始着手做四轴,正在想姿态融合算法,电机都还没买。
准不准暂不知道,到时测试的时候我再写出来。
之后有任何进展都会共享出来的,有兴趣的大家就一起研究吧。

出0入0汤圆

发表于 2012-6-17 21:52:13 | 显示全部楼层
js200300953 发表于 2012-6-17 18:46
这个只是标定,到时还要滤波等。
我刚开始着手做四轴,正在想姿态融合算法,电机都还没买。
准不准暂不知 ...

我搞四轴也快两个月了,勉强能飞起来了,目前只用了陀螺仪基本能飞,加速度传感器其实不开电机的话得到的角度基本上准确了,只是开了电机后很飘,滤波也很麻烦,没找到一个合适的,论坛又很少说到重点的

出0入0汤圆

 楼主| 发表于 2012-6-17 22:11:43 | 显示全部楼层
xue_xi_zhong 发表于 2012-6-17 21:52
我搞四轴也快两个月了,勉强能飞起来了,目前只用了陀螺仪基本能飞,加速度传感器其实不开电机的话得到的 ...

我的目标不是用遥控飞,而是要实现设定轨迹飞行,所以对传感器和姿态处理要求高。

出0入0汤圆

发表于 2012-6-18 09:37:22 | 显示全部楼层
js200300953 发表于 2012-6-17 22:11
我的目标不是用遥控飞,而是要实现设定轨迹飞行,所以对传感器和姿态处理要求高。 ...

厉害,但愿你真能实现了

出0入0汤圆

发表于 2012-6-18 22:21:04 | 显示全部楼层
有没有优化后的算法,嵌入式里这么大量的运算不把MCU给算死啊

出0入0汤圆

发表于 2012-6-18 22:24:50 | 显示全部楼层
bygreencn 发表于 2012-6-18 22:21
有没有优化后的算法,嵌入式里这么大量的运算不把MCU给算死啊

還好吧!?又不是一邊飛一邊校正。

出0入0汤圆

 楼主| 发表于 2012-6-19 10:23:46 | 显示全部楼层
g921002 发表于 2012-6-18 22:24
還好吧!?又不是一邊飛一邊校正。

对,仅仅是起飞前校正一下。

出0入0汤圆

发表于 2012-7-17 22:13:36 | 显示全部楼层
   还是要好好学数学   。。。。。                                                                           

出0入0汤圆

发表于 2012-7-22 17:09:29 | 显示全部楼层
牛~~
牛啊~~~~

出0入0汤圆

发表于 2012-7-24 14:22:11 | 显示全部楼层
学习了!!!

出0入0汤圆

发表于 2012-8-1 19:54:36 | 显示全部楼层
g921002 发表于 2012-6-17 00:57
你作偏導的地方,在非線性作小二乘來說是做其函數的Jacobian,物理意義是非線性參數方程式的偏導。如果你 ...

你说的 和 他 做 的不一样,你是用非线性最小二乘,他是变换成线性最小二乘的。

出0入0汤圆

发表于 2012-8-1 19:58:46 | 显示全部楼层
js200300953 发表于 2012-6-16 09:32
对于I,g是变量。

方程的确是有冗余的,我们需要的是[a',b',c',d',e',f'],只有6个自由度,而方程组有7个 ...

看不懂,你的g是怎么求出来的,你让最后一行为0,你的g也没法求出啊?
头像被屏蔽

出0入0汤圆

发表于 2012-8-1 20:45:09 | 显示全部楼层
软件这样的编程融合了高等数学,档次不一样。
很少有这样子的体会。
头像被屏蔽

出0入0汤圆

发表于 2012-8-1 20:46:31 | 显示全部楼层
应该也有应用到线性代数的知识。

出0入0汤圆

 楼主| 发表于 2012-8-1 21:04:24 | 显示全部楼层
yexs_ty 发表于 2012-8-1 19:58
看不懂,你的g是怎么求出来的,你让最后一行为0,你的g也没法求出啊?

我“令”它为1了
下面这一段就是设置任意常数的,如果有,就取为1。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-8-1 23:04:20 | 显示全部楼层
yexs_ty 发表于 2012-8-1 19:54
你说的 和 他 做 的不一样,你是用非线性最小二乘,他是变换成线性最小二乘的。 ...

1.模型是非線性的。
2.梯度下降求解是要遞迴方式去收斂,只是原PO做一次。
上面是很標準的非線形最小二乘教科書的東西,如果遞迴做了收斂,可轉成成高斯牛頓法或Levenberg-Maequardt Method去收斂函數。
線性最小二乘不是這樣做的。教科書的東西我懶的網路教學,要麻煩你自己去體會了。^_^



出0入0汤圆

发表于 2012-8-3 15:14:39 | 显示全部楼层
继续提问,关于HMC5883L的校准,我看一篇文档,是用这样的方法

The compass calibration shall be initiated by a user command that put the compass intothe calibrtion mode. Once in that mode the compass shall be rotated through 360degrees abouth the Forward or Left direction followed by a 360 rotation about the Up-Down direction. That is, there are two full rotations required to complete the physicalmovement required. At the end of the rotations a command to end the calibrationprocess shall be issed by the user to the compass.
It is important to keep the Forward (or Left ) axis level diring the first rotation and tokeep the Up-Down axis vertical during the secon calibration and until the ful calibrtion iscomplete. Failure to follow these process will result in less than optimal calibration andheading errors are likely.
Forward

而我看你的方法,貌似是需要在空间中旋转,找出X,Y,Z三个轴向的最大最小值?

但是,旋转台不是人人都有的,那么,抛开后面的计算,你采集数据的具体做法是怎样的?

出0入0汤圆

发表于 2012-8-3 15:54:04 | 显示全部楼层
oh my god,数学老师死的早!

出0入0汤圆

 楼主| 发表于 2012-8-3 19:09:05 | 显示全部楼层
fsswl 发表于 2012-8-3 15:14
继续提问,关于HMC5883L的校准,我看一篇文档,是用这样的方法

The compass calibration shall be initiated  ...

那个英文的校正方法不理解。
我的方法不需要最小最大值啊,更不需要转台。
获取数据的方法是用SD卡。

出0入0汤圆

发表于 2012-8-4 18:39:50 | 显示全部楼层
js200300953 发表于 2012-8-3 19:09
那个英文的校正方法不理解。
我的方法不需要最小最大值啊,更不需要转台。
获取数据的方法是用SD卡。 ...

磁阻传感器和加速度传感器不同的地方就是由于摆放的位置的不确定性所以没有initial guess去快速收敛最佳解(不像加速度传感器那样,可以认为重力加速到竖直向下),在没有所谓的旋转台下,楼主的方法真的是一个非常好的校正方法,学习了!!楼主的数学功底就是好,数据融合部分也实现了楼主的效果,谢谢楼主指点!

出0入0汤圆

 楼主| 发表于 2012-8-4 19:38:59 | 显示全部楼层
fsswl 发表于 2012-8-4 18:39
磁阻传感器和加速度传感器不同的地方就是由于摆放的位置的不确定性所以没有initial guess去快速收敛最佳 ...

多谢。
现在在思考控制算法,一起玩吧。

出0入0汤圆

发表于 2012-8-4 20:45:14 | 显示全部楼层
呵呵 正好复习数学
头像被屏蔽

出0入0汤圆

发表于 2012-8-10 14:01:24 | 显示全部楼层
COOL!

出0入0汤圆

发表于 2012-8-10 15:28:25 | 显示全部楼层
lz牛,先mark后看。

出0入0汤圆

 楼主| 发表于 2012-8-10 15:45:23 | 显示全部楼层
armok 发表于 2012-8-10 14:01
COOL!

多谢阿莫。

出0入0汤圆

发表于 2012-8-10 16:11:07 | 显示全部楼层
js200300953 发表于 2012-8-4 19:38
多谢。
现在在思考控制算法,一起玩吧。

看到有些人用重力加速度计做水平仪
不知道算法是怎么实现的,楼主有这方面经验没?

出0入0汤圆

 楼主| 发表于 2012-8-10 16:22:17 | 显示全部楼层
a_2012_m 发表于 2012-8-10 16:11
看到有些人用重力加速度计做水平仪
不知道算法是怎么实现的,楼主有这方面经验没? ...

原理上是可以的。
我没做过。
思路应该就是测量倾角,把倾角调到0或安装的角度,平台就水平了。关键是精度。

出0入0汤圆

发表于 2012-8-10 16:30:55 | 显示全部楼层
数死早

出0入0汤圆

 楼主| 发表于 2012-8-12 17:11:12 | 显示全部楼层
更正公式:
    原来:
    更正为:
多谢螃蟹指正。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-11-7 19:02:03 | 显示全部楼层
刚开始做,学习中
头像被屏蔽

出0入0汤圆

发表于 2012-11-7 19:25:02 | 显示全部楼层
楼主厉害啊~~哈哈

出0入0汤圆

发表于 2012-11-7 19:41:48 | 显示全部楼层
没怎么看懂,顶俊哥

出0入0汤圆

发表于 2012-11-7 22:11:21 | 显示全部楼层
mark~~~~~~~~~~~~~~~

出0入0汤圆

发表于 2012-11-7 22:53:56 | 显示全部楼层
比较笨,只能先Mark

出0入0汤圆

发表于 2012-11-11 23:06:52 | 显示全部楼层
毕设中也涉及到这部分了,又回忆了一遍

出0入0汤圆

发表于 2012-11-12 13:45:35 | 显示全部楼层
相当的不错的

出0入0汤圆

发表于 2012-12-20 21:41:10 | 显示全部楼层
看了一遍,木有看懂的。数学底子差,再看,再看

出0入0汤圆

发表于 2012-12-20 22:07:57 | 显示全部楼层
书到用时方恨少啊

出0入0汤圆

发表于 2012-12-29 11:30:14 | 显示全部楼层
mark

出0入0汤圆

发表于 2013-1-22 20:53:13 | 显示全部楼层
本文讲的那个A是不是这样得到的?即:获取的加速计的X Y Z输出数据得到之后,然后求出那个7X7的方阵,然后把14339个方阵加起来,得到A。

出0入0汤圆

 楼主| 发表于 2013-1-22 22:21:33 | 显示全部楼层
lxl_lw 发表于 2013-1-22 20:53
本文讲的那个A是不是这样得到的?即:获取的加速计的X Y Z输出数据得到之后,然后求出那个7X7的方阵,然后 ...

是的。   

出0入0汤圆

发表于 2013-2-20 10:54:12 | 显示全部楼层
n你是怎么知道磁场方向与水平方向和重力方向的夹角各位45°呢?

出0入0汤圆

 楼主| 发表于 2013-2-20 20:31:00 | 显示全部楼层
chenghailin66 发表于 2013-2-20 10:54
n你是怎么知道磁场方向与水平方向和重力方向的夹角各位45°呢?

实际测的。

出0入0汤圆

发表于 2013-2-23 17:11:44 | 显示全部楼层
function [product] = js_quatMult(left,right)
    product(1,1) = left(1)*right(1) - left(2)*right(2) - left(3)*right(3) - left(4)*right(4);
    product(1,2) = left(1)*right(2) + left(2)*right(1) + left(3)*right(4) - left(4)*right(3);
    product(1,3) = left(1)*right(3) - left(2)*right(4) + left(3)*right(1) + left(4)*right(2);
    product(1,4) = left(1)*right(4) + left(2)*right(3) - left(3)*right(2) + left(4)*right(1);
endfunction
其中tmp = js_quatMult(atti_esti(i-1,:),[1,g_val(i-1,:) .* (PERIOD_FAST/2)])中的[1,g_val(i-1,:) .* (PERIOD_FAST/2)]代表什么呢?1是怎么来的?如何得到积分后的四元数?

出0入0汤圆

发表于 2013-2-23 17:36:25 | 显示全部楼层
写的很好,学习了

出0入0汤圆

 楼主| 发表于 2013-2-23 18:16:11 | 显示全部楼层
chenghailin66 发表于 2013-2-23 17:11
function  = js_quatMult(left,right)
    product(1,1) = left(1)*right(1) - left(2)*right(2) - left(3) ...

参考http://www.amobbs.com/thread-5483278-1-1.html的“快速融合”

出0入0汤圆

发表于 2013-2-26 16:44:30 | 显示全部楼层
搞这玩意需要数学好啊。  大一努力的学高数, 也不知道这玩意用在哪, 老师还是教材编纂人呢好像  大二就还回去了。

出0入0汤圆

发表于 2013-3-11 10:54:39 | 显示全部楼层
好贴,学习了!

出0入0汤圆

发表于 2013-6-19 03:56:28 | 显示全部楼层
为什么标定出来,G大约是100?

出0入0汤圆

 楼主| 发表于 2013-6-19 08:24:31 | 显示全部楼层
lxl_lw 发表于 2013-6-19 03:56
为什么标定出来,G大约是100?

我不知道你的具体情况。你可以用我的上位机试试。
1.点“校正”按钮。
2.转到“采集”面板。
3.输入样本。
4.转到“计算”面板“。
5.输入“目标球半径”。
6.点“计算椭球参数“。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-6-19 13:21:20 | 显示全部楼层
js200300953 发表于 2013-6-19 08:24
我不知道你的具体情况。你可以用我的上位机试试。
1.点“校正”按钮。
2.转到“采集”面板。

谢谢楼主,楼主真大乃好人也~ 我在计算中,把G0取成9.7938,计算出来的G是98左右。如果把G0取成1,计算出来的是则是9.79左右,好像楼主计算时取值是1?有一个论文叫“微机电三轴加速度计的无转台标定”,里面计算出来的也是100左右,但是论文中只是说计算出来的单位是g/100...不是很理解的样子。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-6-19 17:30:58 | 显示全部楼层
lxl_lw 发表于 2013-6-19 13:21
谢谢楼主,楼主真大乃好人也~ 我在计算中,把G0取成9.7938,计算出来的G是98左右。如果把G0取成1 ...

G0即为目标球半径,我取9.7883的,校正后,数据的平均长度也是这个。

出0入0汤圆

 楼主| 发表于 2013-6-19 17:34:54 | 显示全部楼层
这篇文章的方法不够严格,可以看看这篇论文。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-6-20 10:41:21 | 显示全部楼层
貌似很深奥啊,收藏研究研究

出0入0汤圆

发表于 2013-7-27 14:42:00 | 显示全部楼层
js200300953 发表于 2013-6-19 17:34
这篇文章的方法不够严格,可以看看这篇论文。

请问下 那7*7的齐次线性方程组 的算法怎么求?不太明白

出0入0汤圆

发表于 2013-7-27 16:48:28 | 显示全部楼层
感谢分享!

出0入0汤圆

 楼主| 发表于 2013-7-28 20:03:42 | 显示全部楼层
小伙仔小明 发表于 2013-7-27 14:42
请问下 那7*7的齐次线性方程组 的算法怎么求?不太明白

这几天发现,论文中的方法也是不大好的,绕了一圈,可以直接最小二乘的。
解方程就是高斯消元法。

出0入0汤圆

发表于 2013-7-29 08:37:38 | 显示全部楼层
js200300953 发表于 2013-7-28 20:03
这几天发现,论文中的方法也是不大好的,绕了一圈,可以直接最小二乘的。
解方程就是高斯消元法。 ...

最小二乘法?可以说一下大概吗?
就上面那个 解7*7的齐次线性方程组,一般算出来答案不是零吗? 要怎么处理才有非零解?

出0入0汤圆

 楼主| 发表于 2013-7-30 20:32:50 | 显示全部楼层
小伙仔小明 发表于 2013-7-29 08:37
最小二乘法?可以说一下大概吗?
就上面那个 解7*7的齐次线性方程组,一般算出来答案不是零吗? 要怎么处 ...

怎么有非零解,文中有讲。

出0入0汤圆

发表于 2013-7-31 16:34:17 | 显示全部楼层
js200300953 发表于 2013-7-30 20:32
怎么有非零解,文中有讲。

把楼主这个贴和原贴的评论都看了好几十遍了 还是看不太懂
现在只做到行化简 后面就不知道怎么做了

而且不知道这样行化简对不对

楼主可以在说清楚一点点吗  行化简后真心看不懂。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-7-31 23:51:36 | 显示全部楼层
小伙仔小明 发表于 2013-7-31 16:34
把楼主这个贴和原贴的评论都看了好几十遍了 还是看不太懂
现在只做到行化简 后面就不知道怎么做了

如果你想自己实现高斯消元法,建议看看《线性代数》。
如果只想算出结果,Scilab或Matlab一条命令可以得到结果。

高斯消元法其实跟手工解方程的思路是一样的:
1.先逐个把变量消掉,就是行化简的过程,使下三角变为0。
2.得到一个变量的值后,就可以开始“回代”了,就是化行最简的过程,使上三角变为0。
3.如果方程组是非齐次的,最后一列就是各个变量的解。但我们这里是齐次的,通常没有唯一解,要“作弊”取近似解。

最后重申多次:本文的方法绕了一圈,不推荐使用!

出0入0汤圆

发表于 2013-8-1 10:40:31 | 显示全部楼层
js200300953 发表于 2013-7-31 23:51
如果你想自己实现高斯消元法,建议看看《线性代数》。
如果只想算出结果,Scilab或Matlab一条命令可以得 ...

昨天花了一个多小时 用穷举法 得到6个参数的值。。。。误差0.1%   


主要用到这条公式 得到计算的加速度与当地加速度的偏差,通过对每个测量值计算,得到平均误差
在用穷举。“暴力破解”出6个参数的值。。。。误差收敛到可接受的范围就可以停了。

没用任何技术含量

不想在纠结加速度的标定了。。。。。继续姿态算法 多多指教

在次感谢楼主

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-8-1 23:44:08 | 显示全部楼层
小伙仔小明 发表于 2013-8-1 10:40
昨天花了一个多小时 用穷举法 得到6个参数的值。。。。误差0.1%   

汗,暴力。

出0入0汤圆

发表于 2013-8-2 09:28:09 | 显示全部楼层
js200300953 发表于 2013-8-1 23:44
汗,暴力。

可想而知我当时有多抓狂。。。。。。    我想问下  楼主现在是用什么传感器的?可以说下型号吗?我用MPU6050,加速度阈值太大了。。。从上位机看到是0.06左右。。。无法用于导航中。。。

出0入0汤圆

 楼主| 发表于 2013-8-2 20:52:19 | 显示全部楼层
小伙仔小明 发表于 2013-8-2 09:28
可想而知我当时有多抓狂。。。。。。    我想问下  楼主现在是用什么传感器的?可以说下型号吗 ...

就是MPU6050

出0入0汤圆

发表于 2013-8-5 09:57:18 | 显示全部楼层
js200300953 发表于 2013-8-2 20:52
就是MPU6050

楼主有在弄惯性导航吗 MPU6050精度好像不够吧?   看过楼主说 要搞脱控飞行 不知道做的怎么样了?

出0入0汤圆

发表于 2013-8-5 16:01:24 | 显示全部楼层
js200300953 发表于 2013-8-2 20:52
就是MPU6050

问个问题:
我更新完四元数后 要怎么将机体坐标系得到的加速度转到地理坐标系的加速度?


不知道这里面哪里错了。。。直接套公式都有问题。。。求解

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-8-5 19:37:53 | 显示全部楼层
小伙仔小明 发表于 2013-8-5 09:57
楼主有在弄惯性导航吗 MPU6050精度好像不够吧?   看过楼主说 要搞脱控飞行 不知道做的怎么样了? ...

刚开始工作,没心思玩了。

出0入0汤圆

 楼主| 发表于 2013-8-5 19:38:20 | 显示全部楼层
小伙仔小明 发表于 2013-8-5 16:01
问个问题:
我更新完四元数后 要怎么将机体坐标系得到的加速度转到地理坐标系的加速度?

不明白你在说什么。

出0入0汤圆

发表于 2013-8-5 20:49:30 | 显示全部楼层
js200300953 发表于 2013-8-5 19:37
刚开始工作,没心思玩了。

哦哦哦 看来我比楼主幸运  工作是自己喜欢做的东西

出0入0汤圆

发表于 2013-8-5 20:50:27 | 显示全部楼层
js200300953 发表于 2013-8-5 19:38
不明白你在说什么。

http://www.amobbs.com/forum.php? ... p;page=1#pid6869557

出0入0汤圆

发表于 2013-8-8 20:57:54 | 显示全部楼层
g921002 发表于 2012-6-17 00:57
你作偏導的地方,在非線性作小二乘來說是做其函數的Jacobian,物理意義是非線性參數方程式的偏導。如果你 ...

你好  看了你的分析  还是不怎么懂啊   楼主求线性方程组时好像没有用牛顿迭代、高斯消元、更没用雅可比迭代吧  所以他没有初始值 而且如果真用的话高斯-赛德尔迭代比雅可比迭代更好吧 不过更好的我觉得是SOR迭代  回归正题 您所说的 依datasheet 里面的(实际我在应用笔记里面看到的)校准的话 有一种更精准的校验法 即将轴置于+g、-g场中分别读A[+g]=Aoff+1g*Gain、A[+g]=Aoff-1g*Gain   再求·····  可是  我很愚钝哦  我一直不知道这所说的将轴置于+g、-g场如何放?目测吗?怎么知道轴已经在+g、-g方向了?

出0入0汤圆

发表于 2013-8-8 21:14:45 | 显示全部楼层
js200300953 发表于 2013-7-28 20:03
这几天发现,论文中的方法也是不大好的,绕了一圈,可以直接最小二乘的。
解方程就是高斯消元法。 ...

SOR迭代更好

出0入0汤圆

发表于 2013-8-30 17:59:17 | 显示全部楼层
小伙仔小明 发表于 2013-8-5 16:01
问个问题:
我更新完四元数后 要怎么将机体坐标系得到的加速度转到地理坐标系的加速度?

四元数有归一化过吗?

出0入0汤圆

发表于 2013-9-1 20:08:06 | 显示全部楼层
FYWS 发表于 2013-8-30 17:59
四元数有归一化过吗?

有归一。。。。。。。。。。。

出0入0汤圆

发表于 2013-10-25 22:20:37 | 显示全部楼层
想问一下楼主,你用什么控制?

出0入0汤圆

 楼主| 发表于 2013-10-25 23:06:09 | 显示全部楼层
lijia115003 发表于 2013-10-25 22:20
想问一下楼主,你用什么控制?

如果你是指四轴的控制器,就是最简单的PID

出0入0汤圆

发表于 2013-11-27 09:36:10 | 显示全部楼层
不错不错,正在学习中,希望能得到比较好的效果,谢谢分享了!

出0入0汤圆

发表于 2014-2-8 13:45:39 | 显示全部楼层
不明觉厉 ,数学渣,软件渣,几何渣,前来膜拜。

出0入0汤圆

发表于 2014-4-16 09:03:05 | 显示全部楼层
极少见的精华帖子。

出0入0汤圆

发表于 2014-4-16 09:59:55 | 显示全部楼层
好东西。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 08:42

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表