慣性傳感器的傾角計算

慣性傳感器單元 IMU

IMU 是 Inertial Measurement Unit 的縮寫, 直接翻譯過來就是慣性測量單元, 常見的有單獨的三軸加速度(Accelerometer)計 ADXL345, L3G4200D, L3GD20等, 單獨的三軸角速度計(又稱陀螺儀, Gyroscope) LIS3DH, L3GD20H, BMG160, 以及包含了加速度計和陀螺儀的六軸運動傳感器 MPU6050, MPU6500, MPU6881, BMI160等, 以及帶電子羅盤的九軸運動傳感器 MPU9250, MPU9255等.

在判斷物體在空間中的姿態以及運動軌跡時, 用得最多的是加速度和角速度傳感器. 加速度傳感器可以計算傾角, 陀螺儀可以計算角速度, 這兩種傳感器各自的特點為

  • 陀螺儀: 動態特性好, 因為測量噪聲(誤差)的存在, 以及各向靈敏度的差異, 通過積分計算角度會累積誤差, 導致結果越來越不準
  • 加速度計: 不會累積誤差, 所以準確度有保證, 但是動態響應差, 不適用于角度變化快速的場景.

如果設備運動速度較慢, 作用于系統的加速度力主要是重力, 可以使用加速度計來計算傾角, 利用重力矢量及其在加速度計軸上的投影(即對應讀數)來確定傾角. 由于重力是恒定加速度, 如果存在額外的恒定加速度也會影響計算結果. 額外的恒定加速度包括發動機持續加速以及設備自身勻速的旋轉等.

通過加速度計算傾角

靜止和慢速物體因為主要加速度來源為重力, 用加速度傳感器可以計算得到物體的傾角.

單軸數據計算傾角

假設X軸上測到的加速度值為 a x a_x ax? 定義傾角 α α α 為X軸與水平面(與重力矢量垂直的平面)的夾角, 計算為

α = s i n ? 1 ( a x g ) α = sin^{-1}(\frac{a_x}{g}) α=sin?1(gax??)

a x = 0 a_x = 0 ax?=0 時, 傾角為0, X軸處于水平位置, 當 a x = g a_x = g ax?=g 時, 傾角90°, 處于垂直位置, 當 a x a_x ax? 的值很小時, 可以用近似公式 s i n ( α ) ≈ α sin(α) ≈ α sin(α)α, 于是

α ≈ k ( a x g ) α ≈ k(\frac{a_x}{g}) αk(gax??)

比例系數k用于角度的線性近似計算

a x a_x ax? 的讀數匹配 s i n ( α ) sin(α) sin(α) 曲線, 讀數值范圍為 ? 1 g 1 g -1g ~ 1g ?1g?1g, 在讀數為0(水平位置)時靈敏度最高, 在讀數為 + ? 1 g +-1g +?1g 時靈敏度最低.

雙軸加速度數據計算傾角

單軸無法判斷方向, 因為在傾角為 α α α 180 ° ? α 180° - α 180°?α 時讀數是一樣的. 如果增加一個與X軸垂直的軸, 假定為Z軸, 且XZ軸形成的平面垂直于水平面, 那么XZ軸在這個平面里形成的對水平面的傾角就可以判斷方向, 并且結果較為精確, 因為總會有一個軸處于靈敏度較高的區間.

當XZ軸形成的平面垂直于水平面時, X軸傾角可以用兩個軸的讀數進行計算.

α = t a n ? 1 ( a x a z ) α = tan^{-1}(\frac{a_x}{a_z}) α=tan?1(az?ax??)

a x a_x ax?為0時, 傾角為0, X軸處于水平, 當 a z a_z az?為0時要注意避免零除. 如果XZ軸平面不垂直于水平面, 這個結果會小于實際的傾角, 傾斜越厲害誤差越大.

三軸加速度數據計算傾角

假設傳感器Z軸垂直朝下, X軸朝正前方, 則X軸與水平面之間的夾角為俯仰角(pitch) α α α, Y軸與水平面間的夾角為橫滾角(roll) β β β, 航向角yaw需要地磁傳感器, 無法通過加速度傳感器計算. Z軸垂直于X軸和Y軸, 和兩軸數值是相關的, 并沒有獨立性, 僅用于判斷設備上下的朝向. 令Z軸與水平面的夾角為 γ γ γ

重力加速度在XYZ三個軸上的投影即為三個軸傳感器的讀數, 可以將三軸傾角和重力加速度想像為一個斜立的長方體, 長方體的對角線為重力加速度, 對角線就是這個角對應的三條邊, 傾角的計算方法為

α = s i n ? 1 ( a x g ) α = sin^{-1}(\frac{a_x}{g}) α=sin?1(gax??)
β = s i n ? 1 ( a y g ) β = sin^{-1}(\frac{a_y}{g}) β=sin?1(gay??)
γ = s i n ? 1 ( a z g ) γ = sin^{-1}(\frac{a_z}{g}) γ=sin?1(gaz??)

帶運動加速度的傾角計算

上面的計算方式適合相對靜止和慢速的場景, 當物體受作用于多個外力時, 作用于傳感器的綜合加速度為重力與各外力的疊加, 此時加速度的方向就不是重力的方向, 上面的計算方式就不適用了, 因為綜合加速度可能比 g g g 更大或更小.

對于一個物體, 整體加速度等于三軸加速度的矢量和, 其大小 G G G 可以通過三個向量的大小計算得到

G = a x 2 + a y 2 + a z 2 2 G = \sqrt[2]{{a_x}^2 + {a_y}^2 + {a_z}^2} G=2ax?2+ay?2+az?2 ?

由此可以得到運動狀態下傾角的計算

α = s i n ? 1 ( a x G ) α = sin^{-1}(\frac{a_x}{G}) α=sin?1(Gax??)
β = s i n ? 1 ( a y G ) β = sin^{-1}(\frac{a_y}{G}) β=sin?1(Gay??)
γ = s i n ? 1 ( a z G ) γ = sin^{-1}(\frac{a_z}{G}) γ=sin?1(Gaz??)

因為 a x a_x ax?, G G G, a y 2 + a z 2 2 \sqrt[2]{{a_y}^2 + {a_z}^2} 2ay?2+az?2 ? 三個矢量形成直角三角形, 上面的式子可以也可以用 t a n ? 1 tan^{-1} tan?1 計算

α = t a n ? 1 ( a x a y 2 + a z 2 2 ) α = tan^{-1}(\frac{a_x}{\sqrt[2]{{a_y}^2 + {a_z}^2}}) α=tan?1(2ay?2+az?2 ?ax??)
β = t a n ? 1 ( a y a x 2 + a z 2 2 ) β = tan^{-1}(\frac{a_y}{\sqrt[2]{{a_x}^2 + {a_z}^2}}) β=tan?1(2ax?2+az?2 ?ay??)
γ = t a n ? 1 ( a z a x 2 + a y 2 2 ) γ = tan^{-1}(\frac{a_z}{\sqrt[2]{{a_x}^2 + {a_y}^2}}) γ=tan?1(2ax?2+ay?2 ?az??)

此時的傾角并非相對重力加速度的傾角, 而是相對物體整體加速度矢量的傾角, 例如物體向前(X軸方向)加速運動時, 整體加速度方向會向后傾斜, 當物體左轉時, 離心力會導致整體加速度方向向右傾斜. 計算此時的姿態傾角, 可以用于幫助物體在當前的運動狀態上保持平衡.

互補濾波

通過加速度傳感器(Accelerometer)可以使用反三角函數 s i n ? 1 sin^{-1} sin?1 t a n ? 1 tan^{-1} tan?1求靜止和慢速運動物體的傾角, 對于高速運動的物體, 需要結合陀螺儀的角速度讀數快速響應傾角變化. 對于這兩種傳感器讀數的結合, 通常采用互補濾波算法.

互補濾波就是在短時間內采用陀螺儀得到的角度做為最優值, 定時用加速度值來校正陀螺儀的得到的角度. 加速度計要濾掉高頻信號, 陀螺儀要濾掉低頻信號, 互補濾波器就是根據傳感器特性不同, 通過不同的濾波器, 相加得到整個頻帶的信號.

互補濾波的公式為

α n = k ? ( α n ? 1 + δ α ? d t ) + ( 1 ? k ) ? α ′ α_n = k * (α_{n-1} + \delta_α ? dt) + (1 - k) ? α^{\prime} αn?=k?(αn?1?+δα??dt)+(1?k)?α

其中

  • α n α_n αn? 互補計算得到的角度
  • α n ? 1 α_{n-1} αn?1? 前一次計算得到的角度
  • δ α \delta_α δα? 陀螺儀得到的角速度
  • d t dt dt 兩次計算的時間間隔
  • α ′ α^{\prime} α 通過加速度計得到的傾角
  • k k k 1 ? k 1-k 1?k 為加權系數, 和為 1

加權系數的確定. 在 《The Balance Filter》 中提到關于加權系數的求解公式, 先設濾波器的加權系數為 α α α, 時間常數為為 τ τ τ, 運行周期為 d t dt dt, 那么公式為

α = τ τ + d t α = \frac{τ}{τ+dt} α=τ+dtτ?

運行周期 dt 根據運行周期確定, 如果互補濾波器方法的調用頻率為 200次每秒, 那么 d t = 1000 m s 200 = 5 m s dt = \frac{1000ms}{200} = 5ms dt=2001000ms?=5ms

時間常數 τ τ τ 的取值根據系統的實際需求調整,
不同的系統的 τ τ τ 值不一定相同. τ τ τ取值越大則陀螺儀權重越大, τ τ τ取值越小則加速度傳感器的權重越大. 通常互補濾波器對陀螺儀的權重會大些, 以降低加速度傳感器中噪聲的影響. 例如互補濾波器運行間隔為 10ms, 時間常數 τ = 0.49 τ =0.49 τ=0.49, 那么此時加權系數為:

α = τ τ + d t = 0.49 0.49 + 0.01 = 0.98 α = \frac{τ}{τ+dt} = \frac{0.49}{0.49 + 0.01} = 0.98 α=τ+dtτ?=0.49+0.010.49?=0.98

C語言代碼

// a = tau / (tau + dt)  
// acc = 加速度傳感器數據 
// gyro = 陀螺儀數據 
// dt = 運行周期float angle;
float a;float ComplementaryFliter(float acc, float gyro, float dt)
{a = 0.98;angle = a * (angle + gyro * dt) + (1 - a) * (acc);return angle;
}

在實際應用中, 因為加速度計和角速度計讀取的數據存在很大的噪音, 直接使用會造成反饋的不穩定(抖動), 需要在計算前通過卡爾曼濾波器等進行平滑.

參考

  • 傾角計算 https://www.analog.com/cn/resources/app-notes/an-1057.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715676.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715676.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715676.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt 簡約又簡單的加載動畫 第七季 音量柱風格

今天和大家分享兩個音量柱風格的加載動畫,這次的加載動畫的最大特點就是簡單,只有幾行代碼. 效果如下: 一共三個文件,可以直接編譯運行 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QGridLayout> int main(int argc…

尋找峰值[中等]

優質博文IT-BLOG-CN 一、題目 峰值元素是指其值嚴格大于左右相鄰值的元素。給你一個整數數組nums&#xff0c;找到峰值元素并返回其索引。數組可能包含多個峰值&#xff0c;在這種情況下&#xff0c;返回 任何一個峰值 所在位置即可。 你可以假設nums[-1] nums[n] -∞。 你…

python統計分析——泊松回歸

參考資料&#xff1a;用python動手學統計學 概率分布為泊松分布、聯系函數為對數函數的廣義線性模型叫作泊松回歸。解釋變量可以有多個&#xff0c;連續型和分類型的解釋變量也可以同時存在。 1、案例說明 分析不同氣溫與啤酒銷量的關系。構造不同氣溫下的銷量的數學模型&…

Java之美[從菜鳥到高手演變]之Json類型數據的處理

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。 易于人閱讀和編寫。同時也易于機器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個子集。 JSON采用完全獨立于語言的文本格式&#xff0c;但是也使…

Unity--自動版面(Horizontal Layout Croup)||Unity--自動版面(Vertical Layout Group)

Unity--自動版面&#xff08;Horizontal Layout Croup&#xff09; Horizontal Layout Croup&#xff1a; “水平布局組”組件將其子布局元素并排放置。它們的寬度由各自的最小&#xff0c;首選和靈活的寬度決定&#xff0c;具體取決于以下模型&#xff1a; 所有子布局元素的…

el-form里面表單遍歷渲染,里面放el-row,一行放3個表單怎么實現

需求&#xff1a; 需要實現 el-form里面的表單遍歷渲染&#xff0c;里面放el-row,一行放3個表單怎么實現&#xff1f; 廢話不多說直接上demo <el-form ref"form" :model"form" label-width"80px"><el-row v-for"(row, index) in M…

服務器硬件基礎知識全解析

在信息技術日新月異的今天&#xff0c;服務器作為數據處理和存儲的核心&#xff0c;其重要性不言而喻。了解服務器硬件基礎知識&#xff0c;對于IT從業者以及廣大技術愛好者來說&#xff0c;都是不可或缺的技能。本文將詳細解析服務器硬件的基礎知識&#xff0c;幫助讀者建立起…

BUGKU bp

打開環境&#xff0c;他提示了弱密碼top1000&#xff0c;隨便輸入密碼123抓包爆破 發現長度都一樣&#xff0c;看一下響應發現一段js代碼&#xff0c;若r值為{code: bugku10000}&#xff0c;則會返回錯誤&#xff0c;通過這一句“window.location.href success.php?coder.cod…

計算機二級Python刷題筆記------基本操作題11、14、17、21、30(考察列表)

文章目錄 第十一題&#xff08;列表遍歷&#xff09;第十四題&#xff08;len&#xff09;第十七題&#xff08;len、insert&#xff09;第二十一題&#xff08;append&#xff09;第三十題&#xff08;二維列表&#xff09; 第十一題&#xff08;列表遍歷&#xff09; 題目&a…

mysql數據庫root權限讀寫文件

如果沒有shell&#xff0c;只有數據庫權限的情況下&#xff1a; 1. udf 提權提示沒有目錄&#xff1a;使用數據流創建目錄 1. select xxx into outfile C:\\phpstudy_pro\\Extensions\\MySQL5.5.29\\lib\::$INDEX_ALLOCATION;2. select xxx into outfile C:\\phpstudy_pro\…

springcloud和基礎服務的搭建以及封裝

代碼倉庫地址&#xff1a;https://github.com/zhaoyiwen-wuxian/springcloud-common page分頁也進行了封裝&#xff0c;只需要添加到pom中&#xff0c;將會自動進行分頁&#xff0c;并且后端不需要寫任何的分頁數據。只需要前端自己傳分頁參數即可&#xff0c;并且里面封裝了很…

Hololens 2應用開發系列(2)——MRTK基礎知識及配置文件配置(上)

Hololens 2應用開發系列&#xff08;2&#xff09;——MRTK基礎知識及配置文件配置 一、前言二、MRTK基礎知識2.1 MRTK概述2.2 MRTK運行邏輯2.3 MRTK配置文件介紹2.4 MRTK服務 三、配置文件使用3.1 總配置文件3.2 相機配置3.3 其他配置 參考文獻 一、前言 在前面的文章中&…

高效運維監測:全面掌控IT基礎設施與應用性能

在現代IT環境中&#xff0c;確保服務器、網絡設備和應用程序的穩定運行至關重要。為了實現這一目標&#xff0c;運維團隊需要一套高效、靈活的監測系統&#xff0c;能夠實時追蹤各種性能指標&#xff0c;并在出現問題時迅速發出警報。本文將詳細介紹這樣一套監測系統&#xff0…

WebServer -- 數據庫連接池

目錄 &#x1f382;基礎知識 &#x1f6a9;整體內容 &#x1f33c;單例模式創建 &#x1f382;連接池&#xff08;代碼實現&#xff09; 初始化 獲取 && 釋放連接 銷毀連接池 &#x1f351;RAII 機制釋放數據庫連接 定義 實現 &#x1f382;基礎知識 什么是…

使用 Docker 部署 Answer 問答平臺

1&#xff09;介紹 GitHub&#xff1a;https://github.com/apache/incubator-answer Answer 問答社區是在線平臺&#xff0c;讓用戶提出問題并獲得回答。用戶可以發布問題并得到其他用戶的詳細答案、建議或信息。回答可以投票或評分&#xff0c;有助于確定有用的內容。標簽和分…

Ps:歷史記錄面板

Ps菜單&#xff1a;窗口/歷史記錄 Window/History 歷史記錄 History面板提供了對圖像編輯過程中所進行更改的深入控制&#xff0c;可以讓用戶回溯并查看每一步操作&#xff0c;從而允許用戶輕松撤銷錯誤或比較不同的編輯效果。 ◆ ◆ ◆ 常用操作方法與技巧 “歷史記錄”面板…

CentOS7設置虛擬機語言為中文

1.查看本地安裝的語言 locale -a 是一個Linux命令&#xff0c;用于列出系統中可用的所有區域設置&#xff08;locales&#xff09;它包含了各種語言和地區的不同設置。 打開終端&#xff08;右鍵open terminal&#xff09;輸入 locale -a 查看本地安裝的語言&#xff1a; 其中z…

如何在Unity項目中使用Plastic SCM進行版本控制

引言 Plastic SCM是一個版本控制系統&#xff0c;專為處理大型項目而設計&#xff0c;特別適用于游戲開發中的Unity項目。它提供了強大的分支和合并工具&#xff0c;使團隊能夠高效地協作開發。 安裝和設置 安裝Plastic SCM 訪問Plastic SCM官網下載客戶端。根據您的操作系…

一些可以訪問gpt的方式

1、Coze扣子是新一代 AI 大模型智能體開發平臺。整合了插件、長短期記憶、工作流、卡片等豐富能力&#xff0c;扣子能幫你低門檻、快速搭建個性化或具備商業價值的智能體&#xff0c;并發布到豆包、飛書等各個平臺。https://www.coze.cn/ 2、https://poe.com/ 3、插件阿里…

EasyRecovery16電腦硬盤數據恢復軟件功能詳解

在數字化時代&#xff0c;人們在日常生活和工作中越來越依賴于電腦和移動設備。不管是個人用戶還是企業&#xff0c;數據的重要性都不言而喻。然而&#xff0c;數據丟失和損壞的風險也隨之增加&#xff0c;因此&#xff0c;數據恢復軟件的需求也日益增長。 EasyRecovery 16是一…