網頁最後修改時間:2022/03/29
本篇要來介紹小車套件中不同分類所用的控制端軟體,內容有:
-
(01)BLE 遙控車
- (02)BLE PID 循跡車
- (03)結論
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
有購買商品的使用者,網頁中所需相關資料已放置於雲端硬碟,請自行下載使用!
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
*********************************************************************************
更多機器人(多足、智能小車)相關商品,請至分類賣場。
*********************************************************************************
** 下面操作需要受控端與控制端雙方的藍牙裝置,請記得事先打開!!!
【(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 等於 150 和 tr 等於 -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 循跡車控制端的手機程式 BLEJoystick 和 PCTCGUI 的使用方法,以及控制指令的輸出格式。如果想試用的這兩個手機 APP 的話,可以用露露通跟賣場申請(也就是說,要有露天的帳號才可以申請試用),其他方式不接受申請!
沒有軟體和韌體是完美的、沒 BUG 的,有任何正面建議歡迎在此留言分享!
.
.
<<部落格相關文章>>
- {04}兩輪智能小車-ESP32 PS3/PS4 遊戲手把控制遙控車
- {03}兩輪智能小車-控制端軟體介紹與測試
- {02}兩輪智能小車-BLE(Bluetooth LE,低功耗藍牙)模組的設定
-
{01}兩輪智能小車-V1.0 DIY 套件組裝建議說明
- {00}兩輪智能小車-V1.0 DIY 套件 Arduino UNO / ESP32 BLE 遙控車、PID 循跡車展示影片
- { EP8266 WiFi 控制小車 } [ 1/3 ] - 智能避障循跡小車底盤構件組裝建議說明
- { EP8266 WiFi 控制小車 } [ 2/3 ] - 電路佈線與馬達轉向測試
- { EP8266 WiFi 控制小車 } [ 3/3 ] - 小車路試
- eZ430 運動手錶控制樹莓派小車 ( 開迴路控制 )
.
.
沒有留言:
張貼留言
留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!
發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?
不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !