2022年3月29日 星期二

{03}兩輪智能小車-控制端軟體介紹與測試

網頁最後修改時間:2022/03/29

本篇要來介紹小車套件中不同分類所用的控制端軟體,內容有:


/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*

有購買商品的使用者,網頁中所需相關資料已放置於雲端硬碟,請自行下載使用!

/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*


*********************************************************************************

更多機器人(多足、智能小車)相關商品,請至分類賣場。

*********************************************************************************


** 下面操作需要受控端與控制端雙方的藍牙裝置,請記得事先打開!!!


【(01)BLE 遙控車】

BLE 遙控車作為受控端,接收來自控制端軟體的通訊數據,然後解析通訊數據,做為小車的目標 PWM 值和左右輪速輸出計算之用。


/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* (01-01)BLEJoystick v0.2.0 畫面說明

BLEJoystick 有三個主要頁面:

  • "BLUETOOTH LE"
    在這個頁面,會根據 "ADVANCED" 的設定,搜尋符合 Custom Service UUID 和 Custom Characteristic UUID 的 BLE 裝置,並與其連線和監控。
  • "JOYSTICK":操作虛擬搖桿的頁面。
  • "ADVANCED"BLEJoystick 程式的參數設定。像是虛擬搖桿大小和範圍的設定,或是 BLE 服務和特徵的 UUID 設定等...,都在這個頁面中。

BLEJoystick 沒有限制各頁面之間,必須等 BLE 裝置連線和特徵監控成功之後才可以做切換。但是沒有 BLE 裝置,操作數據是不會被傳送出去和顯示錯誤訊息的,只有 BLE 裝置通訊存在時才會有。


** (01-01-01)BLUETOOTH LE 頁面

BLEJoystick 開機畫面一過就會進入到這一個頁面中,除非有要在 "ADVANCED" 頁面做什麼設定,否則只要直接按下 "Scan" 按鈕就會一鍵完成所有的連線和特徵監控的動作。

掃描的時間大概為 10 秒左右,成功就會如下圖所示一般,列出 BLE 裝置名稱、服務和該服務的特徵;若是沒有搜尋到,建議直接重啟 BLEJoystick 再掃描一次,會比再按一次 "Scan" 容易!


** (01-01-02)JOYSTICK 頁面

進入到 "JOYSTICK" 頁面後,首先映入眼簾的是一個淺藍方形和藍色小圓,前者代表小圓可移動範圍限制區域,後者代表搖桿,兩者統稱為搖桿區域。

搖桿區域的中心點預設是在淡藍區域的中央,搖桿區域的建立只限定在淡藍區域但不限定位置。在這個淡藍區域,會以手指點下去的位置作為搖桿區域的中心點,所有搖桿移動距離的計算都是以此點作為依據。

若是不習慣預設的搖桿區域的大小設定,在"ADVANCED" 頁面可以自行設定方形邊長和小圓半徑。

手指在搖桿區域做移動時,上方會出現搖桿上下和左右的值,這兩個值會直接發送給小車。

搖桿發送的格式是這樣:

  • 上下:代表前進和後退。
    ch3 ####\n
  • 左右:代表左右輪差(若轉向太大,受控端計算得出負值則變成旋轉)。
    ch4 ####\n


** (01-01-03)ADVANCED 頁面

進入到 "ADVANCED" 頁面中,可以設定搜尋符合特定服務 UUID 和其下層特徵 UUID 的 BLE 裝置、虛擬搖桿區域的設定,小車目標 PWM 值和左右輪偏差值。

Custom Service UUID (服務)和在其下層的 Custom Characteristic UUID (特徵)有其一定的規定和限制,不能隨便亂設!

對於 MLT-BT05 來說,只有最前面的 Service UUID 這四個 FFE0 和 Characteristic UUID 這四個 FFE1 字元可以做變換,其餘不能改!一改就會出問題,有興趣可以參考前一篇(ㄆㄜ ㄊㄧㄡ ㄙˋ: {02}兩輪智能小車-BLE(Bluetooth LE,低功耗藍牙)模組的設定)網頁的說明。

但對於 ESP32 來說,並沒有上面的限制,可以自行在 UUID 的網站(例如,Online UUID Generator Tool)生成,但不要自己亂寫一通!

至於小圓半徑和正方形邊長就是搖桿的區域設定,因為每個人的手機並不一定一樣,所以若是搖桿區域大小的設定不盡你意,那麼就去調整這兩個參數試試!

最後的這兩個參數:

  • SP:這個數值會做為 PWM 值輸出的最大值。例如 SP=100,那麼當搖桿往上到極限,左右為 0 時沒有設左右輪偏差值,表示小車左右兩輪都設定 PWM=100,小車前進。
    輸出格式是:SP ###\n
  • tr:保留的選項,但這選項可以用,小車程式也有支援,主要是用來設定左右輪偏差值,一般來說維持為 0 就好。
    輸出格式是:lr ###\n


/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* (01-02)BLEJoystick 操作輸出說明

準備一個 BLE 模組(這裡使用 MLT-BT05,若使用其他模組,請自行去修改 Custom Service UUID 和 Custom Characteristic UUID)接上 USB 轉 UART 模組,然後打開串口調試助手

手機端打開 BLEJoystick 並建立好與 MLT-BT05 的通訊,切換到 "ADVANCED" 頁面,設定 SP 等於 150tr 等於 -20,然後按下 "Send To uC" 按鈕,可得到類似下面的輸出。


切換到 "JOYSTICK" 頁面任意移動搖桿區域裡的小圓,可得到類似下面的輸出。


【(02)BLE PID 循跡車】

不管是受控端或是控制端,PID 循跡車主要的差異在於,通訊方法的使用上以及主控板是 Arduino UNO 或是 ESP32。韌體程式和操作介面則都大同小異,熟悉其中一樣自然而然之後其他的也會很容易就能上手,下面就來看看 BLE 通訊的 PID 循跡車操作介面。


/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* (02-01)PCTCGUI m0p1 畫面說明

PCTCGUI 的頁面除了通訊選擇類型頁面之外,其餘皆由側面選單選擇(手指在軟體畫面向右滑即可叫出)。側面選單中有控制參數設定機器人狀態監控這兩類四個頁面,參數讀取/寫入操作這一部分則是直接操作的動作沒有頁面。


** (02-01-01)選擇通訊類型頁面

一打開 PCTCGUI,首先會開啟一個選擇通訊方式的畫面,直接點選 "Bluetooth LE",會進入到 BLE 裝置搜尋的頁面(其他的選項現在不支援,保留作為後續使用)。


** (02-01-02)Bluetooth LE 頁面

進入到 "Bluetooth LE" 頁面後,直接點選 "掃描 BLE 裝置",搜尋有著 PCTCGUI 預設 Custom Service UUID (服務)和在其下層的 Custom Characteristic UUID (特徵)的 BLE 裝置。

成功與 BLE 裝置(這裡指的是 MLT-BT05)連線之後,會出現搜尋到的 BLE 裝置名稱(名稱若沒修改就是 MLT-BT05,此時 MLT-BT05 上面的紅燈應該要恆亮),接著點選 MLT-BT05 就會開始監控特徵進行通訊並跳至"小車狀態"的頁面。

** 這個 PCTCGUI 的版本沒有開放可自行定義 Service UUID 和 Characteristic UUID 的參數功能,所以不要任意修改 BLE 裝置裡這兩個部分的設定值,維持出廠預設值即可。

成功啟動特徵監控之後,會自動切換到小車狀態的頁面,並提示開始監控,按下 "OK" 離開回到頁面中。


** (02-01-03)側面選單

接著用手指在畫面中向右滑動叫出側面選單。

按下控制參數設定和機器人狀態下面的按鈕後,會跳至其對應的頁面。

若是按下參數讀取/寫入操作下面有 > 的這幾個按鈕,則會出現如下圖所示的選單在螢幕中央。選單分為"本地""遠端現行設定""遠端 EEPROM",點選後會根據上一層選擇進行相對應的參數讀取/寫入的動作,下面就針對這個部分來做說明。


** (02-01-03-01)重置 GUI 設定值

按下"重置 GUI 設定",則所有的 PCTCGUI 軟體裡面所有的參數設定都會恢復到預設值(這些預設值是寫死的不能更改),參數調整可以依此作為基礎值調整。


** (02-01-03-02)顯示設定值

按下"顯示設定值",點選選單中選項,就會將本地檔案裡的參數值(已儲存的參數值,非預設值)、小車現行運行的參數值或儲存在 Arduino UNO EEPROM / ESP32 Flash 中的參數值,取得輸出到"小車狀態"頁面中間的文字欄位裡。

利用這個選項可以確認 GUI 與小車之間的參數值是否一致?又或是 PID 參數還未調整好之前需要看小車現行參數值、等待完全調整好之後再儲存到 EEPROM / Flash 中等...,方便調整時查看參數。


** (02-01-03-03)載入 GUI 設定值從

按下"載入 GUI 設定值從",點選選單中選項,就會將本地檔案裡的參數值(已儲存的參數值,非預設值)、小車現行運行的參數值或儲存在 Arduino UNO EEPROM / ESP32 Flash 中的參數值,取得並取代現有 GUI 裡面的所有參數值。

PCTCGUI 啟動後會預先載入儲存在本地檔案裡的參數值(非預設值);而小車啟動後載入的則是預設值(非 EEPROM/Flash 裡的值), EEPROM / Flash 裡面儲存的是之前的參數值。所以利用這個選項,可以載入不同的參數值作為調整的依據基礎。


** (02-01-03-04)儲存 GUI 設定值到

按下"儲存 GUI 設定值從",點選選單中選項,就會將 GUI 裡所有的參數值,儲存到手機本地檔案或作為小車現行記憶體參數;又或是將小車現行記憶體參數直接儲存到 EEPROM / Flash。

** 這裡有一點要特別解釋一下:"儲存 GUI 設定值從 / 遠端 EEPROM(Remote EEPROM)" 這一組選項,其實是將小車現行記憶體參數直接儲存到 ArduinoUNO EEPROM 或 ESP32 Flash,而不是將 GUI 的參數值儲存到小車的 EEPROM / Flash。

利用這個功能,調整後的參數值可以直接丟給小車做測試,在完成調整後,可將這組參數儲存在手機本身或是小車 EEPROM / Flash 中,避免每一次都要重新調整的不便!



** (02-01-04)小車狀態頁面

小車狀態頁面除了作為發送/接收訊息數據之用外,最上面的區域可以用來反應即時的循跡模組的狀態,其他的區域看下圖的說明。

小車狀態輸出格式是:

  • 開始/停止 監視感測器值:
    SM\n
  • SP:馬達初始驅動速度。
    SP ###\n
  • "START" / "STOP":開始/停止 PID 循跡。
    ST\n


** (02-01-05)PID 頁面

"PID" 頁面,就是用來調整如下所示的 PID 公式裡面的 Kp、Ki 和 Kd 這三個參數的地方。

調整的方法,就是以預設值作為基礎,設定好 SP 值然後按下 "START" 開始 小車的 PID 循跡,再依照小車實際循跡時的擺動情況調整 PID 參數值,讓小車循跡時越 Smooth 越好。

至於 PID 調整,有很多方法論可以參考,但不管如何就是經驗,就像打團戰遊戲一樣,同樣的策略對戰不同的隊伍,有誰可以可以保證勝率可以維持百分之百?

即使是外觀同樣的 PID 循跡車,只要循跡路徑不同、 PID 公式的實作方式不同、PID 參數調整的不同,那麼它就與眾不同!

PID 參數調整的輸出格式是:

  • Kp:PID 中的 KP (比例項) 設定值。
    KP ###\n
  • Ki:PID 中的 KI (積分項) 設定值,此值輸入後會除以 100 再指定給 KI 變數。
    KI ###\n
  • Kd:PID 中的 KD (微分項) 設定值。
    KD ###\n

** 如果不懂什麼是 PID 的話,可以看看這篇 ㄆㄜ ㄊㄧㄡ ㄙˋ: {2} 自製四軸無人機 - PID 調整後的飛行測試 網頁的介紹。


** (02-01-06)執行時間頁面

在"執行時間"頁面中,可用來設定每一次 PID 公式計算的時間,以及每隔多少次的迴圈輸出一次 PID 計算值。即使不設迴圈時間,程式執行也需要時間,所以根據主控板和控制端硬體性能選擇適當的迴圈時間就很重要。

"執行時間"頁面中的參數與 PID 公式裡面的時間 t 有關,一但修改就會影響到原有的 PID 公式的計算,所以如果沒必要就維持預設值就好。

執行時間參數的輸出格式:

  • LT:迴圈執行時間。
    LT ###\n
  • LC:幾次 LT 後輸出一次計算數據(受控端要打開 SERIAL_DEBUG)。
    LC ###\n


** (02-01-07)手動控制頁面

PCTCGUI 沒有提供虛擬搖桿的功能,取而代之的是手動控制按鈕。

每個動作的速度(PWM)輸出值由 SP 控制,但要記得設定後要傳送給小車,否則數值不會生效。

各個手動控制按鈕的輸出格式(由上而下,由左而右)是:

  • 小車逆時針旋轉:LR\n
  • 前進:FR\n
  • 小車順時針旋轉:RR\n
    -----------------------------------
  • 停止:SO\n
    -----------------------------------
  • 左轉彎:TL\n
  • 後退:BW\n
  • 右轉彎:TR\n


/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* (02-02)PCTCGUI 操作輸出說明

用圖片來說明 PCTCGUI 與小車之間的通訊指令輸出很不方便,所以我拍攝了手機實際操作和 BLE 模組建立通訊之後的指令輸出的影片。

** BLE 模組是直接插在電腦用串口調試助手做接收,所以不會有資料回傳到手機端的 PCTCGUI。


【(03)結論】

本篇介紹和說明了 BLE 遙控車和 BLE PID 循跡車控制端的手機程式 BLEJoystickPCTCGUI 的使用方法,以及控制指令的輸出格式。如果想試用的這兩個手機 APP 的話,可以用露露通跟賣場申請(也就是說,要有露天的帳號才可以申請試用),其他方式不接受申請!

沒有軟體和韌體是完美的、沒 BUG 的,有任何正面建議歡迎在此留言分享!


.

.


<<部落格相關文章>>


.

.

沒有留言:

張貼留言

留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!

發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?

不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !