chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

利用Cordic算法來(lái)進(jìn)行姿態(tài)解算

FPGA研究院 ? 來(lái)源:FPGA之旅 ? 2023-07-04 09:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

二. 踩坑分享

在進(jìn)行姿態(tài)解算分享之前,先分享一個(gè)踩坑經(jīng)歷。一般來(lái)說(shuō)MPU6050的ID讀出為0x68,淘寶上買(mǎi)到的模塊,基本上都是這個(gè)。但是我使用的是自己畫(huà)的PCB,手動(dòng)焊接的,在讀取ID的時(shí)候,一直為0x98,但是認(rèn)知中要為0x68才是對(duì)的,這個(gè)時(shí)候就會(huì)懷疑是不是自己的程序或者焊接的問(wèn)題了。但好在后面讀取六軸數(shù)據(jù),姿態(tài)解算后得到的角度基本是正確的(折騰了一天了,才發(fā)現(xiàn))。這是個(gè)坑,大家可以注意一下。

三. 姿態(tài)解算

所謂姿態(tài)解算就是通過(guò)六軸的數(shù)據(jù),來(lái)求解物體的三個(gè)角度: roll , pitch , yaw。

1. 通過(guò)加速度求解

先看一下加速度求解角度的表達(dá)式(通過(guò)加速度是無(wú)法求解yaw的)。atan(acc_y / acc_x)和sqrt(acc_y*acc_y + acc_z * acc_z)不就是上篇中Cordic算法求解的值嗎,都不需要使用的其他的計(jì)算。

roll = atan(acc_y / acc_x);
pitch = atan(acc_x / (sqrt(acc_y*acc_y + acc_z * acc_z)));

2. 通過(guò)角速度求解

通過(guò)角速度的求解就更簡(jiǎn)單了,只需要將當(dāng)前角度加上(角速度×dt)就可以。角速度求解的時(shí)候會(huì)有些問(wèn)題,在靜態(tài)的時(shí)候,角速度會(huì)有零漂,這個(gè)時(shí)候角度誤差會(huì)越來(lái)越大。

3. 融合

可以看到有上面的兩種方法求解角度,可以單獨(dú)使用,但是可能會(huì)不太準(zhǔn)確,精度要求不高的場(chǎng)合可以只使用加速度求解。在精度要求比較高的場(chǎng)合下,需要使用這兩種方法求解,然后再將求得的結(jié)果進(jìn)行融合。常用的方法有: 卡爾曼濾波、一階互補(bǔ)濾波、二階互補(bǔ)濾波。

一階互補(bǔ)濾波,如下,簡(jiǎn)單粗暴。要想濾波效果好的話(huà),可以試試卡爾曼濾波。

roll = a * acc_roll + (1 - a) *gyro_roll;

以上只是一種比較常規(guī)的求解方法,追求高精度的話(huà),可以使用四元數(shù)的方法進(jìn)行求解(復(fù)雜度大大增加)。

四. 代碼實(shí)現(xiàn)

代碼都是現(xiàn)成的,在之前的文章中已經(jīng)寫(xiě)好了,這里做的工作就是將這些模塊組合在一起。

1. 模塊接口

輸入請(qǐng)求,輸出應(yīng)答和三個(gè)角度,角度值擴(kuò)大了2^16倍。

module IMU(
  input            clk,    //27M
  input            rst_n,


  input            imu_req,
  output           imu_ack,


  output signed[31:0]     roll,
  output signed[31:0]     pitch,
  output signed[31:0]     yaw,


  output           IICSCL,       /*IIC 時(shí)鐘輸出*/
  inout            IICSDA       /*IIC 數(shù)據(jù)線(xiàn)*/
);

2. 狀態(tài)機(jī)

這里使用到了兩個(gè)Cordic模塊,第一個(gè)模塊先計(jì)算出roll和sqrt(acc_y*acc_y + acc_z * acc_z)的值,然后第二個(gè)模塊通過(guò)acc_x和sqrt(acc_y*acc_y + acc_z * acc_z)的值 計(jì)算出 pitch的角度。最后對(duì)數(shù)據(jù)經(jīng)過(guò)了一個(gè)簡(jiǎn)單的FIR濾波。

always@(*) begin
  case(state)
  S_IDLE:
    if( imu_req == 1'b1)
      next_state <= S_READ_MPU6050;
 ? ? ? else
 ? ? ? ? ? next_state <= S_IDLE;
 ? S_READ_MPU6050:
 ? ? ? if( mpu6050_ack == 1'b1 )
 ? ? ? ? ? next_state <= S_Cordic;
 ? ? ? else
 ? ? ? ? ? next_state <= S_READ_MPU6050;
 ? S_Cordic:
 ? ? ? if( cordic_ack == 1'b1)
 ? ? ? ? ? next_state <= S_Cordic2;
 ? ? ? else
 ? ? ? ? ? next_state <= S_Cordic;
 ? S_Cordic2:
 ? ? ? if( cordic2_ack == 1'b1)
 ? ? ? ? ? next_state <= S_FILTER;
 ? ? ? else
 ? ? ? ? ? next_state <= S_Cordic2;
 ? S_FILTER:
 ? ? ? if( fir_filter_ack == 1'b1)
 ? ? ? ? ? next_state <= S_ACK;
 ? ? ? else
 ? ? ? ? ? next_state <= S_FILTER;
 ? S_ACK:
 ? ? ? next_state <= S_IDLE;
 ? default: ? ? next_state <= S_IDLE;
 ? endcase
end

3. 融合

這里的融合,暫時(shí)沒(méi)有做,只對(duì)加速度求解的角度進(jìn)行了一個(gè)濾波處理,后面會(huì)根據(jù)需要再進(jìn)行更新。

FIR_Filter FIR_Filter_HP(


  .clk            (      clk       ),
  .rst_n           (      rst_n      ),


  .fir_filter_req       (      fir_filter_req ),
  .fir_filter_ack       (      fir_filter_ack ),


  .filter_data_in       (      theta      ),
  .filter_data_out      (      acc_roll    )
);




FIR_Filter FIR_Filter_HP2(


  .clk            (      clk       ),
  .rst_n           (      rst_n      ),


  .fir_filter_req       (      fir_filter_req ),
  .fir_filter_ack       (              ),


  .filter_data_in       (      theta2      ),
  .filter_data_out      (      acc_pitch    )
);



模塊已上板測(cè)試,解算出來(lái)的角度沒(méi)有問(wèn)題(可能精度不是那么完美,濾波與融合那里需要下點(diǎn)功夫)。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1650

    文章

    22204

    瀏覽量

    626669
  • CORDIC算法
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    9931
  • MPU6050
    +關(guān)注

    關(guān)注

    39

    文章

    310

    瀏覽量

    74024
  • 姿態(tài)解算
    +關(guān)注

    關(guān)注

    0

    文章

    49

    瀏覽量

    8569

原文標(biāo)題:FPGA實(shí)現(xiàn)MPU6050姿態(tài)解算

文章出處:【微信號(hào):FPGA研究院,微信公眾號(hào):FPGA研究院】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    mpu6050姿態(tài)問(wèn)題

    如題,我在用互補(bǔ)濾波和四元數(shù)算法mpu6050的角度姿態(tài)。但是現(xiàn)在的問(wèn)題是,一旦我的mpu6050轉(zhuǎn)動(dòng)速度一快,輸出的數(shù)據(jù)就會(huì)出現(xiàn)問(wèn)題。如下圖.前面3欄,分別是xyz的角度。轉(zhuǎn)動(dòng)的
    發(fā)表于 05-09 18:33

    四軸姿態(tài)

    mpu6050姿態(tài),內(nèi)部DMP輸出。上位機(jī)為匿名的上位機(jī)。
    發(fā)表于 06-14 17:15

    【CANNON申請(qǐng)】姿態(tài)

    申請(qǐng)理由:這款開(kāi)發(fā)板的硬件非常適合我現(xiàn)在在做姿態(tài)設(shè)計(jì),再加上自有的mpu6050 gps,可以用來(lái)測(cè)試姿態(tài)
    發(fā)表于 01-26 13:58

    請(qǐng)問(wèn)MPU6050的軟件姿態(tài)和DMP姿態(tài)各自的優(yōu)缺點(diǎn)是什么?

    MPU6050有軟件姿態(tài)和DMP姿態(tài),他們各自的優(yōu)缺點(diǎn)是什么呢?因?yàn)榇蠹叶贾赖氖荄MP
    發(fā)表于 05-29 04:36

    姿態(tài)算法和kalman對(duì)加速度進(jìn)行處理的資料分享!

    分享一波資料,姿態(tài)算法和kalman對(duì)加速度進(jìn)行處理的,效果都試過(guò)還行,源碼可直接使用程序源碼.rar (3.56 KB )
    發(fā)表于 07-31 04:36

    Pixhawk代碼分析-姿態(tài)篇A 精選資料推薦

    姿態(tài)篇A基本知識(shí)1、如何實(shí)現(xiàn)控制一個(gè)無(wú)人機(jī)系統(tǒng)的算法主要有兩類(lèi):姿態(tài)檢測(cè)算法、
    發(fā)表于 08-09 08:09

    MPU6050姿態(tài)的原理是什么

    MPU6050姿態(tài)的原理是什么?MPU6050姿態(tài)的程序該如何去是實(shí)現(xiàn)呢?
    發(fā)表于 12-17 07:14

    姿態(tài)算法模塊理解

    了解或想開(kāi)發(fā)無(wú)人機(jī)的朋友肯定繞不過(guò)姿態(tài)這茬,花點(diǎn)時(shí)間去了解它們?cè)聿⒉浑y,這里提供兩個(gè)原理鏈接供大家參考:四元數(shù)表示旋轉(zhuǎn)的理解四旋翼姿態(tài)
    發(fā)表于 01-11 07:06

    使用MPU9250來(lái)學(xué)習(xí)姿態(tài)

    最近在使用MPU9250來(lái)學(xué)習(xí)姿態(tài),查詢(xún)了非常多的網(wǎng)上關(guān)于MPU6050和MPU9250的資料,發(fā)現(xiàn)內(nèi)置的DMP可以計(jì)算出姿態(tài)角,可原代
    發(fā)表于 02-10 06:29

    FPGA實(shí)現(xiàn)MPU6050姿態(tài)

    一. 簡(jiǎn)介 在之前的文章中(很久之前了,已經(jīng)通過(guò)FPGA獲取到了MPU6050的六軸數(shù)據(jù): 三軸加速 和 三軸角速度,但是沒(méi)有對(duì)它進(jìn)行然后處理。那么在本篇文章中,將利用Cordic算法
    發(fā)表于 06-08 13:49

    基于Runge-Kutta算法的無(wú)人機(jī)姿態(tài)

    。首先根據(jù)前人的研究成果實(shí)現(xiàn)姿態(tài)角的比卡逼近法,然后引入Runge-Kutta算法,推導(dǎo)出小型無(wú)人機(jī)姿態(tài)角更新的
    發(fā)表于 11-02 16:03 ?6次下載
    基于Runge-Kutta<b class='flag-5'>算法</b>的無(wú)人機(jī)<b class='flag-5'>姿態(tài)</b>角<b class='flag-5'>解</b><b class='flag-5'>算</b>

    基于MPU6050的四軸硬件姿態(tài)研究

    針對(duì)四軸飛行器姿態(tài)信息的實(shí)時(shí)準(zhǔn)確獲取問(wèn)題,對(duì)四軸飛行器的姿態(tài)方面進(jìn)行了研究。在分析姿態(tài)表示的
    發(fā)表于 03-08 09:19 ?7次下載
    基于MPU6050的四軸硬件<b class='flag-5'>姿態(tài)</b><b class='flag-5'>解</b><b class='flag-5'>算</b>研究

    mpu6050姿態(tài)原理_mpu6050姿態(tài)程序

    mpu6050常用作提供飛控運(yùn)行時(shí)的姿態(tài)測(cè)量和計(jì)算。本文首先介紹了MPU6050姿態(tài)的原理,其次詳細(xì)的介紹了mpu6050姿態(tài)
    的頭像 發(fā)表于 03-09 09:15 ?4.5w次閱讀

    如何使用互補(bǔ)濾波器進(jìn)行四旋翼飛行器的姿態(tài)資料說(shuō)明

    針對(duì)小型四旋翼飛行器姿態(tài)這一基本問(wèn)題,詳細(xì)分析了姿態(tài)的過(guò)程,提出了其中的難點(diǎn)問(wèn)題。應(yīng)用低
    發(fā)表于 04-08 08:00 ?1次下載

    MPU6050使用互補(bǔ)濾波與卡爾曼濾波算法進(jìn)行姿態(tài)

    MPU6050使用互補(bǔ)濾波與卡爾曼濾波算法進(jìn)行姿態(tài)
    發(fā)表于 08-07 15:46 ?17次下載