天天看點

機器人行業,10大流行程式設計語言對比◆ ◆ ◆◆ ◆ ◆◆ ◆ ◆

機器人行業,10大流行程式設計語言對比◆ ◆ ◆◆ ◆ ◆◆ ◆ ◆

這是一個許多新入行的機器人專家在他們職業生涯中至少會問一次的問題。不幸的是,這也是一個沒有簡單答案的問題。在本文中,我們将會審視在機器人學中最流行的10種程式設計語言,深入探讨它們各自的優缺點以及使用和棄用它們的原因。

這實際上是個很有道理的問題——畢竟,如果你從不付諸實踐,那為什麼要花大量的時間和精力去學習一種新的程式設計語言呢?如果作為一名機器人學新人,你當然會想學習一種确實對你的職業生涯很有用的程式設計語言。

為什麼“這個取決于。。。”是個毫無用處的回答

不幸的是,如果你去問一屋子的機器人學專家或者在像stack overflow、quora,trossen,reddit、 research gate這樣的論壇上問“什麼是機器人學中最好程式設計語言?”,你永遠不會得到一個直接的答案。

電氣工程師會從工業機器人技術這個角度給出不同的答案。計算機視覺程式員給出的答案會跟認知機器人專家給出的不一樣。而且,每個人都會對什麼是最好的程式設計語言有自己的看法。最終,大多數人都會贊同的答案就是”這個取決于。。。“。對于一個新入行正在試圖決定要先學哪種語言的機器人學者來說,這是一個相當無用的答案。即使這是最現實的回答——因為它的确取決于你想要開發的應用程式和你在使用的系統。

我究竟應該先學哪種程式設計語言?

也許更恰當的問題應該是先從哪種程式設計語言開始學起?你仍然會得到不同的看法,但是許多機器人專家會同意從關鍵程式設計語言開始學。

正如在我們的《機器人必備技能》一文中所讨論的,對于機器人專家來說,最重要的事情是開拓你的”程式設計思維”,而不是精通一種特定的程式設計語言。從很多方面來說,從哪種程式設計語言開始學習真的無關緊要。你學習的每種語言提升了你的程式設計思維,擁有了這種思維,去學習一種新程式設計語言的時候會容易不少。

機器人行業,10大流行程式設計語言對比◆ ◆ ◆◆ ◆ ◆◆ ◆ ◆

機器人學中最流行的10種程式設計語言

世界上有1500多種程式設計語言,都要學的話是太多了。目前,在機器人學中有這10種最流行的程式設計語言——如果你喜歡的不在這裡,請在留言區告訴大家。對于機器人學,每種程式設計語言有不同的優點。我隻是部分地按照重要程度從低到高對它們進行了排序。

10. basic / pascal

basic和pascal是我最早學過的兩種程式設計語言。不過這并不是我把它們列在這裡的原因。對于幾種工業機器人語言,它們是基礎,下面說明一下。basic是為初學者設計的(basic是縮寫,beginners all-purpose symbolic instruction code),它讓初學者可以從一種非常簡單的程式設計語言開始學習。pascal旨在鼓勵好的程式設計習慣,還引入了結構,例如指針,這讓pascal成為從basic到更複雜語言的一塊“敲門磚”。如今,這兩種語言如果要說是好的“日常使用”程式語言,那是有點過時了。不過如果你準備做很多底層編碼或是想要熟悉一下其它工業機器人程式設計語言,學習一下還是有用的。

9.工業機器人程式設計語言

幾乎每一個機器人制造商都開發了他們自己專有的機器人程式設計語言,這成了工業機器人行業中的一個問題。通過學習pascal,你會熟悉它們中的一部分。但是每次開始使用新的機器人時,你還得學習一種新的程式設計語言。

最近幾年, ros行業已經開始提供更标準化的替代語言給程式員。但是如果是一個技術人員,你仍然更可能不得不使用制造商的程式設計語言。

8. lisp

lisp是世界上第二古老的程式設計語言(fortran更古老,但隻早了一年)。相比今天提到很多其它程式設計語言,它的應用并不廣泛。不過在人工智能程式設計領域它還是相當重要的。ros的一部分是用lisp寫的,雖然你不需要掌握這個來使用ros。

7.硬體描述語言(hdls)

硬體描述語言一般是用來描述電氣的程式設計方式。這些語言對于一些機器人專家來說是相當熟悉的,因為他們習慣fpgas(field programmable gate arrays)程式設計。fpgas能讓你開發電子硬體而無需實際生産出一塊矽晶片,對于一些開發來說,這是更快更簡易的選擇。如果你沒有開發電子原型産品,你也許永遠不會用hdls。即便如此,還是有必要了解一下這種程式設計語言,因為它們和其它程式設計語言差别很大。一個重點:hdls所有的操作是并發的,而不是基于處理器的程式設計語言的順序操作。

6. assembly

assembly讓你能在0和1數位上進行程式設計。基本上這是最底層的程式設計語言。就在最近,最底層的電子需要assembly進行程式設計。随着arduino和其它如微控制器的崛起,現在你可以使用c/c++在底層友善地程式設計了。這意味着assembly對于大多數機器人專家來說也許會變得更不必要了。

5. matlab

matlab以及和它相關的開源資源,比如octave,一些機器人工程師特别喜歡,它被用來分析資料和開發控制系統。還有一個非常流行的機器人工具箱——matlab。我知道一些僅僅使用matlab就能開發出整個機器人系統的專家。如果你想要分析資料,産生進階圖像或是實施控制系統,你也許會想學習matlab。

4. c#/.net

c#是微軟提供的專用程式設計語言。我把c#/.net放在這裡,主要是因為微軟機器人開發員工作包(microsoft robotics developer studio),這個包的主要開發語言是c#。如果你準備用這個系統,那麼你很可能必須要用c#。

3. java

作為一位電子工程師,我總是對一些計算機科學學位課程将java作為第一種程式設計語言讓學生們學習感到驚訝。java對程式員隐藏了底層存儲功能,這讓它比起一些語言(如c語言)來說,編寫要容易些,但這也意味着你會更少地了解底層代碼的運作邏輯。如果你有計算機科學背景并轉到機器人學(很多人是這樣的,特别是在研究領域),你也許已經學過java 。像c#和matlab,java是一種解釋性語言,這意味着它不會被編譯成機器代碼。相反,java虛拟機在運作時解釋指令。使用java,理論上讓你可以在不同的機器上運作相同的代碼,這得感謝java虛拟機。在實踐中,這不總是可行的,有時會導緻代碼運作緩慢。但是java在一部分機器人學中非常流行,是以你也許需要它。

2. python

近年來,學習python的人有一個巨大的回潮,特别是在機器人領域。其中一個原因可能是python(和c++)是ros中兩種主要的程式設計語言。與java不同,python的重點是易用性,python不需要很多時間來做正常的事情,如定義和強制轉換變量類型。這些在程式設計裡面本是很平常的事。另外,python還有大量的免費庫,這意味着當你需要實作一些基本的功能時不必“重新發明輪子”。而且因為python允許與c / c++代碼進行簡單的綁定。這就意味着代碼繁重部分的性能可以植入這些語言,進而避免性能損失。随着越來越多的電子産品開始支援 “開箱即用” python(與raspberry pi一道),我們可能會在機器人中看到更多python。

注:the raspberry pi foundation:英國一個小型的慈善組織,成立的宗旨在于推廣科技,而非以銷售技術來營利。

1. c/c++

最後我們到了排名第1的機器人程式設計語言!許多人認為c和c++對新入行的機器人學家是一個很好的起點。為什麼?因為很多硬體庫都使用這兩種語言。這兩種語言允許與低級别的硬體進行互動,允許實時性能,是非常成熟的程式設計語言。現如今,你可能會使用c++比c多,因為前者具有更多的功能。c++基本上是c的一種延伸。首先學一點c會很有用,特别是當你發現一個硬體庫是用c編寫的。c/ c++并不是像python或matlab那樣簡單易用。同樣用c來實作相同的功能會需要大量時間,也将需要更多行代碼。但是,由于機器人非常依賴實時性能,c和c++是最接近我們機器人專家“标準語言”的程式設計語言。

你應該遵循何種順序來學習他們?

盡管我們在這裡列舉了10種語言,但這并不意味着你必須全部都要學。最重要的是找到一種感覺自然且适合機器人硬體的語言。你需要一種可以輕松快速地開發程式的語言。這樣一來,你就可以更專注于開發功能。有鑒于此,我建議你首先學習python。當然,這隻是我個人的觀點。如果另一種語言對你來說更具意義,那你就選擇那種語言。然而,python是一種非常簡單易學的語言。得益于其大量、便捷的庫,python功能非常強大。我聽說過很多有程式設計經驗的程式員在短期學習python之後就能立即将其用于所有程式設計需求中。正如有人所說:我可以在python中快速輸入有用的代碼。當你已經相當熟練地使用python後,我個人推薦你先學習c再學習c++,你将在絕大多數的機器人硬體驅動接口程式設計時需要它。

原文釋出時間為:2016-03-19

本文來自雲栖社群合作夥伴“大資料文摘”,了解相關資訊可以關注“bigdatadigest”微信公衆号