1、前言html
最近參加了RT-Thread官方發起的RT-Robot Car DIY活動,藉此機會想總結一些本身本科四年的所學的部分知識。git
也能夠幫助到那些須要的小夥伴(能夠參考個人代碼中對RT-Thread的can設備驅動的使用方法,對IIC驅動的使用方法,mpu6050+hmc5883的初始化和數據讀取的方法,RT-Thread硬件定時器的使用方法,滑動窗口濾波的鏈表實現,pid結構的代碼參考,pid參數調試方法等)github
2、演示算法
github連接(包括整個keil工程的代碼,原理圖和PCB,機械圖紙和一些參考資料):https://github.com/iamluoyijie/funny_car多線程
小車實物:app
兩個演示視頻連接:https://v.youku.com/v_show/id_XNDMzNzExODMyMA==.html框架
https://v.youku.com/v_show/id_XNDMzNzExODMxNg==.html編碼
3、詳細步驟線程
硬件上,MCU選用stm32f407zgt6,imu選用gy-86(mpu6050+hmc5883+ms5611)。電機爲大疆無刷電機m2006,電機驅動爲電調c610,因此選用6s航模鋰電池,因此須要設計24V轉5v,5v轉3.3v穩壓電路,分別使用lm2576-5.0和asm1117-3.3穩壓芯片,因爲電調使用can總線通訊,因此須要單片機外接can芯片,選用TJA1050,除此以外就是MCU的一些接口電路,包括led,key,sw下載接口、多路串口、PWM和IO。總得來講比較簡單(須要注意一點是:電池24v輸出到電調24v輸入,是在pcb上走線,單路額定電流10A,線寬須要注意,最好雙面都佈線)。這是AD18的PCB工程連接,。這是pcb的3d圖:設計
機械上,須要根據電機尺寸單獨設計電機支架和小車底板,三視圖以下所示:
軟件上,我是使用的這個目錄下的bsp:https://github.com/RT-Thread/rt-thread/tree/v4.0.0/bsp/stm32f4xx-HAL,須要的功能能夠在rtconfig.h文件中開啓對應的宏。
4、不足分析與接下來繼續要作的工做。
一、速度內環的pid效果不太理想,500的電機目標轉速,實際轉速波動有正負50。角度外環0度的指望角度,有正負0.5度的波動,小車運動過程當中,速度過快就會倒。我感受最重要的緣由就是電池過重,致使小車重心偏高,其次就角度更新頻率太慢,電機轉速值不許,pid參數也不是最優。
二、代碼上,使用了太多全局變量。led的狀態顯示沒好好弄,ps2的好多按鍵沒利用上。
三、接下里的工做就是,使用RT-Thread的IPC機制,儘可能減小全局變量的使用。 經過yaw角度或電機編碼器,實現轉向環 速度 的閉環控制。增長 前進 和 轉向 的位置控制。(前面的都是速度控制),也就是說還要增長3組pid控制。
四、可能會從新設計電機支架,把電池放到電機下面,下降平衡車重心。會增長樹莓派,用opencv實現簡單的目標跟蹤等工做。