網頁最後修改時間:2019/05/14
套件所包含的學習部分可由下面這張圖看出。
其中,本篇網頁主要說明的是圖中 MPU6050 校正 (中間偏左下,紫色線和框)的部分:
說明 ESP8285 如何啟用 MPU6050 的 DMP,以及用 3D 圖形做輸出數據測試。
*********************************************************************************
學習套件可至下面網址購買:
*********************************************************************************
【接線圖與燒錄說明】
關於學習套件的接線與燒錄在前一篇網頁已做過詳細的說明,請自行跳轉至該網頁閱覽,這裡不再贅述!
【Why DMP(Digital Motion Processor)】
或許我應該在這裡說明一下,為什麼選擇 DMP 作為雲台跟隨與自穩運動控制?
首先,它是函式庫自帶的範例,只要稍加修改就能用。再者,對比 DMP 與其他數據融合算法,DMP 計算的負荷都在 MPU6050 且數據輸出格式可以選擇,ESP8285 只要負責無線網路通訊和伺服馬達的控制即可,數據可即讀即用等...。
例如,下面的兩輪平衡車就是用 MPU6050 DMP 的算法,作為 PID 的輸入。
不管使用哪一種數據融合的算法,最終都是想要得到 Roll-Pitch-Yaw 的轉動角度,所以只要穩定且符合需求的算法就是好!
至於真正的效果會是如何?不是實際的做一組,就是看下一篇網頁中的影片展示,對其它算法有興趣的話,可以上網找關於 DMP、Complementary Filter、Kalman Filter 等...的介紹或比較的影片看。
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
有購買商品的使用者,網頁中所需相關資料已放置於雲端硬碟,請用裡面的資料對照這裡的說明。
其他的使用者,程式碼請自行依照網頁中的說明自行修改再做使用。
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
【DMP 輸出測試】
要完成這一小節,請先完成下面列表的工作:
- 下載並安裝 Processing 軟體
- 安裝程式所需要的函式庫
- 取得 MPU6050 校正後的偏移值(三軸加速度計和三軸陀螺儀)
- 做過修改的範例程式碼
* DMP 輸出測試程式碼修改(for ESP8285) :
打開 MPU6050 函式庫裡的範例程式 MPU6050_DMP6_ESPWiFi,跟著下面的步驟進行修改。
修改的地方不多,幾個小地方而已!
** 中斷接腳號碼:
DMP 模式下,MPU6050 在可輸出資料時, <INT> 接腳狀態會由低準位轉換為高準位,程式中必須要去抓取這個訊號,電路圖中將這個訊號接到 ESP8285 的 <IO4>,所以在範例程式的全局變數的部分,將 INTERRUPTE_PIN 修改為 4。
MPU6050_DMP6_ESPWiFi.ino, 全局變數, 修改
#define INTERRUPT_PIN 4 // use pin 4 (IO4) on ESP8285
** 接收 OSC 的遠湍 IP 地址:
為了要使用 3D 圖形驗證輸出的結果,範例程式採用的是將輸出數據包裝在 OSC 封包中,再經由 UDP 通訊的方式發送到 Processing。
所以程式一開始必須要連線到 ESP8285 的 SoftAP mpu6050,設定好無線網路連線的資訊後,將電腦與 ESP8285 置於同一個無線網路;由於我們執行 Processing 會是在 PC 的環境中,所以用 PC 的 IP 地址就可以。
Windows 中打開 "命令提示字元視窗",輸入下面的指令 ipconfig
Linux 在終端機視窗中輸入 ifconfig
如下 Windows 作業系統中,執行 ipconfig 的視窗輸出內容;其中 IPv4 後面的 IP 就是程式需要的。
Windows 作業系統中,取得 IP 地址 |
MPU6050_DMP6_ESPWiFi.ino, 全局變數, 修改
const IPAddress outIp(192, 168, 11, 6); // remote IP to receive OSC
** I2C 接腳:
依照電路圖的佈線設計,I2C 使用 <IO10> 和 <IO9> 這兩支接腳,所以在 mpu_setup() 函式裡原本的程式碼不能用,要修改成下面這個指定接腳的樣子。
MPU6050_DMP6_ESPWiFi.ino, mpu_setup(), 修改
Wire.begin( 10, 9 );
** 設定各軸偏移值:
原範例程式對於偏移值的設定,只設定了四個部分,我多加了兩個進去,並且載入上一篇所得到的偏移值高的部分。
MPU6050_DMP6_ESPWiFi.ino, mpu_setup(), 新增和修改
// supply your own gyro offsets here, scaled for min sensitivity mpu.setXGyroOffset(192); mpu.setYGyroOffset(-55); mpu.setZGyroOffset(-36); mpu.setXAccelOffset(-3614); mpu.setYAccelOffset(-1358); mpu.setZAccelOffset(566);
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
*程式測試 :
上面都修改好之後,程式存檔、編譯和上傳到 ESP8285。
完成後打開任一串列埠軟體,(手機或 PC)連線到 SoftAP 並完成無線網路的設定,ESP8285 會自動連接到與 PC 同一個無線網路中。
** 此處的無線網路設定方式與 ESP8285 兩軸伺服馬達雲台運動控制學習套件{1 of 4}手機控制的兩軸伺服馬達雲台 網頁中影片開頭操作相同,不熟悉的可以用看的,比較快上手!
當按下 "Exit Portal" 按鈕後(或是等連線程式的時間到),MPU6050 就會開始執行相關的 DMP 程式碼,完成之後就會看到下面的文字輸出
程式輸出訊息 |
- MPU6050 connection 後面接的是 successful 而不是 failed
- Enabling DMP... 後面接的不是 DMP Initialization failed (code
那麼就可以開始下一步!否則,仔細再檢查一次 MPU6050 的接線是否有鬆脫,或是其他未注意到的問題,重置(Reset)ESP8285 重新再來一遍,直到輸出沒有看到任何錯誤訊息!
打開 Processing 軟體,進入到 MPU6050_DMP6_ESPWiFi/Processing/MPUOSCTeapot 資料夾中載入 MPUOSCTeapot.pde,按下 "Run"(三角形)按鈕。
等待一段時間後,會看到螢幕出現一個小視窗,裡面有一台小飛機,這時隨意轉動 MPU6050,它就跟著隨意轉動。
DMP 執行與 Processing 3D Plane 圖形 |
[ Processing 執行出現錯誤 ]
如果執行出現錯誤,請先看看輸出訊息,確認造成錯誤的原因,是否是因為函式庫遺失或找不到所造成?
如果是的話,打開選單 "Sketch/Import Library.../Add Library",在出現的視窗選擇 "Libraries" ,輸入缺少的函式庫名稱在 Filter 欄位中進行搜尋,然後按下右下角的 "Install" 就可進行安裝。
之後再重新執行,應該就可以解決問題!
Processing-Contribution-Manager-Libraries |
【結論】
利用這樣的原理,只要把 MP6050 的轉動量,轉換成對應兩軸雲台的轉動量,那就能達到下一個單元控制雲台跟隨與自穩的目的了。
<< 部落格相關文章 >>
- ESP8285 兩軸伺服馬達雲台運動控制學習套件{4 of 4}雲台自穩與跟隨運動控制
- ESP8285 兩軸伺服馬達雲台運動控制學習套件{2 of 4}MPU6050 的偏移值校正(offset calibration)
- ESP8285 兩軸伺服馬達雲台運動控制學習套件{1 of 4}手機控制的兩軸伺服馬達雲台
- 小型兩軸伺服馬達 (舵機) 雲台 (Pan-Tilt Kit) 動作展示
沒有留言:
張貼留言
留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!
發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?
不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !