|
/ ~) O a; @: e0 a2 r機(jī)器人編程語言最早于20世紀(jì)70年代初期問世,到目前為止已有多種編程語言出現(xiàn),在眾多機(jī)器人編程語言中究竟哪種編程語言最好呢?這個(gè)問題困擾了很多新手學(xué)者,但遺憾的是,這是一個(gè)沒有準(zhǔn)確答案的問題,你問不同的人會(huì)得到不同的答案,對(duì)于機(jī)器人學(xué)者來說建立“編程思維“才是最關(guān)鍵的,而不是用一種特定語言去衡量,在很多方面,學(xué)習(xí)哪種機(jī)器人編程語言并不是最重要的,重要的是通過編程思維來不斷提升自己的技能。
6 m- @" M8 Y C+ }/ k, U回到本文主題,我們將為大家介紹機(jī)器人研發(fā)中比較主流的5種機(jī)器人編程語言,并對(duì)他們的優(yōu)缺點(diǎn)進(jìn)行分析。; o& M5 T3 j& u" }- ^
0 g, |' m3 \% M6 K# J一、Python——一種動(dòng)態(tài)的、面向?qū)ο蟮哪_本語言* Q1 g, W9 Y8 e4 ?
在機(jī)器人研究領(lǐng)域,Python 占據(jù)了重要地位。其中一個(gè)原因很可能是 Python(和C ++)是ROS中的兩種主要編程語言。像JAVA一樣,它是一種解釋性語言。但也不同于JAVA,Python 語言主要集中在可用性上。) Z) O$ B1 L4 t* x
) S4 @" _; b7 D+ }1 n+ p+ ^9 j
Python優(yōu)點(diǎn):, l1 X F3 a6 K G
1.更易入門% q# ]7 D0 x. J2 @
Python程序簡(jiǎn)單易懂,初學(xué)者學(xué)Python更易入門且深入下去可編寫非常復(fù)雜的程序,且開發(fā)效率高,有非常強(qiáng)大的第三方庫。6 |4 R5 ^8 p8 o) i$ [
2.高級(jí)語言
1 `8 G4 I6 a0 z當(dāng)你用Python語言編寫程序的時(shí)候,你無需考慮諸如如何管理你的程序使用的內(nèi)存一類的底層細(xì)節(jié)# \2 u- Q. e# J# w. B, N
3.可移植性
# n0 d0 f! \# X9 }由于它的開源本質(zhì),Python已經(jīng)被移植在許多平臺(tái)上(經(jīng)過改動(dòng)使它能夠工 作在不同平臺(tái)上)。如果你小心地避免使用依賴于系統(tǒng)的特性,那么所有Python程序無需修改就幾乎可以在市場(chǎng)上所有的系統(tǒng)平臺(tái)上運(yùn)行
/ U7 O& l7 b* l. I$ b( t4.可擴(kuò)展性
4 }7 ~1 m. @2 [1 @' \6 ~如果需要一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開,就可將部分程序用C或C++編寫,然后在你的Python程序中使用它們。9 w" Z5 [0 p% w0 F
# l$ z5 \4 h" e- }
Python缺點(diǎn):
8 G* N5 B" O4 m' w& ?, a- @* M) k1.運(yùn)行速度慢
7 N0 L$ [6 j8 s$ O; J$ XPython的運(yùn)行速度相比C語言確實(shí)慢很多,跟JAVA相比也要慢一些。; q* Y; ^! [& W% V9 y. ?0 u- `+ a
2.線程不能利用多CPU問題- R$ z/ H% b1 p9 F, P o
這是Python被人詬病最多的一個(gè)缺點(diǎn)。 b W8 H1 v! c
" p9 u- u9 p7 d: b j/ S, R9 O. K二、C /C ++——大多數(shù)中國(guó)程序員的第一個(gè)語言
% G+ E8 Y2 K- Z& dC++語言是從C語言發(fā)展過來的,是一門面向?qū)ο蟮恼Z言,它繼承了C語言的優(yōu)勢(shì)。很多人都認(rèn)為 C 和 C ++ 對(duì)機(jī)器人科學(xué)家來說是一個(gè)很好的開端。因?yàn)榇蟛糠值挠布䦷焓褂眠@些語言,允許實(shí)時(shí)性能,是非常成熟的編程語言。( S( b' O. A/ V8 v. D
C /C ++優(yōu)點(diǎn):5 m: S' u( p, x0 A1 t
1.跨平臺(tái)性好
8 f3 }) N" |3 ^) f) `+ O8 aC/C++可以潛入任何現(xiàn)代處理器中,幾乎所有的操作系統(tǒng)都支持,跨平臺(tái)性非常好。
; V ?2 e- o$ b9 b2 S2.運(yùn)行效率高
: H, `$ o6 p. n% V7 h7 L; h4 MC語言體型小巧,簡(jiǎn)潔高效并且接近匯編語言,C++功能在C的基礎(chǔ)上增加面向?qū)ο蟮奶攸c(diǎn),代碼可讀性好,運(yùn)行效率高。
8 c* |9 F$ T) V, a- _3.語言簡(jiǎn)潔,編寫風(fēng)格自由
* P1 z0 _$ c2 p% J b$ c5 \) h# D% {2 g兼有高級(jí)語言與匯編語言的優(yōu)點(diǎn),語言簡(jiǎn)潔、緊湊,使用方便、靈活豐富的運(yùn)算符和數(shù)據(jù)類型,能訪問內(nèi)存地址和位操作等硬件底層操作,生成的目標(biāo)代碼質(zhì)量高。4 \. P& ^* D8 B9 ^+ D
: ?$ j* U3 b x3 m: J
C/C++缺點(diǎn):) B8 ?- C( G: w
1.無垃圾回收機(jī)制
8 @4 m1 S/ }# m相對(duì)于JAVA來說,沒有垃圾回收機(jī)制,容易引發(fā)內(nèi)存泄露
' f F( I% A4 L& M- ~6 m+ O2.學(xué)習(xí)較困難
& t, P% ]* R6 o: ^3 ]' Z' W從應(yīng)用的角度,C語言比其他高級(jí)語言較難掌握。也就是說,對(duì)用C語言的人,要求對(duì)程序設(shè)計(jì)更熟練一些。$ J1 b4 m1 n- f: R8 `5 }" z
3.?dāng)?shù)據(jù)安全性上有缺陷& F4 `5 _8 b4 N
C語言的缺點(diǎn)主要表現(xiàn)在數(shù)據(jù)的封裝性上,這一點(diǎn)使得C在數(shù)據(jù)的安全性上有很大缺陷,這也是C和C++的一大區(qū)別。
, W6 Y0 g! n0 H: x! a
* m/ G; M2 X! l# C三、JAVA——世界上使用范圍最廣的語言3 l3 c- n- g, K, I2 O0 r/ E# N
JAVA語法規(guī)則和C++類似,從某種意義上來說,JAVA是由C和C++語言轉(zhuǎn)變而來的。像C#和MATLAB一樣,JAVA是一種解釋性語言,這意味著它不會(huì)被合并到機(jī)器語言代碼中。相反,JAVA虛擬機(jī)在運(yùn)行時(shí)解釋指令。理論上來說,基于JAVA虛擬機(jī),使用JAVA可以在不同機(jī)器上使用類似的代碼。但實(shí)際上,這并不普遍使用,有時(shí)會(huì)導(dǎo)致代碼運(yùn)行緩慢,但是JAVA編程語言在機(jī)器人研究中非常流行。
1 S$ _ k. y. ?2 SJAVA優(yōu)點(diǎn):8 j: p& {' b1 y' @! q2 H" |3 a* S# u; T
1.更易學(xué)習(xí)
( O4 s4 u0 x- F/ V- p% g% e由于JAVA語言與C語言和C++語言比較接近,使大多數(shù)程序員學(xué)起來更簡(jiǎn)單。0 D7 k N( V9 }! o
2.支持動(dòng)態(tài)綁定3 O* `" R* n0 a8 a
JAVA語言全面支持動(dòng)態(tài)綁定,而C++語言只對(duì)虛函數(shù)使用動(dòng)態(tài)綁定。
: l I! [ q; P3.支持Internet應(yīng)用開發(fā)
& Q" j0 ]) o) C! A) A4 VJAVA語言支持Internet應(yīng)用的開發(fā),在基本的JAVA應(yīng)用編程接口中有一個(gè)網(wǎng)絡(luò)應(yīng)用編程接口(JAVA.net),它提供了用于網(wǎng)絡(luò)應(yīng)用編程的類庫,包括URL、URLConnection、Socket、ServerSocket等。$ \/ \. l8 d5 M% [& @, m! q9 @
4.更安全
" ~0 |% m* m5 W, m6 AJAVA語言提供了一個(gè)安全機(jī)制以防止惡意代碼的共計(jì),相對(duì)來說更安全。: M. W" a# g ^, B( b
5.具有可移植性
( }4 e$ {8 Y( _6 E* Y4 M6 G gJAVA語言是可移植的,這種可移植性來源于體系結(jié)構(gòu)中立性,另外,JAVA還嚴(yán)格規(guī)定了各個(gè)基本數(shù)據(jù)類型的長(zhǎng)度。) M1 p( y; I' T/ z
0 x o' |/ Q q, tJAVA缺點(diǎn):
9 G( h5 R( m$ A4 l$ S1.運(yùn)行需要安裝JAVA虛擬機(jī)0 {# ^& j7 w3 k' _
JAVA語言最大的缺點(diǎn)就是運(yùn)行JAVA程序需要裝JAVA虛擬機(jī),就這一條嚴(yán)重的影響了JAVA應(yīng)用程序的使用,基本看不到JAVA的應(yīng)用程序。
! w( U6 L: B0 }; x* U2.運(yùn)行成本較高
) u6 i$ u, z- x$ O5 x另外JAVA程序的運(yùn)行成本比較高,過去機(jī)器配置不夠高的時(shí)候,JAVA顯得很慢現(xiàn)在隨著JAVA本身的版本升級(jí)和電腦性能的強(qiáng)化這條基本已經(jīng)不是問題了。- Q* c& ?! G# I$ k
# A# c& K' U5 {$ {2 q" e# _
四、C#/.NET——微軟提供的一種限制性編程語言+ Q8 [' M' B& a3 v
C#/ .NET很大程度上是為微軟機(jī)器人工程師工作室提供的,微軟機(jī)器人工程師工作室將其作為基本語言。如果使用這個(gè)框架,就必須學(xué)習(xí) C#。
7 Y; R! z! P& X$ iC#/.NET優(yōu)點(diǎn):& b, _6 H9 r- N1 O2 a5 \" H
1.強(qiáng)大的.Net Framework托管代碼集合類
9 Y: K. B3 e' k" r,封裝了大多數(shù)windows上使用的技術(shù)組件類, 文件系統(tǒng),UI界面,數(shù)據(jù)源訪問,網(wǎng)絡(luò)訪問,COM互操作(圖形圖像多媒體,WPF圖形系統(tǒng)),沒有的可以通過.net的平臺(tái)調(diào)用win API函數(shù)來得到。
) U( z; G% Z7 Q$ t# `& G; Y2.較簡(jiǎn)單的語言特性) r5 F' M! g$ n+ M; v, w
自動(dòng)內(nèi)存管理, 單繼承,支持事件、委托、屬性、Linq等一系列讓業(yè)務(wù)開發(fā)更簡(jiǎn)單的功能。: y b9 Y+ }0 C1 n2 V- Y' m
3.Web應(yīng)用程序開發(fā)速度快% l' l6 @8 j, f; l& L5 B( `$ I
Web應(yīng)用程序開發(fā)速度快(.net框架的支持,控件可以拖拉(UI方便編輯和定位),添加事件(跳轉(zhuǎn)到控制邏輯層),ADO.net數(shù)據(jù)源訪問, xml 網(wǎng)絡(luò)類庫, windows服務(wù))。2 _3 n% `' X& j, a$ M8 C G
4.和語言平臺(tái)無關(guān)的編譯機(jī)制及較快的運(yùn)行速度2 Z6 t. V3 S0 a: m( \
和語言平臺(tái)無關(guān)的編譯機(jī)制,及較快的運(yùn)行速度(ms不推薦, mono的 Xamarin, Unity還不錯(cuò)):編譯成IL中間語言,CLR公共語言運(yùn)行庫托管代碼,CLR根據(jù)運(yùn)行時(shí)程序需要將IL中間語言用JIT即時(shí)編譯方式編譯為內(nèi)部機(jī)器代碼,對(duì)編譯好的機(jī)器代碼緩存起來,提高了程序速度。- _! n! e6 U! G" m
5.代碼安全性% O. P" x9 Y4 _. T! Q& S. P' |
window是基于角色的安全機(jī)制,.net提供了基于代碼的安全機(jī)制,由于中間語言提供了類型安全性,CLR在運(yùn)行前檢查代碼,確定是否有需要的安全權(quán)限,CLR沒有權(quán)限則不能執(zhí)行該代碼。
. n$ `* S2 I# Q) }; B& |. b3 {1 c% ~' _9 V& [
C#/.NET缺點(diǎn):1 {: z7 w: [4 D/ g& W; x9 Y. a
1.底層和高性能不合適) Y4 f( R9 ?$ J3 \, j" k8 w
不合適做時(shí)間性能很高(高速算法)或空間性能很靈活(內(nèi)存立即釋放)的程序,因?yàn)橹虚g語言和編譯過程,比C/C++Native類型的語言會(huì)慢一些,內(nèi)存自動(dòng)回收難以立即釋放不需要的內(nèi)存,不采用內(nèi)聯(lián)函數(shù)和析構(gòu)函數(shù)(不建議)。
" `" g+ a" C1 F( J1 B' j* C2.Windows平臺(tái)以外支持有限
2 @8 B$ r% g5 A+ p0 F6 wmono不夠成熟好用,window以外Java,Python等是很強(qiáng)大和同樣優(yōu)秀的。
" j# l" N& p6 _1 K6 U) @
& g& K" @; S+ P) p0 [* O五、MATLAB——一種面向數(shù)值計(jì)算的高級(jí)程序設(shè)計(jì)語言
% U4 d" z5 V+ z& w! |* gMATLAB和它的開源親戚(例如Octave)在一些機(jī)器人專家中非常有名,是他們負(fù)責(zé)調(diào)查數(shù)據(jù)和創(chuàng)建控制系統(tǒng)常用的語言。還有一個(gè)非常有名的MATLAB機(jī)器人工具箱。使用MATLAB單獨(dú)創(chuàng)建整個(gè)機(jī)器人系統(tǒng)的人員。如需要分解數(shù)據(jù),創(chuàng)建高級(jí)圖表或執(zhí)行控制系統(tǒng),那就很可能需要學(xué)習(xí)MATLAB。
1 S8 o( l6 V- y: HMATLAB優(yōu)點(diǎn):9 F4 x% Z7 d& x/ k r6 H3 n
1.編程效率高
6 `8 n5 h; f! q j! [& Y0 l/ }MATLAB語言為演算紙式科學(xué)算法語言,由于它編程簡(jiǎn)單,所以編程效率高,易學(xué)易懂。
8 m! g5 M: d) W2 Q2.高效方便的矩陣和數(shù)組運(yùn)算
, M N% V: P! p8 y% K% d0 xMATLAB語言像BASIC、C語言一樣規(guī)定了矩陣的算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、條件運(yùn)算符及賦值運(yùn)算符,而且這些運(yùn)算符大部分可以毫無改變的照搬到數(shù)組建的運(yùn)算中。
9 g' Y) m6 |! b- Y5 d& [, `# d* ^MATLAB缺點(diǎn):
3 _- ]# u% Y+ t4 A0 r+ h1.循環(huán)運(yùn)算效率低。" j4 _; F8 _5 A3 u! ~1 I% d+ k4 [. Y
MATLAB中所有的變量均為向量形式,這樣一方面在對(duì)向量進(jìn)行整體的計(jì)算時(shí),表現(xiàn)出其他語言難以表現(xiàn)出的高效率,但是對(duì)于向量中的單個(gè)元素,或是將向量作為單個(gè)的循環(huán)變量來處理時(shí),其處理過程相當(dāng)?shù)膹?fù)雜。+ _+ u& Q" p; N) p! J
2.封裝性不好。) o# m/ r# t! l& H& \2 S
一方面,所有的變量均保存在公共工作區(qū)中,任何語句都可以調(diào)用。另一方面,作為一個(gè)完備的軟件,而不是實(shí)現(xiàn)算法的程序,編程人員在使用MATLAB時(shí)需要花相當(dāng)多的時(shí)間考慮如何設(shè)計(jì)用戶界面。8 l+ S% b3 N# d b8 ^/ g
本文為大家列舉了機(jī)器人編程比較熱門的5種語言,但這并不意味著需要全部掌握,對(duì)于開發(fā)者來說,發(fā)現(xiàn)一種對(duì)自身來說很自然的語言更為重要,且適合你的機(jī)器人硬件,使你能快速上手。在這里建議先學(xué)習(xí)Python,Python是一門相對(duì)簡(jiǎn)單易懂的語言,有許多有效的庫可供學(xué)習(xí),且功能非常強(qiáng)大。/ Q) G' J4 s9 @7 C- j4 A
4 I7 S1 K% Y" K2 t% o. m3 F
" ~/ O+ e. }" D% o6 D; P% T$ k
|
|