感謝以下大牛回答及授權轉載!
呂朝陽,Robotics PhD @ Gatech
賀磊,Ph.D. candidate @ hust
王子豪
----------------------------------------------------------------------------------------------
對於普通學生入門來說 一款合適的機器人平臺 + 入門級的控制算法進行試驗。同時深入地學習相應地理論知識。
對於一個有控制基礎,需要現學現用的工作者來說,啃一本諸如《現代控制工程》的書籍,在工作者演練,下面的平臺內容直接略過。
關於平臺的選擇和相應的學習教程,我放在最後,防止大圖分散了重點。
先結合機器人來說一下控制。對於設計任何一個控制系統來說,需要了解自己的輸入、輸出、控制元件,和算法。在一個簡易的機器人系統裏,分別對應的原件是:
輸入 --- 傳感器 (聲吶,紅外,攝像頭,陀螺儀,加速度計,羅盤)
控制元件 --- 電機
控制算法 --- 控制板 (小到單片機,大到微機)
輸出 --- 你的控制目標 (比如機器人的路徑跟蹤)
對這四方面都有了解之後,才能基本對機器人的控制有一個較爲感性的認識。這是入門的基礎。如果你對輸入和輸出做一個測量,比如用電機將某個輪子的轉速從10加速到100,把這個測量勾畫出來,那麼這一個響應曲線。如何將電機準確快速地從10加速到100,這就需要一個簡易的反饋控制器。
上面所說的各個傳感器元件,都有廉價版可以購買學習,但隨之引入的問題就是他們不精確,比如有噪聲。消除這個噪聲,你就需要在你的控制系統中引入更多的控制單元來消除這個噪聲,比如加入濾波單元。
上面說這麼多,只是想表達,理論和算法都是有應用背景的,但同時,學習一些暫時無法應用的算法也並不助於入門,甚至可能走偏門,覺得越複雜越好。所有的工程應用者都會說某某算法非常好,但是經典還是PID。倘若不親手設計一個PID系統,恐怕真的領略不到它的魅力。我大學本科的控制課程包含了自動控制理論和現代控制理論,但是直到我設計一個四旋翼無人機的時候,才真正建立了我自己對機器人控制的理解。
推薦的那本《現代控制工程》是一本非常經典的專業書籍,需要理論知識,再進行詳細的學習。我的建議是先玩,玩到需要時,認真學習這部分理論。
-----------------------------------------------------------------------------------------------------
推薦一些機器人平臺。核心都涉及到運動控制。
基於arduino的機器人平臺是最大衆的平臺了,這是一個開源社區,很多關於機器人的簡易設計和控制算法實現都能在google得到。淘寶arduino機器人,包括arduino控制板和各類簡易傳感器,幾百塊之內錢都能得到。
同時推薦一下Udacity上的Robotics課程,基於arduino也都能實現完成。
國外的有些Robotics課程使用的都是Lego Mindstorm作爲實驗平臺(略土豪版)。紅外,聲吶,陀螺儀這些傳感器Lego都有,同時它的電機也可以實現閉環控制。淘寶依舊可以買到lego
mindstorm_淘寶搜索(海外代購版,我買過)
Imperial College London的Robotics課程就是以Lego爲實驗平臺的,Andrew Davison的課件上所有的理論都可以用Lego實現Andrew Davison: Robotics Course
如果這些都玩膩了,可以試試玩一個機器人飛行控制,比如四旋翼飛機。飛行器是六自由度控制,因此比小車要更加具有挑戰性,也需要更精確的控制系統。下面這是我以前的一個四旋翼DIY,基於arduino MultiWii的。依舊淘寶四旋翼飛行器
diy_淘寶搜索
MultiWii是一個基於arduino的開源飛控平臺,所有c代碼都可得,不多於一兩萬行。如果把這些都研究透了,相比已經是專業水平了。
---------------------------------------------------------------------------------------------------
首先,應當瞭解到:機器人控制(Robot Control)的目的是通過人工引入控制改善原有系統的特性,使新的系統:1)跟蹤性能(Tracking Performance)更好,2)抗擾動性(Diturbance Rejection)更強,3)穩健性(Robustness)更優,e.t.c.
機器人控制大致可以分爲硬件和算法兩個大方向:
- 機器人控制硬件
- 基本控制結構:當年,N. Wiener對神經科學很感興趣,發現其實機器的反饋控制和人的運動控制機理是相似的。控制工程中的:傳感器(各種位置、速度、力傳感器等)、控制器(各種處理器以及控制算法)和驅動器(電機、液壓、氣動、記憶合金等)三部分,分別對應於人的感受器(receptor)(例如:視覺、聽覺、味覺、嗅覺、觸覺等外感受器)、神經系統(中樞和周圍神經系統)和效應器(effector)(肌肉、骨骼),只不過人的結構更加複雜。
- 層次控制體系:瞭解了控制的基本結構,剩下的事情就是設計控制系統。如今,大家設計控制系統的方法還是比較統一的,基本都可以歸結爲5層的層次體系:1)主機 (Host),2)運動控制器(Motion Controller),3)伺服驅動器(Servo Driver),4)電機(Motor),5)機械本體(Mechanism )。
- 主機:主要完成人機交互(操作員控制或者調試機器),高級運算(機器人運動規劃等)。由於需要高等運算功能,這部分算法通常是基於操作系統的,硬件載體用通用PC即可。
- 運動控制器:主要用於改善機器人動力學(Robot Dynamics)。機器人的機械本體自身不具備跟蹤軌跡的能力,需要外加控制來改善。由於需要大量的實時運算,這部分通常是基於實時操作系統,比如QNX等,硬件載體可以用ARM。比如,工業界的工業機器人主要使用運動反饋(Motion Feedback),也即將驅動器配置爲位置控制或者速度控制模式,此時運動控制器的主要用於補償傳動系統非線性性,例如:由於齒輪間隙、微小彈性變形導致的末端偏移。
- 伺服驅動器:主要用於改善電機動力學(Motor Dynamics)。由於電機本身物理特性並不具備良好的位置、速度和力矩跟蹤能力,因此需要依靠控制來改善。這部分需要更高的實時性能,因爲電機控制中需要us級定時,所以可以使用高性能DSP。比如,直流電機的速度正比於反向電動勢,力矩正比於電流,而沒有物理量能夠直接控制位置,此時需要外加控制器。
- 電機:充當執行器,將電信號轉化爲機械運動。
- 機械本體:被控制的終極對象。
- 算法的編寫:鑑於如今幾乎沒人再用Op-Amp搭建模擬計算機的事實,可以說算法就是個編程問題。基本的編程語言能力,比如MATLAB、C、C++是必須的。設計好算法之後,還需面對另外幾個問題:
- 離散化問題(Discretization):連續算法的離散化是必要的,因爲如今計算機都是數字系統。對於線性系統,比如電機控制,方法當然就是從s域(傳遞函數)到z域(Z變換)再到t域(差分方程)的變換,非線性的就得研究微分方程的各種數值方法了。
- 混合控制問題(Hybrid Control):幾乎當前所有的機器人控制系統都不僅有一個控制模式,比如:回初始位置、運動控制模式、人工試教模式等等,每個模式需要特殊的控制算法。單個系統存在多個控制器時被稱爲混合控制系統,混合控制系統常常使用有限狀態機(Finite State Machine,FSM)建模,狀態機的切換需注意一些問題,比如芝諾問題。
- 通信問題(Communication):通常機器人系統都包含幾十個,甚至上百個傳感器以及幾個到十幾個驅動器,通信時常是個頭疼的問題。問題的複雜性源於:通信對象多(併發問題),順序需要協調(時序問題),通信的速率需要兼顧(阻塞問題)。個人傾向於使用基於“事件驅動模型”+“有限狀態機模型”的混合模型來處理此類問題。
- 機器人控制理論:控制方法千奇百怪,這裏僅舉機器人臂的兩個比較經典而常用的方法:混合力位控制和阻抗控制。
- 混合力/位控制(Hybrid Force/Position Control)是Mark Raibert和John Craig於70s末在JPL的工作成果,當時他們是在Stanford臂上做的實驗,研究例如裝配等任務時的力和位置同時控制的情況。
- 阻抗控制(Impedance Control)是 N.Hogan的工作成果。維納晚年,對人控制機器臂很感興趣。後來,他組織了MIT的Robert Mann,Stephen Jacobsen等一夥人開發了基於肌肉電信號控制的假肢臂,叫Boston Elbow。後來,Hogan繼續Mann的工作,他覺得假肢是給人用的,不應當和工業機器人一樣具有高的剛度,而應該具有柔性,所以後來引入了阻抗。
- 其他控制。各類機器人都有其特殊的控制問題,對於公共的機器人數學基礎,個人認爲有兩個派比較厲害:一派是Harvard的Roger Brokett及其學生Frank Chongwoo Park等;另一派是UC Berkeley的Shankar Sastry及其學生Richard Murray,Zexiang Li,JJE Slotine,Stephen Boyd等,兩派人馬基本奠定了當今機器人數學基礎框架(由於學識短淺,可能漏掉了其他重要貢獻者)。
- 建議:自己也在鑽研,共同學習吧。
- 首先,當然是把描述機器人運動的力學搞定。J.J. Craig出版於80s的《Introduction to Robotics: Mechanics and Control 》,或者R. Murray出版於90s的《A Mathematical Introduction to Robotic Manipulation》都行。當然,更加推薦後者,因爲頂級學術論文很多都採用Lie group的描述方法了。
- 再次,必要的反饋控制基礎當然是不能少的,推薦Franklin的《Feedback Control of Dynamic Systems》。
- 最後,如果是廣大的Ph.D.朋友們,硬件就不必玩了,直接上paper吧。讀paper,讀各種牛人的paper。發paper,最好往ICRA和IJRR裏面灌水。P.S.:被paper虐的吐了一口老血:-)
- ----------------------------------- ---------------------------------------------------------
自動控制和機器學習是相似的,它涉及到了很多的算法,線性控制、非線性控制,一個自動化專業的學生一學就是2個學期,效果也不見得好。我的想法是,首先從一種經典的算法入手,(比如PID),圍繞其展開學習,目的就是成功應用PID算法解決一些問題,(比如機器人的運動控制),之後再學習複雜的算法。目標確定了,但在學習之前先問自己3個問題( @劉未鵬的《暗時間》曾提到 ):
- 控制的本質是什麼;
- 控制的原則是什麼;
- 控制這一專業的知識構架是什麼;
以機器人運動控制舉例。
機器人控制有三個元素:控制器(算法),執行器(電機),傳感器;
- 控制的本質就是將規劃系統的指令作爲輸入信息,將傳感器探測得到的狀態信息和導航系統的定位信息作爲反饋,計算得到執行器的控制信號,完成運動控制的閉環。
- 控制的原則就是穩定、準確、快速。
- 知識構架分爲兩部分:理論環節、實踐環節。
- 理論環節即PID控制的原理,如何作用於被控物,這裏包括自動控制原理中結構圖、傳遞函數、數學模型、求解微分方程等知識的學習;
- 實踐部分則包括相關軟硬件的知識,軟件即編程,也涉及到操作系統的相關知識。硬件如工控板的使用等。
圍繞知識構架,無須事無鉅細的學習,但要把PID瞭解透徹併成功應用。在這基礎上再學習複雜的算法就會好一些。
================================update==================================
補充:
知識構架:
- 理論:掌握在相應環境下機器人的動力學模型、運動控制原理和方法、使用的控制策略以及運動控制器的設計。相應展開可以進行深入系統學習。
- 仿真調試:相關工具如matlab或自己編程,將自己的算法、模型進行實現,是對理論知識的反饋,可以看自己的設計是否合理,對理論知識有更直觀的瞭解。
- 實物試驗:涉及軟硬件的部分,體會理論實際差距,進一步完善理論。關於這部分的掌握程度還是要看自己的目標是什麼,圍繞重心進行。如硬件部分,可以購買一些模塊,以最少的經歷實現目標。
另外,光從整體到局部是不夠的,有時不理解複雜系統的一些組成部分,就沒法從整體上去把握。所以在遇到瓶頸時,可以對其展開學習。整體與局部並不矛盾,是可以一起進行的。
想學習一門專業,不該先入爲主地受 XXX 該怎麼樣的觀念制約,應該充分利用身邊的資源工具進行學習。有項目就針對項目,沒項目可以如呂朝陽老師所說購買機器人平臺,再者可以通過仿真對理論進行驗證。思考、總結和交流很重要。