|
5 S5 ]2 Z% Y# [7 N1 @( L8 v4 a機器人編程語言最早于20世紀70年代初期問世,到目前為止已有多種編程語言出現,在眾多機器人編程語言中究竟哪種編程語言最好呢?這個問題困擾了很多新手學者,但遺憾的是,這是一個沒有準確答案的問題,你問不同的人會得到不同的答案,對于機器人學者來說建立“編程思維“才是最關鍵的,而不是用一種特定語言去衡量,在很多方面,學習哪種機器人編程語言并不是最重要的,重要的是通過編程思維來不斷提升自己的技能。
; J2 s( G* \" Q$ ]* X回到本文主題,我們將為大家介紹機器人研發(fā)中比較主流的5種機器人編程語言,并對他們的優(yōu)缺點進行分析。
; M& _; M& K* x8 j/ \8 q
0 S& R: _8 x% k一、Python——一種動態(tài)的、面向對象的腳本語言0 g& M" i" Y6 N
在機器人研究領域,Python 占據了重要地位。其中一個原因很可能是 Python(和C ++)是ROS中的兩種主要編程語言。像JAVA一樣,它是一種解釋性語言。但也不同于JAVA,Python 語言主要集中在可用性上。6 g( I; Y3 S* m2 j9 K
- @& a% t: H: Q- O8 V1 O
Python優(yōu)點:
$ {0 ~! [7 g3 P) x/ w1.更易入門
3 V4 O2 r$ p+ u# D# bPython程序簡單易懂,初學者學Python更易入門且深入下去可編寫非常復雜的程序,且開發(fā)效率高,有非常強大的第三方庫。
9 a+ L+ L/ J# W* ^2 ]2.高級語言: g% T% ~; q7 c% ^- ?2 r- D
當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節(jié)+ j$ h( y- A p" E( ]: B
3.可移植性3 [) k2 \6 {1 g( r* M+ t7 d
由于它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工 作在不同平臺上)。如果你小心地避免使用依賴于系統(tǒng)的特性,那么所有Python程序無需修改就幾乎可以在市場上所有的系統(tǒng)平臺上運行3 k/ |: e/ Q' ?0 |8 e8 p
4.可擴展性
+ p6 v- e; }& I9 o如果需要一段關鍵代碼運行得更快或者希望某些算法不公開,就可將部分程序用C或C++編寫,然后在你的Python程序中使用它們。 |" |" o8 ?8 ]# J
6 i z5 c7 p& n8 ^9 f" }
Python缺點:" t; ]+ e" A; o7 R# R0 O
1.運行速度慢3 n3 {# p0 u) X
Python的運行速度相比C語言確實慢很多,跟JAVA相比也要慢一些。9 L3 r9 z& |- G* j& }6 m$ h( T
2.線程不能利用多CPU問題2 N Z. Y6 B1 Q5 Z* `1 o4 }
這是Python被人詬病最多的一個缺點。
5 `& b& N" x# t/ @0 n4 n7 o% ^0 D
二、C /C ++——大多數中國程序員的第一個語言
' I' P: s0 I2 D! J! T& J9 s- |9 yC++語言是從C語言發(fā)展過來的,是一門面向對象的語言,它繼承了C語言的優(yōu)勢。很多人都認為 C 和 C ++ 對機器人科學家來說是一個很好的開端。因為大部分的硬件庫使用這些語言,允許實時性能,是非常成熟的編程語言。
/ ]" t" t J/ X j3 _! q( X% f& @C /C ++優(yōu)點:
" b9 ^9 w% n) F/ u1.跨平臺性好
5 f" }6 m" W5 n4 g' RC/C++可以潛入任何現代處理器中,幾乎所有的操作系統(tǒng)都支持,跨平臺性非常好。
" k! J% E5 h8 B! [6 M1 y2.運行效率高; E+ Z$ y4 y% Q( M9 a+ _8 V
C語言體型小巧,簡潔高效并且接近匯編語言,C++功能在C的基礎上增加面向對象的特點,代碼可讀性好,運行效率高。
6 ]% _( b3 n% ^: s- i% a3.語言簡潔,編寫風格自由6 {# C) y; o( f* M
兼有高級語言與匯編語言的優(yōu)點,語言簡潔、緊湊,使用方便、靈活豐富的運算符和數據類型,能訪問內存地址和位操作等硬件底層操作,生成的目標代碼質量高。) O9 y0 t! [ Z; k5 }4 @
0 O& i) I1 [) ], c; O. d: ~C/C++缺點:
1 A0 D( s, k. L6 I1.無垃圾回收機制0 h, V1 k$ I- o+ M2 n: F! h
相對于JAVA來說,沒有垃圾回收機制,容易引發(fā)內存泄露. i) d8 X% U( u, p% r7 I: y
2.學習較困難
" e4 g% X2 \7 [- F4 K從應用的角度,C語言比其他高級語言較難掌握。也就是說,對用C語言的人,要求對程序設計更熟練一些。9 V7 x1 u' O; Y/ I( S6 t
3.數據安全性上有缺陷3 C# G9 D: W p7 v; ]$ x% D
C語言的缺點主要表現在數據的封裝性上,這一點使得C在數據的安全性上有很大缺陷,這也是C和C++的一大區(qū)別!
0 y! ^2 u: k* Q8 H# n+ c/ u, D0 c* g7 A
三、JAVA——世界上使用范圍最廣的語言
; K, T o0 ~, |# k+ hJAVA語法規(guī)則和C++類似,從某種意義上來說,JAVA是由C和C++語言轉變而來的。像C#和MATLAB一樣,JAVA是一種解釋性語言,這意味著它不會被合并到機器語言代碼中。相反,JAVA虛擬機在運行時解釋指令。理論上來說,基于JAVA虛擬機,使用JAVA可以在不同機器上使用類似的代碼。但實際上,這并不普遍使用,有時會導致代碼運行緩慢,但是JAVA編程語言在機器人研究中非常流行。
2 J) w, L* r# ?; q. V; d. @ CJAVA優(yōu)點:- } e$ ~" I! X7 q8 k
1.更易學習
9 o1 A- r) K5 O+ m" l5 a1 C由于JAVA語言與C語言和C++語言比較接近,使大多數程序員學起來更簡單。
* v! Y5 e% S, L0 e% t2.支持動態(tài)綁定' L* R- \* _6 X- j" p
JAVA語言全面支持動態(tài)綁定,而C++語言只對虛函數使用動態(tài)綁定。7 g0 J7 s' p9 F5 c+ u
3.支持Internet應用開發(fā)' Z/ A" h) }4 f' [% ^- G2 D
JAVA語言支持Internet應用的開發(fā),在基本的JAVA應用編程接口中有一個網絡應用編程接口(JAVA.net),它提供了用于網絡應用編程的類庫,包括URL、URLConnection、Socket、ServerSocket等。. G* Z+ u% G) U, W9 j& M0 K+ }* {
4.更安全) c( s1 Q! r; ^
JAVA語言提供了一個安全機制以防止惡意代碼的共計,相對來說更安全。" f/ y! B8 A+ D
5.具有可移植性1 Z% R) P3 S( [) Y! m3 r
JAVA語言是可移植的,這種可移植性來源于體系結構中立性,另外,JAVA還嚴格規(guī)定了各個基本數據類型的長度。! }8 B6 M7 r: @0 ~. o/ M
& }2 m. a2 w3 Z. GJAVA缺點:' X$ Y& L) g2 z8 O
1.運行需要安裝JAVA虛擬機4 J+ ^$ Y. I. {. t. ~7 c9 H; r
JAVA語言最大的缺點就是運行JAVA程序需要裝JAVA虛擬機,就這一條嚴重的影響了JAVA應用程序的使用,基本看不到JAVA的應用程序。& m* ]6 v5 p9 Z: d
2.運行成本較高
9 X3 @ v6 u+ p# e& I: o) x另外JAVA程序的運行成本比較高,過去機器配置不夠高的時候,JAVA顯得很慢現在隨著JAVA本身的版本升級和電腦性能的強化這條基本已經不是問題了。; v6 O; p: w# P; t
& P2 Z) A$ p0 N3 \四、C#/.NET——微軟提供的一種限制性編程語言8 l8 j3 c, a0 Y# P+ j. W- ^
C#/ .NET很大程度上是為微軟機器人工程師工作室提供的,微軟機器人工程師工作室將其作為基本語言。如果使用這個框架,就必須學習 C#。
5 X& Z- |6 W7 M$ m4 LC#/.NET優(yōu)點:
. y# ~8 w; S+ U; q1.強大的.Net Framework托管代碼集合類
' w) \9 d1 e9 f5 H# Z,封裝了大多數windows上使用的技術組件類, 文件系統(tǒng),UI界面,數據源訪問,網絡訪問,COM互操作(圖形圖像多媒體,WPF圖形系統(tǒng)),沒有的可以通過.net的平臺調用win API函數來得到。
. S6 I" x, B7 a3 X4 F2.較簡單的語言特性
7 A( G- d4 Z9 R; x* Y自動內存管理, 單繼承,支持事件、委托、屬性、Linq等一系列讓業(yè)務開發(fā)更簡單的功能。
1 ^- o/ R" c* e3.Web應用程序開發(fā)速度快+ w% f- F6 i1 P! n# d( E( v
Web應用程序開發(fā)速度快(.net框架的支持,控件可以拖拉(UI方便編輯和定位),添加事件(跳轉到控制邏輯層),ADO.net數據源訪問, xml 網絡類庫, windows服務)。
% S& @- Y/ \' Y4.和語言平臺無關的編譯機制及較快的運行速度' @3 I% l5 R0 F# w6 }, O( T
和語言平臺無關的編譯機制,及較快的運行速度(ms不推薦, mono的 Xamarin, Unity還不錯):編譯成IL中間語言,CLR公共語言運行庫托管代碼,CLR根據運行時程序需要將IL中間語言用JIT即時編譯方式編譯為內部機器代碼,對編譯好的機器代碼緩存起來,提高了程序速度。
, J2 y6 H: d9 r- T# @5 a! h5.代碼安全性0 D2 E% D$ Y1 j6 z" {7 {0 o- t) g8 i
window是基于角色的安全機制,.net提供了基于代碼的安全機制,由于中間語言提供了類型安全性,CLR在運行前檢查代碼,確定是否有需要的安全權限,CLR沒有權限則不能執(zhí)行該代碼。$ {+ i3 `( t5 }3 g
' w% e$ G8 b. p& s7 L, E' XC#/.NET缺點:
2 ?% q! M. h y I3 g1.底層和高性能不合適
; i4 y9 {! n1 F; ]. S9 {不合適做時間性能很高(高速算法)或空間性能很靈活(內存立即釋放)的程序,因為中間語言和編譯過程,比C/C++Native類型的語言會慢一些,內存自動回收難以立即釋放不需要的內存,不采用內聯(lián)函數和析構函數(不建議)。
" o" `2 Y5 V4 \2.Windows平臺以外支持有限9 h& \9 S, v* g
mono不夠成熟好用,window以外Java,Python等是很強大和同樣優(yōu)秀的。! Y& f! u: N9 H0 ]! ?
/ J4 B6 j" A9 u" v五、MATLAB——一種面向數值計算的高級程序設計語言
/ B+ U3 ?+ w1 O1 _MATLAB和它的開源親戚(例如Octave)在一些機器人專家中非常有名,是他們負責調查數據和創(chuàng)建控制系統(tǒng)常用的語言。還有一個非常有名的MATLAB機器人工具箱。使用MATLAB單獨創(chuàng)建整個機器人系統(tǒng)的人員。如需要分解數據,創(chuàng)建高級圖表或執(zhí)行控制系統(tǒng),那就很可能需要學習MATLAB。: }; \8 A! x8 c9 b
MATLAB優(yōu)點:
* O% U. o, Z+ R. ~2 q( c9 {9 r2 ?) |1.編程效率高
: R. d3 {. J% s8 XMATLAB語言為演算紙式科學算法語言,由于它編程簡單,所以編程效率高,易學易懂。) a: W* ^6 H' k+ U- o6 F
2.高效方便的矩陣和數組運算, R8 V- w4 N$ V2 V
MATLAB語言像BASIC、C語言一樣規(guī)定了矩陣的算術運算符、關系運算符、邏輯運算符、條件運算符及賦值運算符,而且這些運算符大部分可以毫無改變的照搬到數組建的運算中。
$ q2 \( H) j" Q" |2 |, Y: C% C. vMATLAB缺點:
& m7 J* E N% V% ]4 d3 C0 b1.循環(huán)運算效率低。; H2 y$ R6 w/ O+ j& J( m0 d
MATLAB中所有的變量均為向量形式,這樣一方面在對向量進行整體的計算時,表現出其他語言難以表現出的高效率,但是對于向量中的單個元素,或是將向量作為單個的循環(huán)變量來處理時,其處理過程相當的復雜。; r; h9 M5 H ]2 [9 B; u1 s+ s- [
2.封裝性不好。
' O9 w" \: S: W3 \一方面,所有的變量均保存在公共工作區(qū)中,任何語句都可以調用。另一方面,作為一個完備的軟件,而不是實現算法的程序,編程人員在使用MATLAB時需要花相當多的時間考慮如何設計用戶界面。
. u9 G2 B4 }9 q2 D本文為大家列舉了機器人編程比較熱門的5種語言,但這并不意味著需要全部掌握,對于開發(fā)者來說,發(fā)現一種對自身來說很自然的語言更為重要,且適合你的機器人硬件,使你能快速上手。在這里建議先學習Python,Python是一門相對簡單易懂的語言,有許多有效的庫可供學習,且功能非常強大。3 }. V) z+ R" I# |
0 e7 { d {9 ?: z$ \. ^4 Y. Y
8 t( y2 W# B; h1 H1 T" @
|
|