編輯導語:
作者:代潤澤、陳大鑫、劉冰一;微信公眾號:AI科技評論
什麼是自行車?B站一位UP主可能會給你一個與眾不同的回答,即不用人力就能自己行駛的車。如今,越來越多人在媒體平台上發布他們的奇思妙想,展示了無限創意。文中的AI演算法工程師稚暉君便是如此,讓我們一起來看一下。
不知道大家從小到大有沒有思考🤔過這樣一個問題:什麼叫自行車?
——啊?這還用問嗎?
——對啊,這還用問嗎?
自行車那當然是不靠人騎著它自己就能行駛的車啊。
考慮到2021年是自動駕駛爆發元年,造手機的、送外賣的、賣襪子的等等各種大廠紛紛入局造車。
這時一位B站UP主表示道,何不做一輛能自動駕駛的自行車?
這不是在開玩笑!
這是野生鋼鐵俠、華為天才少年、AI演算法工程師稚暉君昨天剛剛「發布」的一個新項目。
稚暉解釋道,他前段時間不小心騎自行車摔傷了,休養后直言不能就這麼算了!表示,正在著手設計自動駕駛自行車,這是說到做到了!
話不多說,直接來看看他是怎麼完成的吧。
讓自行車變成自動駕駛,首先需要的是硬體改造,加入自動控制系統。
其次,為了將駕駛員的工具人存在性去掉,需要給車子搭載一整套感測器組成的感知網路,以及一個算力足夠強大的計算晶元作為大腦。
最後就是在前面的硬體基礎上開發實現一套感知和控制演算法,俗稱注入靈魂。
一、第一步,讓車子跑
對於結構上的改造——先在CAD上面建模,得到一輛虛擬自行車,也可以稱之為自行車的數字孿生。
有了車體模型,所有的改造工作都可以在計算機上完成,只需加上「一點點」的細節,那麼最終的改造方案就出來了:
先給車子安裝兩個巨大的無刷電機,以及一個控制龍頭的舵機。
感測器方面搭載了一個RGBD的深度相機,加速度計和陀螺儀,以及一個激光雷達。
電池使用的是6S的航模動力鋰電池,續航大約有2-3小時。
主控計算模塊被安置在了座椅的後方。
而驅動結構方面,關於控制龍頭的旋轉舵機,前後方向的平衡靠兩個輪子的支撐和地面摩擦力,至於左右的平衡,當在騎行狀態下,可以靠著左右調節龍頭來獲得轉向加速度以此來抵消重力的影響。
那麼靜止狀態下如何保持左右平衡呢?
要靠角動量守恆,上過小學二年級的都知道角動量守恆定律是自然界中最普遍的守恆定律之一。
當系統一個動力角動量發生變化的時候,就會將力矩傳遞給其他物體。所以這輛自行車中間的無刷電機,其實就是驅動一個金屬的動量輪。
實際上這也是在太空中衛星🛰️在沒有摩擦力的情況下調整自身姿態的一樣的原理。
而後面的無刷電機就是靠摩擦力驅動後輪,讓車子整體前後運動。
關於零件的加工,其中一部分零件可以用3D列印來製作,不過考慮到功率問題,3D列印塑料的硬度和剛性都不太適合作為核心的結構件,因此用於固定電機的零件,稚暉君還是選擇用金屬來加工。
所有的零件配齊組裝完成後,就需要安裝電力系統了 ,也就是主控模塊和 AI計算單元。
二、第二部分,讓車子有機器大腦
和人類一樣,將計算單元分為小腦和大腦,那麼小腦部分就分為低算力、低時延、運行實時系統,大腦部分就分為高算力、高時延、運行非實時操作系統,用於感知、思考和決策。
在這個系統中使用的是在HoloCubic裡面的MCU,ESP32作為小腦。
大腦則應用了昇騰邊緣計算機晶元昇騰310 AI處理器。
然後設計一個載板,將這兩個計算單元整合到一起,板子的結構為四層設計,比較簡單:
PCB打樣之後再手工焊接一下,這也是傳統藝能環節:
之後通過匯流排把大腦和小腦相連,在軟體上實現一套RPC框架,讓它們可以方便地通信。其中小腦的框架基於FreeRtos,主要是實現感測器的數據處理,以及電機的控制演算法。簡單分為三個任務:閉環控制線程、電機通信線程、以及屏幕刷新線程。
另外用下面這個小屏幕來實時顯示一些參數。
而大腦的軟體框架就要複雜很多。除了基於昇騰的整個AI棧之外,還在系統中使用了一個做機器人常用的框架—— ROS,本質上是一個高性能的通信中間件。
到現在電路方面已經有了腦子,還缺一個很重要的模塊,那就是心臟,也就是此前設計的Ctrl-FOC驅動器。
作為Ctrl的二代作品,它的表現還是非常的猛的,在很小的體積之下, 實現了兩路共100安 的無刷電機FOC控制,同時還順便 驅動了前面60Kg的舵機,以及一個散熱風扇。
此時,把結構零件和電路全部 整合起來,車輛的完全體就誕生啦!
到了這裡,稚暉君表示以上組裝還算比較常規,接下來的注入靈魂才是關鍵。
這就要涉及到機器人了,機器人是一個複雜的系統,設計一台機器人的時候,科學的方法是將機器人進行理論上的分析,也就是運用運動學和動力學的建模,通過數學模型知道哪些事情是相對 容易的哪些是複雜的。
例如,這輛車子的控制代碼中,有超過50個重要參數:控制周期、反饋矩陣、PID增益、濾波器截止頻率等。這些魔法數字要全部得到合理的設置,才能使系統進入穩定且快速收斂的狀態。(這裡可以類比深度學習的調參大法)
而一些物理參數的設置,如電機功率應該選多大的?飛輪質量應該選多少?
重心的分佈應該怎樣設置才比較合理?也都需要準確的數學模型進行指導才行。
在得到模型之後, 為了進一步驗證理論的準確性,一般要在計算機中進行模擬,這裡稚暉君使用的是遊戲引擎Unity——先在遊戲引擎中構建一個虛擬的物理環境,賦給小車真實的的質量和重力, 接著將控制演算法的計算結果可視化呈現出來。
這一步驗證完成之後 ,還有一個sim2real的過程,也就是把模擬結果遷移到現實環境中。其實這是一個很複雜的過程,因為現實中有更多的不確定性因素,很多情況下機器人往往在模擬中重拳出擊,而在現實中「唯唯諾諾」秒變智障🐶,有的甚至在模擬中也一言難盡。
同理,這輛車在調試的過程中也是非常艱辛的。
在這套系統中在姿態控制中,稚暉君使用的LQR控制器,方向控制使用了經典的PID演算法,感測器則是對加速度計和陀螺儀數據使用了二階的巴特沃斯濾波器之後再通過卡爾曼濾波器進行數據融合,最終得到車身姿態。
終於,在經過稚暉君漫長的參數整定之後,控制演算法終於收斂到了完美的效果!
你現在已經是一輛「成熟」的自行車了,是時候拉出去遛一遛了證明自己了。
哇!可以看出它做到了靜態保持靜止:
這主要得益於合理的演算法和設計,且當車子受到一定的衝擊和突然增加負載的情況下,也能穩定地保持平衡。
甚至能在高危場景下保持平衡!就差在鐵柵欄上跳舞💃了。
再結合下後輪電機的驅動能力,讓它「走兩步」也毫無壓力,而且剎車功能也是很正常的,有網友表示至少要比X撕辣強。
所以說如果大家某天晚上看到一輛會自己行駛的自行車也不要害怕,它只是「成精了」而已。
到現在,能動的基本目標已經達成,可是這就結束了嗎?
當然沒有,接下來就是最令人期待的自動駕駛環節了!
這就要通過引入AI 來實現了,當然了話先說到前面,這裡實現的自動駕駛也只是一定程度上的。
另外由於這個車子搭載了深度相機,在電腦上就可以看到車子WIFI實時的RGB圖傳畫面,再結合一些AI演算法即可實現一些有趣的功能,比如說自動避障、運動識別跟隨。
另外,自動駕駛怎麼能少的了路徑規劃呢,此時車子搭載的激光雷達就排上了用場。激光雷達通過測量激光發射到反射所需時間,再乘以光速就可以獲得目標的距離位置。
由此360°成像的結果可獲取攝像頭更加可靠的深度信息,將這些數據用於SLAM圖與路徑規劃,最後就可以實現讓自行車自主探索了。
不過稚暉君表示這只是「非常基礎」的自動駕駛設計,還有很多地方需要改進。比如龍頭的傳統結構設計不太合理,如果換成諧波減速伺服電機直驅,那麼行駛的穩定性將大幅度提升。
另外受限於整車功率,這套系統目前還無法載人,就只能真.無人駕駛了,但是如果換成電動車可能就不一樣了(不過,這可能就是另外一個故事了)。
最後,稚暉君談起最初設計這樣一倆自行車的想法最早是因為看到清華大學曾研製了一款自動駕駛的自行車,還登上了Nature封面:
所以他就想著自己也復現一個類似的項目,並給車子起名為XUAN,這是因為軒是我國古代對車子的稱呼。
Tips:本次項目的結構設計是全部開源的,有興趣想要復現的同學可以嘗試一下。
最後,說到稚暉君,大家估計都很熟悉了。目前稚暉君已經加入了「華為天才少年計劃」。不管是做嵌入式的還是計算機的,稚暉君都是諸多電子愛好者欽佩的大佬。他本碩就讀於電子科技大學,之後進入OPPO演算法崗工作,目前已經是華為AI架構師。
其實稚暉君並非第一次這般「硬核」,AI 科技評論曾報道過他自製B站百大Up獎盃,這位斜杠青年有如此充沛的精力輸出高質量工作,讓大家有種「平時上班的工作量還是太小了」的錯覺。
作者:代潤澤、陳大鑫、劉冰一;公眾號:AI科技評論
原文鏈接:https://mp.weixin.qq.com/s/W1-rFuJ5oLppHsLOMJxTxw
本文經微信公眾號@AI科技評論 授權發佈於人人都是產品經理。未經許可,禁止轉載。
題圖來自 Unsplash,基於CC0協議