|
! D3 C' _; R& W7 ?2 x
機器人編程語言最早于20世紀70年代初期問世,到目前為止已有多種編程語言出現,在眾多機器人編程語言中究竟哪種編程語言最好呢?這個問題困擾了很多新手學者,但遺憾的是,這是一個沒有準確答案的問題,你問不同的人會得到不同的答案,對于機器人學者來說建立“編程思維“才是最關鍵的,而不是用一種特定語言去衡量,在很多方面,學習哪種機器人編程語言并不是最重要的,重要的是通過編程思維來不斷提升自己的技能。; w, |% N1 B. s8 r& U5 V% E% Z- E$ R
回到本文主題,我們將為大家介紹機器人研發中比較主流的5種機器人編程語言,并對他們的優缺點進行分析。
{8 E6 i {2 D; i* w. e' V8 \1 J' n T* c i& ]! s
一、Python——一種動態的、面向對象的腳本語言
7 Q6 l. {! \- q! s y5 V* C在機器人研究領域,Python 占據了重要地位。其中一個原因很可能是 Python(和C ++)是ROS中的兩種主要編程語言。像JAVA一樣,它是一種解釋性語言。但也不同于JAVA,Python 語言主要集中在可用性上。# e6 Y9 E. u$ e: E) V. @ q
$ X/ V# d _. C
Python優點:% X1 l( h" E/ G* F1 j% b
1.更易入門
3 u5 K' }/ _8 p2 [/ C6 L3 ?0 KPython程序簡單易懂,初學者學Python更易入門且深入下去可編寫非常復雜的程序,且開發效率高,有非常強大的第三方庫。
" Z& \) n6 c, G; z" x7 L2.高級語言' M0 `7 o1 F7 ^! P$ P
當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節
& D; g! C9 d" H% |' [3.可移植性: ?7 D3 f4 g& y) K. s8 C1 Q
由于它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工 作在不同平臺上)。如果你小心地避免使用依賴于系統的特性,那么所有Python程序無需修改就幾乎可以在市場上所有的系統平臺上運行/ {# ?$ e; r2 S
4.可擴展性5 f% d/ ?2 r5 ~0 Y9 s
如果需要一段關鍵代碼運行得更快或者希望某些算法不公開,就可將部分程序用C或C++編寫,然后在你的Python程序中使用它們。$ L! q0 e2 @# m6 Q- i8 i
7 b" G! e" |! i4 D, L
Python缺點:5 L' _ M* W* g" u. h) |5 }! I
1.運行速度慢4 ^% _4 N+ K% y: U% v1 l0 N4 l( O
Python的運行速度相比C語言確實慢很多,跟JAVA相比也要慢一些。3 B/ i. Y% k6 b2 @7 |
2.線程不能利用多CPU問題5 A) n2 U: R' L2 f1 D& d: z* g
這是Python被人詬病最多的一個缺點。
Z+ K$ H! p3 p5 i& ^
: @; O8 o% y" d/ O- c* T! K二、C /C ++——大多數中國程序員的第一個語言/ c( v' ]8 c" h1 L$ Q
C++語言是從C語言發展過來的,是一門面向對象的語言,它繼承了C語言的優勢。很多人都認為 C 和 C ++ 對機器人科學家來說是一個很好的開端。因為大部分的硬件庫使用這些語言,允許實時性能,是非常成熟的編程語言。
: x% f3 V2 y" H- hC /C ++優點:
! A# l8 u' o* U; F0 i; O3 x& O* v1.跨平臺性好 g5 K5 J) @3 n3 K! M
C/C++可以潛入任何現代處理器中,幾乎所有的操作系統都支持,跨平臺性非常好。
* O" W7 L0 R" {' G2.運行效率高6 p# u$ w6 j4 F( T0 V3 g" b4 [; q
C語言體型小巧,簡潔高效并且接近匯編語言,C++功能在C的基礎上增加面向對象的特點,代碼可讀性好,運行效率高。
6 R) Z; }( G7 O, D. [3.語言簡潔,編寫風格自由' [' @0 x2 G% g1 L8 u E" J
兼有高級語言與匯編語言的優點,語言簡潔、緊湊,使用方便、靈活豐富的運算符和數據類型,能訪問內存地址和位操作等硬件底層操作,生成的目標代碼質量高。
2 U) Y1 n; H: R3 ]7 C9 ?8 Z/ u* H1 s) h+ t! n
C/C++缺點:! M1 ~0 F& A5 B* `9 B
1.無垃圾回收機制 J, ^+ p; h, Y% K- Y/ u1 s
相對于JAVA來說,沒有垃圾回收機制,容易引發內存泄露
: n, _0 ^( O$ w, a2.學習較困難 I* L, p* D0 P% X% Z j
從應用的角度,C語言比其他高級語言較難掌握。也就是說,對用C語言的人,要求對程序設計更熟練一些。& U! g9 e) i5 L+ k+ j) A1 a, g
3.數據安全性上有缺陷
; q9 A, ]' Y2 KC語言的缺點主要表現在數據的封裝性上,這一點使得C在數據的安全性上有很大缺陷,這也是C和C++的一大區別?!?br />
3 Y% G$ [" |1 z4 A2 J- w8 k N' e* }% Y6 k2 r
三、JAVA——世界上使用范圍最廣的語言
/ }+ R2 G. P v1 G( L0 }7 H) K" I7 T& EJAVA語法規則和C++類似,從某種意義上來說,JAVA是由C和C++語言轉變而來的。像C#和MATLAB一樣,JAVA是一種解釋性語言,這意味著它不會被合并到機器語言代碼中。相反,JAVA虛擬機在運行時解釋指令。理論上來說,基于JAVA虛擬機,使用JAVA可以在不同機器上使用類似的代碼。但實際上,這并不普遍使用,有時會導致代碼運行緩慢,但是JAVA編程語言在機器人研究中非常流行。
' N& C, ?5 N/ W" vJAVA優點:
5 k! g! c3 {$ p4 O2 e3 o1.更易學習+ Y) q6 M e1 A* v. R6 G
由于JAVA語言與C語言和C++語言比較接近,使大多數程序員學起來更簡單。
6 R* V2 F" [; O4 ?2 g2.支持動態綁定
! r$ K9 C1 i" x- i3 hJAVA語言全面支持動態綁定,而C++語言只對虛函數使用動態綁定。: b4 G! [- \4 d; y4 ]
3.支持Internet應用開發0 O* x. g" P* Z6 {
JAVA語言支持Internet應用的開發,在基本的JAVA應用編程接口中有一個網絡應用編程接口(JAVA.net),它提供了用于網絡應用編程的類庫,包括URL、URLConnection、Socket、ServerSocket等。& L1 G D0 Z# J u
4.更安全
& b1 n! y- J$ h( W, [JAVA語言提供了一個安全機制以防止惡意代碼的共計,相對來說更安全。- R$ s+ F( A. O W! ~
5.具有可移植性
3 e9 w3 U/ w1 d8 O! W& mJAVA語言是可移植的,這種可移植性來源于體系結構中立性,另外,JAVA還嚴格規定了各個基本數據類型的長度。/ s* W+ m5 W1 h/ ~1 @4 G
/ c% F3 s8 T. ^: |' J# ^JAVA缺點:8 F* s5 a& m. t
1.運行需要安裝JAVA虛擬機4 B* n; R7 r c
JAVA語言最大的缺點就是運行JAVA程序需要裝JAVA虛擬機,就這一條嚴重的影響了JAVA應用程序的使用,基本看不到JAVA的應用程序。/ {! p `1 V/ Y0 n8 { i
2.運行成本較高
( q5 g" d, e* e0 C另外JAVA程序的運行成本比較高,過去機器配置不夠高的時候,JAVA顯得很慢現在隨著JAVA本身的版本升級和電腦性能的強化這條基本已經不是問題了。8 j' c U6 A1 {3 v/ f
+ u+ y/ h3 C6 x四、C#/.NET——微軟提供的一種限制性編程語言( e: v; P L9 g5 K" `4 f
C#/ .NET很大程度上是為微軟機器人工程師工作室提供的,微軟機器人工程師工作室將其作為基本語言。如果使用這個框架,就必須學習 C#。
) p. b7 x7 w& w/ }" {C#/.NET優點:$ o8 k/ o- K+ e
1.強大的.Net Framework托管代碼集合類 U0 P7 I) f% i
,封裝了大多數windows上使用的技術組件類, 文件系統,UI界面,數據源訪問,網絡訪問,COM互操作(圖形圖像多媒體,WPF圖形系統),沒有的可以通過.net的平臺調用win API函數來得到。. q0 @) C2 F! j8 ^- c
2.較簡單的語言特性
5 S1 M& r. m. O9 s6 R/ S9 s自動內存管理, 單繼承,支持事件、委托、屬性、Linq等一系列讓業務開發更簡單的功能。! W2 G2 Z% A; m! e
3.Web應用程序開發速度快" J( f2 c7 D0 P; Z M
Web應用程序開發速度快(.net框架的支持,控件可以拖拉(UI方便編輯和定位),添加事件(跳轉到控制邏輯層),ADO.net數據源訪問, xml 網絡類庫, windows服務)。
1 T/ g% w+ N7 `( z: P2 i4.和語言平臺無關的編譯機制及較快的運行速度+ X: i! |" {3 V$ z& k9 u4 R0 R
和語言平臺無關的編譯機制,及較快的運行速度(ms不推薦, mono的 Xamarin, Unity還不錯):編譯成IL中間語言,CLR公共語言運行庫托管代碼,CLR根據運行時程序需要將IL中間語言用JIT即時編譯方式編譯為內部機器代碼,對編譯好的機器代碼緩存起來,提高了程序速度。
* V' F! @' |8 I S! b( \6 i$ b. i5.代碼安全性) i% d! ]% |( g$ ?, T9 T' U
window是基于角色的安全機制,.net提供了基于代碼的安全機制,由于中間語言提供了類型安全性,CLR在運行前檢查代碼,確定是否有需要的安全權限,CLR沒有權限則不能執行該代碼。; m" Z8 l5 h6 t$ P! @
/ E; o" J! j7 e/ E- \2 [' R
C#/.NET缺點:
+ v& z. O1 U4 Z9 W; H, o u1.底層和高性能不合適
) z X( P3 ]( N' D8 X: O4 u$ ~不合適做時間性能很高(高速算法)或空間性能很靈活(內存立即釋放)的程序,因為中間語言和編譯過程,比C/C++Native類型的語言會慢一些,內存自動回收難以立即釋放不需要的內存,不采用內聯函數和析構函數(不建議)。9 I% z+ U- k. x7 ?
2.Windows平臺以外支持有限
4 _9 L& M+ Q7 N f! ^: J1 A1 H, Emono不夠成熟好用,window以外Java,Python等是很強大和同樣優秀的。, k. N# E8 a5 u/ s9 c
3 [/ U, G. y: B# F, _" n& K五、MATLAB——一種面向數值計算的高級程序設計語言
7 b& J2 O' b; K- x, dMATLAB和它的開源親戚(例如Octave)在一些機器人專家中非常有名,是他們負責調查數據和創建控制系統常用的語言。還有一個非常有名的MATLAB機器人工具箱。使用MATLAB單獨創建整個機器人系統的人員。如需要分解數據,創建高級圖表或執行控制系統,那就很可能需要學習MATLAB。- b0 B3 Y$ i8 _
MATLAB優點:
8 M$ r7 u/ [9 }7 i+ O: U2 M' Z* k5 @1.編程效率高* W! S1 x8 O+ |: C
MATLAB語言為演算紙式科學算法語言,由于它編程簡單,所以編程效率高,易學易懂。8 P4 F- b: e0 h% p4 t
2.高效方便的矩陣和數組運算
; m$ F* `: Y/ o: {( e; T8 VMATLAB語言像BASIC、C語言一樣規定了矩陣的算術運算符、關系運算符、邏輯運算符、條件運算符及賦值運算符,而且這些運算符大部分可以毫無改變的照搬到數組建的運算中。) _1 U& D* {' Q! t# j" v2 o
MATLAB缺點:" f# f8 b* q! o0 K4 G# M/ m
1.循環運算效率低。9 r7 E2 f- n$ ~( `1 M, F+ x( ~& e' v
MATLAB中所有的變量均為向量形式,這樣一方面在對向量進行整體的計算時,表現出其他語言難以表現出的高效率,但是對于向量中的單個元素,或是將向量作為單個的循環變量來處理時,其處理過程相當的復雜。
+ z8 p1 u8 W" D4 [" ~2.封裝性不好。
; f4 M4 k# Q) a" ^" B) W一方面,所有的變量均保存在公共工作區中,任何語句都可以調用。另一方面,作為一個完備的軟件,而不是實現算法的程序,編程人員在使用MATLAB時需要花相當多的時間考慮如何設計用戶界面。5 U: I6 W8 c7 N N
本文為大家列舉了機器人編程比較熱門的5種語言,但這并不意味著需要全部掌握,對于開發者來說,發現一種對自身來說很自然的語言更為重要,且適合你的機器人硬件,使你能快速上手。在這里建議先學習Python,Python是一門相對簡單易懂的語言,有許多有效的庫可供學習,且功能非常強大。3 _* h6 R- O' h* g9 a
$ h$ a1 \$ E: C4 N4 u0 Y2 U' k
* J" `. E8 \& O0 R& Y& t& Y |
|