mpu6050 感測器 傾斜角度 低通濾波器(Low-Pass Filter)

更新於 發佈於 閱讀時間約 4 分鐘

上篇介紹如何使用 mpu6050 感測器 加速度 感測器取得傾斜角度,這篇介紹如何使用低通滤波器(Low-Pass Filter) 來改善 傾斜角度數值。

低通濾波器的想法是去除高頻率的干擾,當mpu6050左右搖晃時,因為加速度數值改變,造成傾斜角度數值變化,但實質上傾斜角度並沒有變化,因此要使用低通滤波器(Low-Pass Filter)去除劇烈的數值改變。


pitchN=0.9*pitchOld+0.1*pitchM; (讀取的Pitch 角度=0.9 舊角度+0.1新角度)

rollN=0.9*rollOld+0.1*rollM;(讀取的Roll 角度=0.9 舊角度+0.1新角度)


程式寫法是讀取的新角度是舊角度加上量測到新角度的數值,給予舊角度0.9的權重,新角度0.1的權重,比較相信原本的數值,意味者當數值在短時間劇烈改變時,因為量測到的角度佔的權重小,因此不會造成量測角度太大的變化。


#include <basicMPU6050.h>
#include <math.h>

// Create instance
basicMPU6050<> imu;


float pitchM,rollM,pitchN,rollN;
float pitchOld=0;
float rollOld=0;

void setup() {
// Set registers - Always required
imu.setup();

// Initial calibration of gyro
imu.setBias();

// Start console
Serial.begin(38400);
}


void loop() {
// Update gyro calibration
imu.updateBias();
// Angle
pitchM=atan2(imu.ay(),imu.az())*180/3.14159;
rollM=atan2(imu.ax(),imu.az())*180/3.14159;

//low pass filter
pitchN=0.9*pitchOld+0.1*pitchM;
rollN=0.9*rollOld+0.1*rollM;

Serial.print( imu.ax() );
Serial.print( " " );
Serial.print( imu.ay() );
Serial.print( " " );
Serial.print( imu.az() );
Serial.print( " " );

//Angle
Serial.print(pitchM);
Serial.print(" ");
Serial.print(rollM);
Serial.print(" ");

Serial.print(pitchN);
Serial.print(" ");
Serial.print(rollN);
Serial.println(" ");
//assign now value to old value
pitchOld=pitchN;
rollOld=rollN;

delay(100);

}


讀取數值如下

raw-image


左右搖晃時感測器讀取的數據

raw-image


但是還是有些缺點,使用low pass filter 過濾的數值無法立即顯示目前傾斜角度,數值會漸進的爬升至22度。

raw-image


low pass filter的權重會影響數值的爬升速度,原本的權重分別為0.9 和0.1

pitchN=0.9*pitchOld+0.1*pitchM; (讀取的Pitch 角度=0.9 舊角度+0.1新角度)

將權重改成0.5和0.5時

pitchN=0.5*pitchOld+0.5*pitchM;(讀取的Pitch 角度=0.5 舊角度+0.5新角度)

會使讀取的數值爬升速度快(反應較快),但搖晃時傾斜角度的數值較易被影響。

權重改成0.5和0.5時 y軸傾斜時

權重改成0.5和0.5時 y軸傾斜時



權重0.5和0.5時 左右搖晃時

權重0.5和0.5時 左右搖晃時



若希望傾斜角度可以立即反應到數值上,就給予新角度較高的權重,若希望能降低搖晃的干擾,就給予舊角度較高的權重,使用Low-Pass Filter會面臨到反應速度和降低干擾的取捨。

這是簡單的Low-Pass Filter 應用在mpu6050感測器介紹。

avatar-img
3會員
26內容數
寫程式的筆記,把一些自學寫過的程式放上來
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
程式_筆記 的其他內容
這篇介紹如何用加速度取得傾斜角度。 用的是和前篇一樣的<basicMpu6050.h>
本篇內容介紹如何使用 Python中的 moviepy library 簡單的剪影片。 先安裝moviepy library , 用pip install moviepy , 可參考官方文件。 要剪的影片和python檔要在同個資料夾中,若不在同個位置要用 os library 更換路徑
本篇內容介紹如何使用 Python中的 moviepy library 簡單的剪影片。 先安裝moviepy library , 用pip install moviepy , 可參考官方文件。 要剪的影片和python檔要在同個資料夾中,若不在同個位置要用 os library 更換路徑
因為很喜歡玩空拍機、遙控飛機,因此最近又開始研究無人機領域,偶然發現有兩個網站,介紹各個國家對於無人機飛行的規範和限制,分享給想帶空拍機出國旅遊的朋友們。
這篇介紹如何用加速度取得傾斜角度。 用的是和前篇一樣的<basicMpu6050.h>
本篇內容介紹如何使用 Python中的 moviepy library 簡單的剪影片。 先安裝moviepy library , 用pip install moviepy , 可參考官方文件。 要剪的影片和python檔要在同個資料夾中,若不在同個位置要用 os library 更換路徑
本篇內容介紹如何使用 Python中的 moviepy library 簡單的剪影片。 先安裝moviepy library , 用pip install moviepy , 可參考官方文件。 要剪的影片和python檔要在同個資料夾中,若不在同個位置要用 os library 更換路徑
因為很喜歡玩空拍機、遙控飛機,因此最近又開始研究無人機領域,偶然發現有兩個網站,介紹各個國家對於無人機飛行的規範和限制,分享給想帶空拍機出國旅遊的朋友們。
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
變壓器在現代電子設備中扮演著重要角色,根據應用需求可分為高頻和低頻兩種類型。 高頻變壓器注重效率和體積,使用精密繞線技術和高品質材料。低頻變壓器強調穩定性和耐用性,採用矽鋼片和精密繞組設計。
Thumbnail
以相對性為出發點來說: 低頻是生命(體)的源泉; 高頻是生命(體)的信標。
Thumbnail
常見的圖像銳利化方法: 銳化濾波器 增強對比度 Unsharp Masking
Thumbnail
在實驗室研究和生產領域中,微小的測量誤差都可能導致巨大差異。因此,電子天平作為精準測量物質質量的儀器,在測量中扮演重要角色。本文將詳細介紹電子天平的原理、各類型天平的特色與應用,以及如何根據不同需求選擇和使用天平。
Thumbnail
電波和音波都是近年來非常火紅的抗老療程,但究竟該選擇電波還是音波?電波和音波可以一起打嗎?今天就讓我們來一探究竟吧!
再使用AT-START開發板時,這塊板子上搭配的外部晶體震盪器是8MHz。 若使用不同晶振,也就是震盪頻率不再是8MHz的話,需要修改哪些部分呢? 1.系統時鐘設定 void ​system_clock_config(void) 需要注意sclk(系統時鐘)有沒有超過限制、ahb及apb
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
變壓器在現代電子設備中扮演著重要角色,根據應用需求可分為高頻和低頻兩種類型。 高頻變壓器注重效率和體積,使用精密繞線技術和高品質材料。低頻變壓器強調穩定性和耐用性,採用矽鋼片和精密繞組設計。
Thumbnail
以相對性為出發點來說: 低頻是生命(體)的源泉; 高頻是生命(體)的信標。
Thumbnail
常見的圖像銳利化方法: 銳化濾波器 增強對比度 Unsharp Masking
Thumbnail
在實驗室研究和生產領域中,微小的測量誤差都可能導致巨大差異。因此,電子天平作為精準測量物質質量的儀器,在測量中扮演重要角色。本文將詳細介紹電子天平的原理、各類型天平的特色與應用,以及如何根據不同需求選擇和使用天平。
Thumbnail
電波和音波都是近年來非常火紅的抗老療程,但究竟該選擇電波還是音波?電波和音波可以一起打嗎?今天就讓我們來一探究竟吧!
再使用AT-START開發板時,這塊板子上搭配的外部晶體震盪器是8MHz。 若使用不同晶振,也就是震盪頻率不再是8MHz的話,需要修改哪些部分呢? 1.系統時鐘設定 void ​system_clock_config(void) 需要注意sclk(系統時鐘)有沒有超過限制、ahb及apb