嵌入式學習筆記-卡爾曼濾波,PID,MicroPython

文章目錄

    • 卡爾曼濾波
      • 卡爾曼濾波的核心思想
      • 卡爾曼濾波的數學模型
        • 1. 狀態轉移模型(預測系統狀態)
        • 2. 觀測模型(預測測量值)
      • 卡爾曼濾波的五個關鍵步驟
        • 1. 預測狀態
        • 2. 預測誤差協方差
        • 3. 計算卡爾曼增益
        • 4. 更新狀態
        • 5. 更新誤差協方差
      • 卡爾曼濾波算法步驟總結
      • 代碼實現(Python 示例)
    • PID調節
      • 總結
    • MicroPython
      • 示例代碼:控制 LED 燈并連接 WiFi
        • 1. 硬件準備
        • 2. 連接方式
        • 3. 示例代碼
      • 代碼說明
      • 開發環境搭建

今天開組會,中午沒睡困得要死,但是每天都得不停學習。

參考下面視頻

卡爾曼濾波

卡爾曼濾波是一種用于估計動態系統狀態的算法,它是一種線性遞歸濾波
器,即使測量數據中存在噪聲,它也能提供對真實狀態的最佳估計。這種濾波算法在控制系統、導航、信號處理等領域應用廣泛。


卡爾曼濾波的核心思想

卡爾曼濾波是一種遞歸估計算法,它在每個時刻執行兩步:

  1. 預測階段:根據上一時刻的狀態,利用系統的動態模型預測當前時刻的狀態。
  2. 更新階段:結合當前的測量數據,校正預測值,得到更準確的狀態估計。

卡爾曼濾波的數學模型

卡爾曼濾波假設系統可以用線性模型描述,并且噪聲服從高斯分布。系統模型由以下兩部分組成:

1. 狀態轉移模型(預測系統狀態)

x k = F k x k ? 1 + B k u k + w k x_k = F_k x_{k-1} + B_k u_k + w_k xk?=Fk?xk?1?+Bk?uk?+wk?

  • x k x_k xk?:系統在時刻 k k k 的狀態向量(例如位置、速度)。
  • F k F_k Fk?:狀態轉移矩陣,描述狀態之間的變化關系。
  • B k B_k Bk?:控制輸入矩陣,描述控制輸入對狀態的影響。
  • u k u_k uk?:控制輸入。
  • w k w_k wk?:過程噪聲,服從均值為 0 0 0,協方差為 Q Q Q 的高斯分布。
    在這里插入圖片描述
2. 觀測模型(預測測量值)

z k = H k x k + v k z_k = H_k x_k + v_k zk?=Hk?xk?+vk?

  • z k z_k zk?:時刻 k k k 的觀測值。
  • H k H_k Hk?:觀測矩陣,描述狀態如何映射到觀測空間。
  • v k v_k vk?:測量噪聲,服從均值為 0 0 0,協方差為 R R R 的高斯分布。

卡爾曼濾波的五個關鍵步驟

1. 預測狀態

根據狀態轉移模型,預測當前時刻的狀態:
x ^ k ? = F k x ^ k ? 1 + B k u k \hat{x}_k^- = F_k \hat{x}_{k-1} + B_k u_k x^k??=Fk?x^k?1?+Bk?uk?
這里, x ^ k ? \hat{x}_k^- x^k?? 表示預測的狀態。

2. 預測誤差協方差

預測狀態的誤差協方差:
P k ? = F k P k ? 1 F k T + Q P_k^- = F_k P_{k-1} F_k^T + Q Pk??=Fk?Pk?1?FkT?+Q

  • P k ? P_k^- Pk??:預測誤差協方差矩陣,反映預測值的不確定性。
  • Q Q Q:過程噪聲協方差矩陣。
3. 計算卡爾曼增益

根據預測的不確定性和測量的不確定性計算卡爾曼增益:
K k = P k ? H k T ( H k P k ? H k T + R ) ? 1 K_k = P_k^- H_k^T (H_k P_k^- H_k^T + R)^{-1} Kk?=Pk??HkT?(Hk?Pk??HkT?+R)?1

  • K k K_k Kk?:卡爾曼增益,決定了預測和測量數據的權重。
4. 更新狀態

結合測量值更新狀態估計:
x ^ k = x ^ k ? + K k ( z k ? H k x ^ k ? ) \hat{x}_k = \hat{x}_k^- + K_k (z_k - H_k \hat{x}_k^-) x^k?=x^k??+Kk?(zk??Hk?x^k??)

  • z k ? H k x ^ k ? z_k - H_k \hat{x}_k^- zk??Hk?x^k??:測量殘差(即預測值與觀測值的差異)。
5. 更新誤差協方差

更新誤差協方差矩陣:
P k = ( I ? K k H k ) P k ? P_k = (I - K_k H_k) P_k^- Pk?=(I?Kk?Hk?)Pk??

  • I I I:單位矩陣。

卡爾曼濾波算法步驟總結

  1. 初始化:設定初始狀態 x ^ 0 \hat{x}_0 x^0? 和初始協方差矩陣 P 0 P_0 P0?
  2. 循環執行
    • 預測狀態 x ^ k ? \hat{x}_k^- x^k?? 和協方差 P k ? P_k^- Pk??
    • 計算卡爾曼增益 K k K_k Kk?
    • 更新狀態 x ^ k \hat{x}_k x^k? 和協方差 P k P_k Pk?

代碼實現(Python 示例)

以位置和速度為狀態(經典一維運動模型)為例:

import numpy as np# 初始化參數
F = np.array([[1, 1], [0, 1]])  # 狀態轉移矩陣
H = np.array([[1, 0]])          # 觀測矩陣
Q = np.array([[1, 0], [0, 1]])  # 過程噪聲協方差
R = np.array([[10]])            # 測量噪聲協方差
B = np.array([[0], [0]])        # 控制輸入矩陣
u = np.array([[0]])             # 控制輸入# 初始狀態和協方差
x = np.array([[0], [1]])        # 初始狀態:[位置, 速度]
P = np.array([[1, 0], [0, 1]])  # 初始誤差協方差# 模擬觀測數據
z_real = [5, 6, 7, 9, 10]       # 實際觀測值for z in z_real:# 預測階段x_predict = F @ x + B @ uP_predict = F @ P @ F.T + Q# 計算卡爾曼增益K = P_predict @ H.T @ np.linalg.inv(H @ P_predict @ H.T + R)# 更新階段z = np.array([[z]])  # 當前觀測值x = x_predict + K @ (z - H @ x_predict)P = (np.eye(2) - K @ H) @ P_predict# 輸出當前狀態估計print("位置估計:", x[0, 0], "速度估計:", x[1, 0])

PID調節

之前學過點,所以就簡單學下怎么調節。

環節功能描述作用優點缺點實際應用注意事項
P(比例環節)將比例系數與偏差信號e(t)相乘后輸出快速響應系統誤差,調節系統向誤差減小的方向移動響應迅速,能快速調整系統可能引起系統震蕩,存在穩態誤差1. 比例增益系數KP不能過大,以避免震蕩。 通過逐步增大KP,找到系統等幅振蕩時的KP值,取其70%作為最優比例增益系數。
I(積分環節)對偏差信號e(t)進行積分,使輸出持續增加或減少,直至偏差為零消除穩態誤差消除穩態誤差,提高系統精度可能引起系統慣性干擾,導致響應變慢1. 在無過諧振蕩、穩態誤差近似為0時,積分時間常數TI取值合理。 與比例環節結合(PI控制),可同時提高響應速度和消除穩態誤差。
D(微分環節)對偏差信號e(t)的變化率進行反饋,提前修正偏差減少調節時間,提前校正系統提高動態性能,減少超調對噪聲敏感,可能導致誤調節1. 在動態系統中,微分環節可以提前發出校正信號,防止偏差擴大。

總結

  • P環節:快速響應,但可能導致震蕩和穩態誤差。
  • I環節:消除穩態誤差,但可能使系統響應變慢。
  • D環節:提前校正偏差,提高動態性能,但對噪聲敏感。

三者結合(PID控制)可綜合各環節的優點,克服單一環節的缺點,廣泛應用于閉環控制系統中,以實現快速、穩定且無誤差的控制效果。感覺PID可以對應快準穩。P越大,沖的越快,I適度,可以用來調節沖刺到最后的精度,D適度可以用來調價波痕,更加穩定。

MicroPython

MicroPython 是一種輕量級的 Python 解釋器,專為嵌入式系統和微控制器設計,能夠在資源受限的硬件上運行。它保留了 Python 的核心語法,同時提供了豐富的硬件控制接口,非常適合在 ESP32 等單片機上開發。

以下是一個基于 ESP32 單片機的 MicroPython 示例代碼,介紹如何通過 GPIO 控制 LED 燈的閃爍,并連接 WiFi 網絡。

示例代碼:控制 LED 燈并連接 WiFi

1. 硬件準備
  • ESP32 開發板
  • 一個 LED 燈
  • 電阻(可選)
  • 杜邦線若干
2. 連接方式

將 LED 的正極連接到 ESP32 的 GPIO 引腳(如 GPIO 5),負極通過電阻連接到 GND。

3. 示例代碼

以下代碼展示了如何控制 GPIO 引腳來點亮和熄滅 LED,并連接到 WiFi 網絡。

# 導入必要的模塊
from machine import Pin
import network
import time# 初始化 LED 引腳
led = Pin(5, Pin.OUT)  # GPIO 5 作為輸出# 定義 WiFi 連接函數
def connect_wifi(ssid, password):wlan = network.WLAN(network.STA_IF)  # 創建 WLAN 對象wlan.active(True)  # 激活 WiFi 接口if not wlan.isconnected():  # 檢查是否已連接print("Connecting to WiFi...")wlan.connect(ssid, password)  # 連接到指定 WiFiwhile not wlan.isconnected():  # 等待連接passprint("Connected to WiFi!")print("IP Address:", wlan.ifconfig()[0])  # 打印 IP 地址# 連接到 WiFi
connect_wifi("your_ssid", "your_password")  # 替換為你的 WiFi 名稱和密碼# 主循環:控制 LED 閃爍
while True:led.value(1)  # 點亮 LEDtime.sleep(1)  # 等待 1 秒led.value(0)  # 熄滅 LEDtime.sleep(1)  # 等待 1 秒

代碼說明

  1. GPIO 控制

    • 使用 machine.Pin 模塊控制 GPIO 引腳。
    • Pin(5, Pin.OUT) 表示將 GPIO 5 設置為輸出模式。
    • led.value(1)led.value(0) 分別用于點亮和熄滅 LED。
  2. WiFi 連接

    • 使用 network 模塊連接到 WiFi 網絡。
    • network.WLAN(network.STA_IF) 創建一個 WiFi 客戶端對象。
    • wlan.connect(ssid, password) 用于連接到指定的 WiFi 網絡。

開發環境搭建

  1. 固件燒錄

    • 從 MicroPython 官網下載適用于 ESP32 的固件。
    • 使用 esptool.py 工具將固件燒錄到 ESP32 開發板。
  2. IDE 選擇

    • 推薦使用 Thonny IDE 或 uPyCraft IDE。
    • 在 Thonny 中配置 MicroPython 解釋器,并連接到 ESP32 的串口。

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

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

相關文章

一周熱點-文本生成中的擴散模型- Mercury Coder

一、背景知識 在人工智能領域,文本生成模型一直是研究的熱點。傳統的大型語言模型多采用自回歸架構,從左到右逐個預測下一個標記。這種模型雖然在生成連貫文本方面表現出色,但在速度上存在一定的局限性,因為它需要按順序生成每個標…

Qt調試功能使用方法

QT編程環境 QT在Windows操作系統下的三種編程環境搭建。 方案編程環境編譯器調試器1Qt CreatorMinGW GCCGDB2Qt CreatorMicrosoft Visual C CompilerDebugging Tools for Widows3Microsoft Visual Studio VS自帶VS自帶 方案提及的QT安裝程序及壓縮包均能在官網Index of /off…

vulnhub靶場之【digitalworld.local系列】的mercy靶機

前言 靶機:digitalworld.local-mercy,IP地址為192.168.10.11 攻擊:kali,IP地址為192.168.10.6 kali采用VMware虛擬機,靶機選擇使用VMware打開文件,都選擇橋接網絡 這里官方給的有兩種方式,一…

Fiddler抓取App接口-Andriod/IOS配置方法

Andriod配置方法: 1)確保手機和Fiddler所在主機在同一個局域網中 2)獲取Fiddler所在主機的ip地址,通過cmd命令進入命令編輯器,輸入ipconfig -all,找到IPv4地址,記下該地址 3)對手機…

步進電機軟件細分算法解析與實踐指南

1. 步進電機細分技術概述 步進電機是一種將電脈沖信號轉換為角位移的執行機構,其基本運動單位為步距角。傳統步進電機的步距角通常為 1.8(對應 200 步 / 轉),但在高精度定位場景下,這種分辨率已無法滿足需求。細分技術…

C語言_數據結構總結2:動態分配方式的順序表

0——靜態分配內存的順序表和動態分配內存的順序表的相同之處和不同之處 相同之處 基本操作邏輯相同:無論是靜態分配還是動態分配的順序表,其核心的操作邏輯是一致的。例如插入操作都需要將插入位置之后的元素依次后移,刪除操作都需要將刪除…

Vue 與 Element UI 深度探秘:從 Array.isArray 到動態綁定的技術之旅!?

以下是一篇深入的技術博客&#xff0c;基于我們對 compare-form.vue 和 <w-form-select.vue> 的所有討論&#xff0c;涵蓋 Array.isArray、option-label/option-value、:list 動態綁定、: 語法以及 Vue 2/3 兼容性等問題。博客風格輕松有趣&#xff0c;加入 SVG 圖解和實…

計算機視覺|3D卷積網絡VoxelNet:點云檢測的革新力量

一、引言 在科技快速發展的背景下&#xff0c;3D 目標檢測技術在自動駕駛和機器人領域中具有重要作用。 在自動駕駛領域&#xff0c;車輛需實時、準確感知周圍環境中的目標物體&#xff0c;如行人、車輛、交通標志和障礙物等。只有精確檢測這些目標的位置、姿態和類別&#x…

前端打包優化相關 Webpack

前端打包優化相關 Webpack 打包時間的優化&#xff08;基于 Vue CLI 4 Webpack 5&#xff09; 1. Webpack 配置減少打包時間 1.1 對 JS 配置&#xff1a;排除 node_modules 和 src 中的打包內容 在開發環境下&#xff0c;修改 Webpack 的 JS 規則&#xff0c;排除 /node_m…

leetcode69.x 的平方根

題目&#xff1a; 給你一個非負整數 x &#xff0c;計算并返回 x 的 算術平方根 。 由于返回類型是整數&#xff0c;結果只保留 整數部分 &#xff0c;小數部分將被 舍去 。 注意&#xff1a;不允許使用任何內置指數函數和算符&#xff0c;例如 pow(x, 0.5) 或者 x ** 0.5 。…

Docker 部署 MongoDB 并持久化數據

Docker 部署 MongoDB 并持久化數據 在現代開發中&#xff0c;MongoDB 作為 NoSQL 數據庫廣泛應用&#xff0c;而 Docker 則提供了高效的容器化方案。本教程將介紹如何使用 Docker 快速部署 MongoDB&#xff0c;并實現數據持久化&#xff0c;確保數據不會因容器重啟或刪除而丟失…

信奧賽CSP-J復賽集訓(模擬算法專題)(3):P1089 [NOIP 2004 提高組] 津津的儲蓄計劃

信奧賽CSP-J復賽集訓&#xff08;模擬算法專題&#xff09;&#xff08;3&#xff09;&#xff1a;P1089 [NOIP 2004 提高組] 津津的儲蓄計劃 題目描述 津津的零花錢一直都是自己管理。每個月的月初媽媽給津津 300 300 300 元錢&#xff0c;津津會預算這個月的花銷&#xff0…

日新F1、瑞研F600P 干線光纖熔接(熔接損耗最大0.03DB)

Ⅰ. 設備特性對比與實測驗證 1. 日新F1&#xff08;兩馬達&#xff09;極限參數 切割角度&#xff1a;必須≤0.3&#xff08;雙邊累計誤差&#xff1c;0.6&#xff09; ? 實測案例&#xff1a;切割0.35時&#xff0c;損耗波動達0.05-0.08dB&#xff08;超干線標準&#xff09…

【量化科普】Sharpe Ratio,夏普比率

【量化科普】Sharpe Ratio&#xff0c;夏普比率 &#x1f680;量化軟件開通 &#x1f680;量化實戰教程 在量化投資領域&#xff0c;夏普比率&#xff08;Sharpe Ratio&#xff09;是一個非常重要的風險調整后收益指標。它由諾貝爾經濟學獎得主威廉F夏普&#xff08;William…

數據結構--【順序表與鏈表】筆記

順序表 template <class T> class arrList :public List<T> //表示 arrList 類以公有繼承的方式繼承自 List<T> 類 //公有繼承意味著 List<T> 類的公共成員在 arrList 類中仍然是公共成員&#xff0c;受保護成員在 arrList 類中仍然是受保護成員。 { …

idea中隱藏目錄

可能的解決步驟&#xff1a; 排除目錄的方法是否在2021版本中有變化&#xff1f;應該沒有&#xff0c;還是通過右鍵標記為排除。 用戶可能想完全隱藏目錄&#xff0c;比如在項目視圖中不顯示&#xff0c;這可能需要調整項目視圖的設置&#xff0c;比如取消勾選“顯示排除的文件…

AWS 如何導入內部SSL 證書

SSL 證書的很重要的功能就是 HTTP- > HTTPS, 下面就說明一下怎么導入ssl 證書,然后綁定證書到ALB. 以下示例說明如何使用 AWS Management Console 導入證書。 從以下位置打開 ACM 控制臺:https://console.aws.amazon.com/acm/home。如果您是首次使用 ACM,請查找 AWS Cer…

2025最新群智能優化算法:基于RRT的優化器(RRT-based Optimizer,RRTO)求解23個經典函數測試集,MATLAB

一、基于RRT的優化器 基于RRT的優化器&#xff08;RRT-based Optimizer&#xff0c;RRTO&#xff09;是2025年提出的一種新型元啟發式算法。其受常用于機器人路徑規劃的快速探索隨機樹&#xff08;RRT&#xff09;算法的搜索機制啟發&#xff0c;首次將RRT算法的概念與元啟發式…

doris: Oracle

Apache Doris JDBC Catalog 支持通過標準 JDBC 接口連接 Oracle 數據庫。本文檔介紹如何配置 Oracle 數據庫連接。 使用須知? 要連接到 Oracle 數據庫&#xff0c;您需要 Oracle 19c, 18c, 12c, 11g 或 10g。 Oracle 數據庫的 JDBC 驅動程序&#xff0c;您可以從 Maven 倉庫…

im即時聊天客服系統SaaS還是私有化部署:成本、安全與定制化的權衡策略

隨著即時通訊技術的不斷發展&#xff0c;IM即時聊天客服系統已經成為企業與客戶溝通、解決問題、提升用戶體驗的重要工具。在選擇IM即時聊天客服系統時&#xff0c;企業面臨一個重要決策&#xff1a;選擇SaaS&#xff08;軟件即服務&#xff09;解決方案&#xff0c;還是進行私…