需要參考輪趣的智能小車自己搭建一臺智能機器人,這里從底層控制開始逐步搭建。
控制模式
之后要自行搭建智能小車,所以將輪趣的底盤代碼進行學習,根據開發手冊先大致過一遍需要的內容。
有做很多個控制方法,包括了手柄、串口、CAN、ROS等,如下所示:
如上圖所示,對于項目而宮,重要的是PS2控制(即迎控器控制),以及CAN控制(需要用到CAN通訊),串口控制(上位機算法的通訊),其余的關注一下就可以了。
速度單位
全部控制程序全部換算成國際單位制m/s,所以要將緝碼器的原始數據轉換為m/s。
這里涉及的就是輪子半徑、編碼器數據、控制頻率、編碼器精度,通過這幾個數據最終完成小車速度的換算。公式如下所示:
串口控制
就是ROS與STM32的通訊,通過串口3來完成通訊。
這里需要自定義一個數據幀,通過這個數據幀來完成電機控制狀態的傳輸通訊。這里發送的數據包括:機器人使能;機器人三軸速度;IMU三軸加速度、角速度;電池電壓。還要加上串口通訊可以用作檢驗的幀頭幀尾和校驗位。
同時,串口發送一次只能發送8位,而目前數據為24位,所以數據需要拆成高8位和低8位來傳輸。這里就相當于自定義了一套encoder和decoder的密碼模式。
這里可以借鑒他的編碼方式:幀頭固定0x7B,幀尾固定0x7D,用一位fag_stop表示是否使能,數據校驗通過BCC校驗(所有數據為異或)
具體的編碼方式,也就是串口一次所傳輸的數據是可以自定義的,這里就不展開了,在自己做項目的時候可能還要修改一下。
APP調參
可以通過藍牙/WIFI來完成控制,實質也是自定義數據,然后通過串口2來完成數據傳輸。
PS2控制
這里因為是專門的控制手柄,有自己做好的底層信號處理,對于應用層開發者而言,需要做的就是解析傳輸過來的信號,并完成對應的控制狀態選擇就可以了。
CAN控制
數據傳輸直接通過CAN總線來完成,需要先配置好CAN,然后自定義數據來完成傳輸,總體邏輯是類似的,只不過只需要關心具體的傳輸數據了,因為CAN是自帶數據校驗等的(CAN數據中自己就有校驗等等的位)。
OLED顯示
通過IIC總線來完成內容顯示。只需要通過OLED的通訊協議,來完成畫點就可以了。
陀螺儀零點漂移消除
IMU的數據存在零點漂移,需要設計一定的算法來完成濾波。
設置一定的延時,在剛上電的時候并不讀取角速度值,直到超過了這個時間,才會去讀取角速度值并將其作為漂移值。
運動學解算
這個就是兩輪差速小車、麥輪小車等的運動學模型,將電機與機器人的運動聯系起來。
這里之后的項目是需要四驅車模型,這里就記錄一下四驅車的運動模型。
其中VA、VB、VC、VD分別為 A、B、C、D四個輪子的轉速,也就是電機的轉速;Vx為小車沿著X軸平移速度,w為小車沿Z軸的旋轉速度;a=D/2為小車輪距D的一半,b=H/2為小車軸距H的一半。
最終就可解算出如下的運動學公式,將機器人運動轉化為電機旋轉:
PID控制
這里直接就是一個速度閉環控制,只用PI就差不多了,增量式或者位置式PI都可以。
整體程序結構圖
現根據運動學模型來選擇具體的計算公式,然后完成一系列外設的初始化,最后接到RTOS的任務接口,開始循環執行對應的任務。
對于遙控命令,都是通過串口/CAN的中斷來獲取。