2019年5月14日 星期二

ESP8285 兩軸伺服馬達雲台運動控制學習套件{3 of 4}MPU6050 的 DMP 輸出測試

網頁最後修改時間:2019/05/14

這篇是 ESP8285 兩軸伺服馬達雲台運動控制學習套件中的第三個部分:MPU6050 的 DMP 輸出測試。

套件所包含的學習部分可由下面這張圖看出。

其中,本篇網頁主要說明的是圖中 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 地址
修改下面在全局變數區域這一行的程式碼為取得的 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 程式:

打開 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 的轉動量,轉換成對應兩軸雲台的轉動量,那就能達到下一個單元控制雲台跟隨與自穩的目的了。


<< 部落格相關文章 >>

沒有留言:

張貼留言