下面是從谷歌平衡自行車宣傳視頻截圖,大家可以欣賞一下谷歌的自平衡車:
大夥看完應該會不禁驚嘆,真的太厲害了,終於可以解放雙手了,甚至還會想著什麼時候普及上架,遺憾的是,最後谷歌出了解釋視頻其實全是後期剪輯,大家認為是電影特效就好,僅僅是4月1日愚人節那天的一個玩笑。
其實作者在最初看到這個視頻的時候特別驚訝,總是會考慮自行車的每個動作應該用什麼樣的理論去解釋,也許這就是工科男的思維吧。第2張可以通過調整車身重心使得其平衡,第3、4張也就是模擬人的一個正常騎行過程和自動導航功能,之前有百度無人車駕駛技術也就不奇怪了,原理上都說得通,然而第一張真的就有點誇張了吧。
那到底第一張這種自平衡效果能不能實現呢?
下圖來源於Motor-Bike Robot視頻截圖,該項目是一個國外學生競賽的作品視頻介紹:
我們一般叫該自行車上的那個輪盤叫慣性輪,電機對其進行驅動便會產生對應的力矩,有點類似於兩個齒輪咬合進行轉動的原理。
不過對於運動控制算法按照正常的開發流程首先我們應該對該自行車進行數學建模,使用的一般就是物理力學定理定律等等,所建立的現實模型都是強耦合、非線性的數學模型,這樣就需要進行解耦和線性化從而簡化物理模型來便於分析系統穩定性和控制器設計,然後獲得初步整定參數,最後基本上就是優化參數和調節了,作者以後會再具體跟你們講講建模與控制的,這裡就先不囉嗦。
對於自行車僅僅只有左右方向一個自由度,前後方向是受約束穩定的,所以我們只需要控制左右方向,即可控制平衡,然而自行車左右擺動主要是因為其自身重心沒有穩定在其機械結構的中心位置,所以需要有一個力來抵消重力的分力,並把系統拉回到中心位置,那麼慣性輪通過電機進行驅動就提供了這樣一個力,如下圖簡化模型所示:
由於輪盤通過電機加速轉動,會產生一定的力矩,進而產生與重力分量相反的回覆力,這樣當回復力>重力分量便能夠使得平衡車恢復到平衡狀態。
同時注意其傾角的不同,對應的輪盤轉動的方向不同,最終實現相應控制。
如果大夥僅僅只是DIY,其實這點知識足夠了,如果需要深入研究,就需要用matlab進行仿真設計,獲得其簡化模型,並求出傳遞函數,進行系統矯正,同時實際實現過程中需要對信號進行處理也是值得注意的。
由於其平衡涉及到左右方向的姿態角,我們也叫橫滾角(roll angle),所以需要姿態模塊測量角度和角速度,然後進行數據融合,進而計算出系統與垂直方向的角度差來作為誤差量輸入到所設計的控制器進行控制計算,最後獲得輸出驅動電機控制輪盤轉動提供回復力,維持自行車自平衡。
慣性輪自平衡自行車原理就講到了,簡單的玩起來還是不難的,畢竟簡單的控制器就可以實現,如何需要更高的性能就需對其模型進行深入分析,並對控制器等進行優化了,獲得更快的響應速度和抗幹擾能力,大家感興趣可以自己DIY一個,還是非常有意思的作品,通過整個製作的過程也能提升大家分析解決問題的能力。
好了,這裡是公眾號:「最後一個bug」,一個為大家打造的技術知識提升基地。同時非常感謝各位小夥伴的支持,我們下期精彩見!
推薦好文 點擊藍色字體即可跳轉
☞【重磅】【完全解讀】RTOS中的任務是線程?進程?還是協程?
☞【漲知識】OS下的內存使用原來這麼複雜
☞【OS】原來應用是這樣訪問到底層(系統調用)
☞【重磅】剖析MCU的IAP升級軟體設計(設計思路篇)
☞ 【典藏】別怪"浮點數"太坑(C語言版本)
☞GUI必備知識之「告別」亂碼(淺顯易懂)
☞【典藏】大佬們都在用的結構體進階小技巧
☞聽說因為代碼沒"對齊"程序就奔了?(深度剖析)
☞【典藏】自製小型GUI界面框架(設計思想篇)
一個有態度的技術號!