arduino定位專題及常見問題 - CSDN

2021-01-09 CSDN技術社區

姿態解算代碼

#include "Wire.h"#include "I2Cdev.h"unsigned long now, lastTime = 0;float dt; //微分時間int16_t ax, ay, az, gx, gy, gz; //加速度計陀螺儀原始數據float aax=0, aay=0,aaz=0, agx=0, agy=0, agz=0; //角度變量long axo = 0, ayo = 0, azo = 0; //加速度計偏移量long gxo = 0, gyo = 0, gzo = 0; //陀螺儀偏移量float pi = 3.1415926;float AcceRatio = 16384.0; //加速度計比例係數float GyroRatio = 131.0; //陀螺儀比例係數uint8_t n_sample = 8; //加速度計濾波算法採樣個數float aaxs[8] = {0}, aays[8] = {0}, aazs[8] = {0}; //x,y軸採樣隊列long aax_sum, aay_sum,aaz_sum; //x,y軸採樣和float a_x[10]={0}, a_y[10]={0},a_z[10]={0} ,g_x[10]={0} ,g_y[10]={0},g_z[10]={0}; //加速度計協方差計算隊列float Px=1, Rx, Kx, Sx, Vx, Qx; //x軸卡爾曼變量float Py=1, Ry, Ky, Sy, Vy, Qy; //y軸卡爾曼變量float Pz=1, Rz, Kz, Sz, Vz, Qz; //z軸卡爾曼變量void setup(){ Wire.begin(); Serial.begin(115200); accelgyro.initialize(); //初始化 unsigned short times = 200; //採樣次數 for(int i=0;i<times;i++) { accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); //讀取六軸原始數值 axo += ax; ayo += ay; azo += az; //採樣和 gxo += gx; gyo += gy; gzo += gz; } axo /= times; ayo /= times; azo /= times; //計算加速度計偏移 gxo /= times; gyo /= times; gzo /= times; //計算陀螺儀偏移}void loop(){ unsigned long now = millis(); //當前時間(ms) dt = (now - lastTime) / 1000.0; //微分時間(s) lastTime = now; //上一次採樣時間(ms) accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); //讀取六軸原始數值 float accx = ax / AcceRatio; //x軸加速度 float accy = ay / AcceRatio; //y軸加速度 float accz = az / AcceRatio; //z軸加速度 aax = atan(accy / accz) * (-180) / pi; //y軸對於z軸的夾角 aay = atan(accx / accz) * 180 / pi; //x軸對於z軸的夾角 aaz = atan(accz / accy) * 180 / pi; //z軸對於y軸的夾角 aax_sum = 0; // 對於加速度計原始數據的滑動加權濾波算法 aay_sum = 0; aaz_sum = 0; for(int i=1;i<n_sample;i++) { aaxs[i-1] = aaxs[i]; aax_sum += aaxs[i] * i; aays[i-1] = aays[i]; aay_sum += aays[i] * i; aazs[i-1] = aazs[i]; aaz_sum += aazs[i] * i; } aaxs[n_sample-1] = aax; aax_sum += aax * n_sample; aax = (aax_sum / (11*n_sample/2.0)) * 9 / 7.0; //角度調幅至0-90° aays[n_sample-1] = aay; //此處應用實驗法取得合適的係數 aay_sum += aay * n_sample; //本例係數為9/7 aay = (aay_sum / (11*n_sample/2.0)) * 9 / 7.0; aazs[n_sample-1] = aaz; aaz_sum += aaz * n_sample; aaz = (aaz_sum / (11*n_sample/2.0)) * 9 / 7.0; float gyrox = - (gx-gxo) / GyroRatio * dt; //x軸角速度 float gyroy = - (gy-gyo) / GyroRatio * dt; //y軸角速度 float gyroz = - (gz-gzo) / GyroRatio * dt; //z軸角速度 agx += gyrox; //x軸角速度積分 agy += gyroy; //x軸角速度積分 agz += gyroz; /* kalman start */ Sx = 0; Rx = 0; Sy = 0; Ry = 0; Sz = 0; Rz = 0; for(int i=1;i<10;i++) { //測量值平均值運算 a_x[i-1] = a_x[i]; //即加速度平均值 Sx += a_x[i]; a_y[i-1] = a_y[i]; Sy += a_y[i]; a_z[i-1] = a_z[i]; Sz += a_z[i]; } a_x[9] = aax; Sx += aax; Sx /= 10; //x軸加速度平均值 a_y[9] = aay; Sy += aay; Sy /= 10; //y軸加速度平均值 a_z[9] = aaz; Sz += aaz; Sz /= 10; for(int i=0;i<10;i++) { Rx += sq(a_x[i] - Sx); Ry += sq(a_y[i] - Sy); Rz += sq(a_z[i] - Sz); } Rx = Rx / 9; //得到方差 Ry = Ry / 9; Rz = Rz / 9; Px = Px + 0.0025; // 0.0025在下面有說明... Kx = Px / (Px + Rx); //計算卡爾曼增益 agx = agx + Kx * (aax - agx); //陀螺儀角度與加速度計速度疊加 Px = (1 - Kx) * Px; //更新p值 Py = Py + 0.0025; Ky = Py / (Py + Ry); agy = agy + Ky * (aay - agy); Py = (1 - Ky) * Py; Pz = Pz + 0.0025; Kz = Pz / (Pz + Rz); agz = agz + Kz * (aaz - agz); Pz = (1 - Kz) * Pz; /* kalman end */ Serial.print(agx);Serial.print(","); Serial.print(agy);Serial.print(","); Serial.print(agz);Serial.println(); }

相關焦點

  • 對抗學習專題及常見問題 - CSDN
    物理世界中的對抗樣本,有列印重照、亮度對比度等調整)【https://blog.csdn.net/u010710787/article/details/78916762】隱馬爾可夫:通過顯序列算隱序列generalization ability 泛化:不要過擬合神經網絡:非線性積累NP完全問題
  • arduino設置串口模式專題及常見問題 - CSDN
    與arduino uno主板不同, ESP32的PWM模擬是一個個通道 共16個, 通道可以映射到引腳上. 引腳就可以輸出PWM信號了.
  • android 監聽屏幕鎖屏專題及常見問題 - CSDN
    > 鎖屏聽音樂(音頻),沒有鎖屏看視頻Android系統亮屏、鎖屏、屏幕解鎖事件(解決部分手機亮屏後未解鎖即進入resume狀態)- http://blog.csdn.net/oracleot/article/details/20378453Android 實現鎖屏的較完美方案- https://segmentfault.com/a/1190000003075989
  • 用Arduino開發物聯網設備之初識Arduino
    這個問題其實是有一點混亂的,因為arduino既可以指硬體,也可以指軟體。它其實是指的即是硬體又是軟體,我們平時所說的多數指的是它的軟體開發平臺,也就是軟體部分。硬體部分:最初Arduino硬體只有那麼幾種,uno、mini等,但是現在經過這麼多年的發展,越來越多的硬體支持了arduino開發環境,所以現在也很難去界定什麼是血統純正的arduino硬體了。
  • element 關鍵字專題及常見問題 - CSDN
    運行結果:Click Image 關鍵字用於點擊頁面上的圖片元素,可以從圖像的關鍵屬性是『ID』,『SRC』和『ALT』進行定位。項目例子:Click Link關鍵字 用於點擊頁面上的文字元素,可以從圖像的關鍵屬性是『id』,『name』和『link text』進行定位。項目例子:
  • android啟動頁設計專題及常見問題 - CSDN
    轉載請註明出處:http://blog.csdn.net/wangjihuanghun/article/details/63255144啟動頁幾乎成為了每個app的標配,有些商家在啟動頁中增加了開屏廣告以此帶來更多的收入。
  • 注重用戶體驗的重要性專題及常見問題 - CSDN
    其實關於這個問題,同行交流時也經常討論,我想分享一些我的個人的淺見,大神們覺得沒用請無視。個人覺得現在的SEO不能再只是為了SEO而做SEO,而是要更注重用戶體驗這一塊兒了。現階段關於網站用戶體驗得分排名而上排名的機率很大。
  • 智能家居控制-arduino紅外基本控制
    智能家居控制系統中最常見的應該就是紅外遙控器了,電視,空調,機頂盒等,基本上常見的只要是遙控控制的都是採用的紅外發射控制。紅外發射,其實就是將要控制的設備,通過遙控的主控晶片發射一組編碼,然後設備接收後進行對應的操作,要想實現智能設備控制就先要知道遙控器發射的是什麼今天這篇文章就是用arduino這個最基本的單片機,來解讀不同遙控器發射出來的編碼,知道編碼後,就可以實現後續使用單片機或者智能音響控制設備。
  • cdn助力專題及常見問題 - CSDN
    本次騰訊雲大學大咖分享《騰訊雲計算人才加速計劃》專題之《CDN邊緣智能助力5G》邀請騰訊雲專家工程師 廖龍 將與大家共探技術與產業發展變化下如何引領時代。本課程主要有三章:5G元年,探索與思考,未來展望。5G元年在過去十年,整個中國網際網路的發展迅速。
  • windows10卡啟動修復專題及常見問題 - CSDN
    在Windows 10上,安全模式允許加載一組基本功能和通用設備驅動程序,足以解決常見的軟體和硬體問題。例如,當計算機無法正常啟動、網絡連接問題以及應用程式或Windows Update無法下載更新時,可以使用安全模式對其進行故障排除。
  • t值判斷顯著性專題及常見問題 - CSDN
    提出問題  顯著性值p是一個很常見的事。比如我們在對比兩組或者是多組數據時,對於兩組而言,會做Two Sample T Test,然後給出一個p值,判斷兩者差異的顯著性。在ggplot2中,兩組數據對比時,我們常用的,就是boxplot,那麼,如何在作出兩組或者多組的boxplot的同時,標記出顯著性的數據呢?
  • 華為雲智能專題及常見問題 - CSDN
    數據倉庫是企業的「中樞系統」,也是業務創新的基礎,但長久以來一直受到「擴展性、實時性、可用性、易用性」等問題的困擾。華為雲GaussDB(DWS)十年磨一劍,在核心技術上實現了突破,為新一代企業級數據倉庫系統樹立了標杆。截至目前,全球超過500家大客戶已使用GaussDB(DWS)構建自己的核心數據倉庫系統。
  • android 啟動頁慢專題及常見問題 - CSDN
    但是這裡有一個問題如果要知道10個或者更多方法的執行時間,這個方法看起來是可以,但寫起來過於繁瑣,且不符合程式設計師的習慣,關於這種場景後面會介紹如何處理。4. TraceView和SysTrace工具使用TraceView使用:TraceView是Android平臺配備一個很好的性能分析工具,它可以通過圖形化的方式讓我們了解我們要跟蹤的程序的性能,並且能具體到方法。
  • boost 機器學習專題及常見問題 - CSDN
    這裡就不多累贅了,Yandex的搜索入口如下:     https://tech.yandex.com/     官方的參考文檔如下:     https://tech.yandex.com/catboost/doc/dg/concepts/about-docpage/      相關的參數中文解釋:      https://blog.csdn.net
  • 浙江雲棲大會專題及常見問題 - CSDN
    高精尖的北鬥導航和地基系統結合帶來了毫米級的高精度定位……晶片、作業系統、資料庫、高精導航、人工智慧、自動駕駛等"黑科技"匯聚,堪稱中國自主科技的閱兵式。城市數據大腦在昨天的大會上,杭州市政府公布了一項「瘋狂」的計劃:為這座城市安裝一個人工智慧中樞——杭州城市數據大腦。
  • html5 平板電腦專題及常見問題 - CSDN
    當您丟失列視圖時,定位10月14日發生的重要交易需要更高的「認知負荷」。 有時,我們可能會發現自己試圖通過「電源布局」解決信息架構問題。 您的後端開發人員吐出了6列表格數據,因此6列就是您要布局的內容! I think our first step should _always_be to try to optimize what we're putting in the original table.
  • slot-scope專題及常見問題 - CSDN
    /template>上述是vue2.6之前的版本,之後vue官方廢棄了上面的語法,改為v-solt來代替,然後大家就想知道,區別在哪呢首先就是 用一個指令合併了solt 和solt-scope2個attribute,寫法更加簡潔,其次就是語義化更明顯2.6之前的寫法會出現作用域混淆的問題
  • 華為雲工業網際網路專題及常見問題 - CSDN
    再次,應該實事求是的宣傳功效,解決客戶實際問題,筆者很認同這一點,事實上核心的技術是要來解決實際問題的,而不是用來造概念或做秀的。最後是需要堅持開放的平臺,積極汲取全世界產業界先進的工具和能力。全中國擁有41個工業大類、191個中類和525個小類的工業企業,是全世界唯一擁有聯合國產業分類中全部工業門類的國家。而每類工業企業都有自己獨特的工業know-how和行業知識。
  • slot vue 用法專題及常見問題 - CSDN
    這是一種常見的模式,雖然它不需要很多代碼,但是如果沒有為了可重用性而提取邏輯,它會使很多組件變得混亂。
  • cocos creator 圖集專題及常見問題 - CSDN
    _id的改變 // 導致了無法從動態圖鑑中找到該紋理,從而進行重建 // 導致問題:圖鑑的無效增加-》 圖集數量的增加消耗了內存、也會導致Drawcall的升高 // 解決辦法:修改下源碼,使用 texture.