做控制、機器人等演算法工程師是怎樣一種體驗?


做控制工程師就這體驗

(它的電影版其實也挺好玩的:歪小子斯科特對抗全世界 (豆瓣))

為什麼吶?

因為所有的東西,所有的東西,所有的東西都可能出問題。

光柵編碼器因為進了金屬屑而導致有幾個柵格正轉有度數反轉沒讀數
滑動變阻器因為接地線虛焊導致輸出電壓會跟著電機電流漂
電機驅動器輸入有個FIFO而且執行速度略慢導致滯後在50毫秒和1秒之間隨機變化
激光溫度計會告訴你一個燙手的溫度是33度
鏈輪傳動軸線不平行,造成其中一個鏈輪在鋁合金外殼上摩擦產生時變阻力
測量角度的連桿在運動中產生的軸向力作用下會產生巨大摩擦力,導致設備轉動時連桿彈性彎曲而感測器沒讀數。停機以後怎麼檢查怎麼都是好的。
MCU上電以後居然在開始的幾秒鐘裡面SPI口不工作
滑台的庫倫摩擦太大,卻要做力控制
齒輪有大間隙,卻要做力控制
P增益設得太大,系統震蕩了,然後撞壞了力感測器(好吧,這是我早年犯的最蠢的錯誤之一)

更不要說:
A/D介面可能燒了
D/A介面可能燒了
UART可能燒了
MAX232可能燒了
H橋可能燒了
示波器可能燒了
萬用表可能燒了
電機可能燒了
連接線可能斷了
電路板可能脫焊了
導線可能短接了
……

當你是某個全新項目上的控制工程師的時候,你就有種對抗全世界的感覺。

做的久了,就會深刻體會到什麼叫墨菲定律。於是你就會變成這樣:

「這樣可以吧。」
「不不不,這兩個裸露的端子有可能碰到一起。」
「可是他們是分開的啊。」
「不不不,他們還是有可能碰到一起,比如說萬一被撞了一下。」
「撞不到這裡吧。而且這裡也套不了熱縮管了,也沒辦法貼電工膠帶。」
「那我們試試熱熔膠?」

「請給我拿兩個萬用表。」

「拜託在每個地方都做電纜的應力釋放點。」

「拜託盡量不要有裸露的觸點!!!」

有個英語單詞非常完美地描繪了「經過兩周的debug和拆機測量仍然沒有發現問題出在哪裡」的心情:Frustrated ?(;′Д`?)

有個漢語辭彙非常完美地描繪了「經過四周的控制增益調試和設計了一系列不成功的狀態觀察器、參數辨識器和補償演算法後終於發現問題出在一個感測器工作不正常」的心情:生無可戀(╯#-_-)╯╧═╧

——————————————————————————————————————

那為什麼還要干這個呢

因為當整個系統按照你的預期而完美地運行起來的時候嘛,你就會覺得成就感爆表、簡直無所不能(? ̄?? ̄??)??°

簡直想從實驗室跑回家,擁抱路上見到的每一個人

如果你做的是機器人控制……

這就是做控制工程師的樂趣吧&<( ̄︶ ̄)&>

————————————————————————————————

做控制工程師的話,除了會盲調PID之外,要會系統建模和製作模擬系統,在模擬系統里大致確定控制系統和控制參數。要和機械工程師合作,盡量減少影響控制的摩擦和阻力,確保機械結構能夠提供足夠的力/力矩,確定散熱良好。要和電路工程師合作,減少任何可能的電路問題,這包括短路、斷路、浮地、串擾等等。研發試製過程中最麻煩的是大部分電纜和一部分電路板都是臨時製作的,存在很高的故障率,要特別注意應力釋放點,避免電纜、焊點受力。要仔細閱讀所有部件的手冊,確定工作溫度、濕度、密封情況是否適宜,量程、破壞極限是否已經考慮。要了解感測器的延遲是多少、驅動器的延遲是多少,是否需要考慮,還是可以忽略不計。要提前考慮自己需要哪些感測器數據。試製階段寧可感測器冗餘,也不要不足,只要開支允許,感測器寧就上限不就下限。在動手做控制演算法之前可能要花費大量的時間在這些細節問題的敲定上面,但這個開銷是值得的。這會在後面設計控制演算法以及實現控制演算法的時候帶來巨大的便利。

至於控制演算法本身,大部分時候都是從一些課本上典型的控制演算法開始,根據你的需要進行修改。不排除你能從論文中找到非常合適的演算法——如果你所在的領域已經有很多控制論文的話。那樣顯然事半功倍。但也不要局限於論文。很多時候他們的物理條件和任務需求和你的是不一樣的。他們的演算法未必是上佳之選。

最後,能用前饋幹掉的誤差,就不要用反饋控制幹掉。能用辨識和補償幹掉的參數變化,就不要魯棒控制幹掉。能用單級控制,就不要用多級控制。系統的快速性往往是問題的關鍵。


請允許我打個廣告(更新於2017.03.30):

坐標上海,上海微創醫療器械(集團)有限公司,機器人子公司在研產品主要是腹腔鏡手術機器人、骨科手術機器人等 。

團隊擁有10年醫療機器人技術積累,技術領頭人為從事機器人技術研究十年的博士;

公司處於上升期,需要各路小夥伴加入,一起共創事業。

如果你看到了廣告,請發送簡歷至wangjy@microport.com。

軟體工程師 8000-15000

工作職責:

1、負責醫療機器人功能應用的軟體實現及單元測試工作;

2、負責醫療機器人上位機軟體、資料庫等功能的維護與提升;

3、協助完成軟體控制架構維護,數據通訊等功能實現;

4、相關技術成果及資料的查閱,整理和歸納 ;

崗位要求:

1、 碩士研究生或者優秀本科生,計算機相關專業畢業

2、 有1年及以上工作經驗;

2、熟悉C++,C#等高級編程,熟悉SQL資料庫操作;

3、熟悉STM32、瑞薩等嵌入式系統軟體開發

4、有機器人相關經驗的優先錄用;

機器人演算法工程師 8000-15000

工作職責:

1、負責機器人運動控制演算法的研究與應用;

2、負責機器人先進控制理論的研究與應用;

3、負責機器人運動學與動力學建模與辨識;

崗位要求:

1、 碩士研究生及以上學歷,自動化、機械、電子工程、控制、數學等相關專業;

2、 有1年及以上工作經驗;

3、數學優秀,能用較抽象的數學概念來解決問題;

4、熟悉嵌入式系統軟體開發,熟悉C/C++/Matlab,有一定的編程基礎;

5、具備良好的英語能力,無障礙閱讀英文技術文獻;

機器人系統工程師 7000-12000

工作職責:

1、負責機器人運動功能的集成應用;

2、負責機器人系統調試與模擬應用;

3、負責機器人系統維護與更新升級;

4、相關技術成果及資料的查閱,整理和歸納 ;

機器人控制工程師 1人

工作職責:

1、 負責機器人控制演算法的設計與開發任務;

2、 負責機器人控制系統的理論研發與應用;

3、 發現和解決開發過程中出現的技術問題;

4、 相關技術成果及資料的查閱、整理及歸納;

崗位要求:

1、 碩士或博士學歷,自動化、計算機、控制專業畢業;

2、 熟悉C/C++等編程語言;

3、 具有機器人運動控制相關項目經驗優先;

具備良好的英語能力。


還有 電氣工程師 測試工程師 圖像演算法工程師 ~~

——————————————————————————————

看到這個問題,忍不住關注並且像看看其他演算法工程師是怎樣的心情。可等了這麼久,沒有看到想要的答案,我猜題主應該和我一樣想了解這一領域或者職業的體會。由於本人正好是做機器人演算法這一塊工作,終於還是決定寫一寫這兩年來的感受,也權當是兩年的收穫和總結。

機器人控制入門,我屬於比較晚的那種,2014年6月才真正接觸和了解機器人控制演算法相關知識,非常感謝現在的領導和好哥們帶我走入機器人控制世界。所有的機器人控制、演算法方面知識都是在我工作之後學到的,以下內容純屬個人體驗,如有錯誤,請各位前輩指正。

————————————————————————————————————

說話先上圖:

這是我這兩年手頭上買的基本機器人演算法入門相關的書:

1、《機器人學導論》應該算比較基礎的入門:各種變換、正逆運動學、靜力學、動力學、線性/非線性系統、基礎控制、電氣元件等等,算是入門比較全面的;

2、《先進機器人控制》是中科院的研究生教材,裡面主要介紹一些機器人控制方法,基本涵蓋了當前應用以及一些先進的控制方法;

3、《機器人動力學與控制》是北航霍偉老師編寫的,主要介紹動力學相關知識和控制;由於已經絕版,找到了萬能的「某寶」買的;

4、《機器人學-建模、規劃與控制》是目前為止覺得寫得最深刻也是能容易理解並且全面的一本機器人學的書,有能力的同學建議看看英文原版。

當然收藏了很多機器人相關書籍和論文:

這些資料伴隨我進入機器人控制演算法領域以及學習和成長的過程。我自認為是一個更加偏向於應用的攻城獅,只是看完了其中部分入了個門,偶爾也需要經常翻出來繼續複習;特別是遇到問題和困難時,翻看之前的某些章節,突然又有了新的想法和靈感,或者是新的一種理解和思路,那麼問題就很可能就解決了。

——————————————————————————

言歸正傳,對於題主的問題,做機器人演算法工程師是一種怎樣的體驗?我只能說,一入佛門深似海,前方還有許多坑。

學習篇:

機器人控制及演算法工作是一個需要大量閱讀和實踐的過程。有時候你覺得懂了會了,模擬出來並不是那麼回事;有時候模擬對了會了,實際應用也不是那麼回事。

實際的控制系統相比於演算法或者模擬中的還是有比較大的差距:光是摩擦就夠你頭疼的,還有許多非線性項,科氏力、重力等,許多機械參數、慣量需要辨識,速度、加速度怎麼採集或者計算準確、波動小。

因此,會經常性地覺得:「喔艹,這怎麼搞」或者是「喔艹,只能怪自己太笨太蠢」,所以經常會懷疑智商,這時候就需要多多讀書,多看論文多看牛人的著作。

其實,這也是有好處的,就是你會逼著自己去多看書;有人說,工作之後能難有學習機會和時間了。你看,做一個機器人演算法工程師,天天都是學習,多好!

編程篇

拿到模型——分析、建模、模擬——捋順控制思路——設計控制架構——模塊劃分——開始編程

以上是我個人的一個工作思路,也在不斷更新和完善中。

機器人編程是一件比較有意思的事情,一步步把控制語音翻譯成軟體識別的語言,最終實現機器人控制。一般來講,只要你有一門編程語言基礎,無論是matlab、C、C++、Delphi、彙編等等,其他編程語言都是很容易上手,並且學會應用。

目前,我在使用matlab、C和Delphi,偶爾有些C++知識,由於控制器的原因,必須是這種編程環境和編程語言要求(坑),最大感覺是語言之間切換太蛋疼了,幾種語言語法相差太多,不熟練的話很容易弄錯。建議在機器人編程時,最好是用一種語言,不要超過兩種,不然就會有一種欲仙欲死的感覺(牛人請自覺忽略,答主編程能力比較水)。

對了,要學會使用各種工具包,matlab的robotic toolbox等。

調試篇:

通常,演算法工程師是整個機器人調試最後一環,前面的是機械、電氣、軟體。如果你是以你自己的工作任務和節點去推進工作,那你就too young too simple!

你理想中的時間規劃是這樣的:

實際上,最後是這樣的:

納尼!!!!

每一次你都會覺得心好累,整個項目時間不能變,前面的工作延期最後都是會延期到演算法頭上,並且演算法是整個調試裡面最難的好不好!時間準的時候不一定夠用,每次來個延期是什麼鬼啊!

假設你在調試代碼:啪,絲鬆了,機械來人啪啦啪啦修一通;調著調著:接頭又鬆了,電氣來人啪啦啪啦修一通;繼續調試,出了一個演算法bug,或者是變數調用出錯,數據傳遞不對,又要停下來找bug;眼看時間一天天過去,節點就要到了,任務沒有完成,怎麼辦啊!!

此時,內心一定是崩潰的!!沒辦法,找領導,申請延期,制定各種延期計劃,每天彙報進展,增加資源需求。於是乎我就在組內有個綽號——「延期小霸王」,可是寶寶心裡苦/(ㄒoㄒ)/~~

就這樣,別人是朝九晚五,你是朝九晚九、十、十一。。。。。。長泰廣場凌晨兩點的樣子:

在做演算法工程師之前,完全沒有想過有一天會禿頂的可能,因為頭髮是這樣的:

兩年之後,就成這樣了:

有人曾經問過我,這麼辛苦,這麼累,為什麼不辭職還在堅持。

答曰:夢想總是要有的,萬一實現了呢(答主是那種一衝動就把事情做到底的人)

收穫篇:

不過說實話,內心還是喜歡這份工作和這種氛圍的。工作環境像研究生實驗室那種自由,但時間節點更加嚴格。周圍有一群懂行的人,一起討論一起分析,自己成長學習都很快。

感謝在學習過程中指點過的 @許三多 、小白、老大、 @冷哲 、 @韓峰濤 、@,還有許多幫助過的小夥伴。

雖然現在還能保持著一種學習和奮鬥的感覺,但有時候覺得忽然特別累,希望還能多堅持堅持。

另外,一定要注意保護身體,多鍛煉。所有沒有以身體為基礎的工作都是慢性自殺(送給所有辛苦工作的攻城獅)。

(目前答主每周三和小夥伴一起去公司健身房鍛煉~)

前景篇:

國內目前還是很缺專業的機器人控制演算法相關人才,相比國外幾十年行業發展的技術儲備,我們還是落後很多的。從產品到論文,從科研成果到專利著作,都是落後很多年。

2015年被稱為機器人元年,國家已經從戰略上重視這一領域的發展,投入了大量資金以及制定許多政策來刺激機器人行業發展。一個簡單現象就是,如今遍地都是機器人大會,各大展覽必然出現各種機器人,電視、網站、報紙都在給機器人刷屏,各種創業的機器人公司,如雨後春筍出現,各種投資、孵化器都願意給該領域投錢。

因此,無論從行業需求和未來發展,機器人領域都是一個不錯的方向,但感覺現在泡沫有些越來越大,到時必然會出現行業整合。

不過那都是後話了,當前目標就是學好、會用、用好。

番外篇:

剛會了一種運動學求逆的迭代方法,yeah!上圖嘚瑟一下:

附上參考資料:

鏈接:http://pan.baidu.com/s/1c2HQphA 密碼:s8cs

---------------------------------------------------------------------------------------------------------------

更新於20160613

有小夥伴需要一些機器人入門資料,個人挑選了一些,網盤和各位分享:

鏈接:http://pan.baidu.com/s/1geWxc1l 密碼:souo

看完這些資料足以入門,至於想要提高的話,還是需要自己多去實踐和摸索;在這過程中,肯定是會有痛苦地過程,但也是成長和學習的機會,然後你就會主動搜集相關資料論文專利等等,相信會有一套屬於自己學習的方法和工具;如果拿到資料而束之高閣,再多的書也枉然,共勉!

更於20160615

————————————————————————————————————


不要吃驚,文章真的消失了!!!


用C++ Python Fortran編程...
懂運動學 動力學 還有各種規劃演算法,優化演算法...
做機器學習,深度神經網路,機器視覺,幾何重建,感測器融合,定位和建圖...
調用 Caffe, ROS, OpenCV, PCL, G2O, DBoW2, libpointmatcher, octomap, ceres …
追頂會,頂刊文章...

但是:
我的系統經常不work!
大爺TM會抽風啊!
機械加工精度感人吶!
嵌入式設備會燒啊!
一個簡單的運動控制隨時可能會打臉吶!
誰TM又把我剛標定好的機器人碰歪啦!
識別結果又有false positive啊!
跑了3天的訓練結果不收斂吶!
Loop closure個屁啊!
...

當然,還是有可以work的時候~
這種時候的感覺就是:

你們這些愚蠢的人類都得死!


理論上的演算法和實際中的應用是兩回事


數學真的很重要


做夢覺得是在改變世界


控制性能不是演算法的問題,而是錢的問題


今天的pid該蒙哪些數呢???


表示本人本科學機械後來轉學數學,直接跳到演算法,然後想在人工智慧深度學習上賭一把。


剛讀完博,馬上入職做演算法軟體開發。
讀博期間就是看書,看paper,改進演算法,建模模擬,做實驗。。。
ps 高贊答案里推薦了一堆一樣內容,質量參差不齊的書是怎麼回事。。。
機器人基礎看李澤湘教授的那本A Mathematical Introduction to. Robotic Manipulation就完了。handbook of robotics也可以留在手上備查,但是老版的內容基本很老化了。機器人是個日新月異的領域,主要還是要看論文,icra iros humanoids ijrr tro再加上你所做領域的一些會議雜誌。當然了,做工業應用的除外,都是穩定為主。
pps 現在很多機器人的計算能力可不低哦。我頭像那位,身上背了三台i7cpu的工業計算機,還可以插更多,但是電池吃不消。


前兩周有個方案討論會,搞機械的一臉深情的看著我,「這次選的減速箱,渦輪蝸桿精度差點,但最終精度,你們做控制的要保證。」

WTF!

「為什麼不選精度高的?比如滾珠絲桿,」

「哦,滾珠絲桿貴,你們便宜」

F…K

本周剛發生的,

「再往前轉幾LU,快對準了」

「我已經轉幾圈了」

「再轉點,2萬多減速比。再轉點,國產的差,有死點」

」已經幾萬圈了,它該不會有死帶吧?「

」把負載拆下來,再試試「

」電機編碼器顯示電機轉的很好,電流也很小。拆電機吧「

」電機不好拆,拆負載「

」還是不動,再把負載裝上去試試「

「電流很小,還是拆電機吧」

「電機不好拆。我看過,都是電機帶不動。把負載裝上,可能就好了」

「還是不動,沒辦法。拆電機」

「我的軸呢?」

「在這裡,你看師傅手藝多好啊…」

前天,搞機的告訴我,原因找到了

「安裝面有肉眼可見的偏差,怪不得他們說盤不動。我跟你說…」

「等會,師傅怎麼裝上去的?」

「師傅力氣大。我跟你說,這一轉…」

F…K


機器人演算法理論上推推公式、模擬是沒什麼作用的,對控制器和嵌入式硬體的掌握能力才是王道。學校這麼多教授寫了這麼多垃圾論文,有幾個公式演算法在工程上有所應用呢。


搞久了開始懷疑科學,醒悟還是玄學靠譜


這種問題,只有同行才會看。。。。


/(ㄒoㄒ)/~~ 哭暈在廁所,立馬爬起來去整那歪歪斜斜的舵機機械臂


學了四年的控制理論博士,到了工作時發現演算法啥的都是paper,工作上懂硬體跟電路才是王道


作為一個已經畢業工作三年的控制工程師,我來說一說我的體會。
每天都會遇到一些很詭異的問題,舊的bug解決了,新的bug就會誕生。可以用墨菲定律來解釋,事情永遠沒有想像中的那麼簡單,所花費的時間比計劃的要長,往往會出現一些意想不到的情況發生。所以說,有些坑是繞不開的,你必須把這個坑給添平了,你才能繼續往前走,前面會有新的坑在等著你。當然,伴隨這個過程,你的能力也會成長,產品也會越來越完善。


好膩害


很靠譜,真心推薦啊


不會對智能機器人抱有很樂觀的看法。


硬體算力太有限了


推薦閱讀:

如何評價高博的《視覺SLAM十四講》?
國產工業機器人目前發展到了什麼水平?
2015 DARPA 決賽中韓國隊的 DRC Hubo 是如何最終拔得頭籌的?
有哪些著名的機器人公司和機器人實驗室?
國內有技術上可以與 Boston Dynamics 相匹敵的實驗室嗎?

TAG:機器人 | 自動化 | 自動控制 | 無人機Drone | 航空航天 |