運動底盤是移動機器人的重要組成部分,不像激光雷達、IMU、麥克風、音響、攝像頭這些通用部件能夠直接買到,很難買到通用的底盤。一方面是由於底盤的尺寸結構和參數是要與具體機器人匹配的;另外一方面是由於底盤包含軟硬件整套解決方案,是不少機器人公司的核心技術,通常不會隨便公開。出於強烈的求知慾與學習熱情,我想本身DIY一整套兩輪差分底盤,而且將完整的設計過程公開出去供你們學習。說幹就幹,本章節主要內容:html
1.stm32主控硬件設計python
2.stm32主控軟件設計nginx
3.底盤通訊協議django
4.底盤ROS驅動開發ubuntu
5.底盤PID控制參數整定centos
6.底盤裏程計標網絡
完整的stm32主控硬件包括:帶霍爾編碼器的直流減速電機、電機驅動、stm32單片機開發板等配件。架構
(圖1)帶霍爾編碼器的直流減速電機ide
要製做一臺機器人底盤,須要一套完整的電機部件,就如圖1中看到的同樣,須要有輪胎、聯軸器、減速箱、電機和編碼器,具體選型能夠參考這幾個方面的因素:佈局
輪胎:直徑越大,小車的越障能力越好,但會下降小車爬坡的馬力;
聯軸器:選擇跟輪胎與電機輸出軸尺寸相匹配的型號;
減速箱:減速比決定電機輸出軸的扭矩,減速比越大,輸出軸扭矩越大,但輸出軸轉速越慢;
電機:通常是12V的電機,直流有刷簡單易控制;
編碼器:通常爲增量式正交編碼器,編碼線數根據實際須要精度進行選擇。
(圖2)電機接線端口
如圖2,能夠清楚的看到電機的接線端口,其實電路板上也是有絲印標註的。接線分爲兩類,一類是電機控制(電機線+、電機線-),另外一類是編碼器(編碼器5V、編碼器A相、編碼器B相、編碼器GND)。
(圖3)TB6612FNG電機驅動
瞭解了電機的構造知識後,就來介紹一下如何將電機驅動起來。如圖3所示,TB6612FNG是很流行的一款電機驅動芯片,相比於傳統的L298N效率上提高不少,並且體積大幅減少。TB6612FNG是雙驅動,也就是能夠驅動兩個電機;TB6612FNG每通道輸出最高1.2 A的連續驅動電流,啓動峯值電流達2A/3.2 A(連續脈衝/單脈衝);4種電機控制模式:正轉/反轉/制動/中止;PWM支持頻率高達100 kHz。
(圖4)TB6612FNG引腳定義
TB6612FNG的引腳定義,如圖4所示,引腳分爲電源腳、控制輸入腳、控制輸出腳。
VM:爲電機驅動電壓,根據實際電機額定電壓選擇,推薦使用12V供電;
VCC:邏輯電源供電,推薦使用5V供電;
STBY:待機/工做狀態切換,低電平待機,高電平工做;
PWMA:A端口電機PWM調速信號輸入;
AIN1和AIN2:A電機轉向控制信號輸入;
PWMB:B端口電機PWM調速信號輸入;
BIN1和BIN2:B電機轉向控制信號輸入;
AO1和AO2:A端口電機驅動信號輸出;
BO1和BO2:B端口電機驅動信號輸出。
(圖5)TB6612FNG控制信號真值表
最後,咱們來看一下控制信號的邏輯真值表,如圖5,輸入由單片機IO口給定,再結合PWM信號,即可以實現對電機的正/反轉和調速控制了。因爲兩路電機控制是如出一轍的,因此另外一路控制信號的邏輯真值表就不重複贅述了。
(圖6)霍爾正交編碼器原理
若是兩個信號相位相差90度,則這兩個信號稱爲正交。因爲兩個信號相位相差90度,所以能夠根據兩個信號哪一個先哪一個後來判斷方向。利用單片機的IO口對編碼器的A、B相進行捕獲,很容易獲得電機的轉速和轉向。霍爾正交編碼器原理,如圖6。
stm32單片機經常使用的型號是stm32f103,根據具體需求的Flash容量、RAM容量、IO口數量進行選擇,下面是經常使用的一些型號參數對比,如圖7。
(圖7)stm32f103系列單片機參數對比
考慮到stm32主控只是用於兩個電機的控制,資源開銷不算大,須要用到的IO口也不是不少,定時器資源也很少,出於性價比考慮推薦stm32f103c8t6這個型號。
(圖8)stm32f103f103c8t6最小系統板
如圖8所示,stm32f103c8t6最小系統板比較簡潔,控制兩個電動機,只須要用兩個IO口輸出2路PWM分別給兩個電機調速,用4個IO口分別控制兩個電機的方向,另外4個IO口分別接兩個電機的正交編碼器輸入,UART1與UART2跟上位機鏈接分別用於程序debug與上層指令控制。
第一個版本的硬件電路是用飛線鏈接的各個模塊,電路穩定性不好,並且外觀極其醜陋。痛定思痛,決心老老實實設計電路板,把各模塊集成到一個板子上,通過兩次改板打樣,終於成功了。如圖9,板子簡潔美觀,並且接插端子佈局合理,符合我一貫嚴苛的標準。
(圖9)stm32主控電路板
好了,有了這個電路板就好辦多了。針對這個電路板,講講個人設計思路吧。首先須要設計一個電源系統,用於單片機供電、電機供電、外部設備供電,同時還要考慮電源反接、過壓、短路等保護;而後須要設計一個stm32單片機最小系統電路;最後圍繞stm32最小系統,須要設計電機驅動、UART轉USB、編碼器信號捕獲這些外圍電路,同時還要考慮電機堵轉保護、電機對系統電源干擾等問題。逐一採坑以後,差很少就完成設計了。stm32主控硬件總體框圖,如圖10。
(圖10)stm32主控硬件總體框圖
------SLAM+語音機器人DIY系列【目錄】快速導覽------
第1章:Linux基礎
第2章:ROS入門
第3章:感知與大腦
第4章:差分底盤設計
第5章:樹莓派3開發環境搭建
第6章:SLAM建圖與自主避障導航
2.google-cartographer機器人SLAM建圖
第7章:語音交互與天然語言處理
第8章:高階拓展
2.centos7下部署Django(nginx+uwsgi+django+python3)
----------------文章將持續更新,敬請關注-----------------
若是你們對博文的相關類容感興趣,或有什麼技術疑問,歡迎加入下面的《SLAM+語音機器人DIY》QQ技術交流羣,一塊兒討論學習^_^
關於咱們:
視頻教程: