|
9 x# S1 ~5 x7 d) v) i' {
機(jī)器人編程語言最早于20世紀(jì)70年代初期問世,,到目前為止已有多種編程語言出現(xiàn),,在眾多機(jī)器人編程語言中究竟哪種編程語言最好呢,?這個(gè)問題困擾了很多新手學(xué)者,,但遺憾的是,,這是一個(gè)沒有準(zhǔn)確答案的問題,,你問不同的人會(huì)得到不同的答案,對于機(jī)器人學(xué)者來說建立“編程思維“才是最關(guān)鍵的,,而不是用一種特定語言去衡量,,在很多方面,學(xué)習(xí)哪種機(jī)器人編程語言并不是最重要的,,重要的是通過編程思維來不斷提升自己的技能,。
0 o7 {+ H3 F- @/ x8 {回到本文主題,我們將為大家介紹機(jī)器人研發(fā)中比較主流的5種機(jī)器人編程語言,,并對他們的優(yōu)缺點(diǎn)進(jìn)行分析,。 V, [6 c; W1 c
: W$ E9 ~+ `5 r! r% X5 ^
一、Python——一種動(dòng)態(tài)的,、面向?qū)ο蟮哪_本語言
% t/ \) x( v0 A" J7 z& T在機(jī)器人研究領(lǐng)域,,Python 占據(jù)了重要地位。其中一個(gè)原因很可能是 Python(和C ++)是ROS中的兩種主要編程語言,。像JAVA一樣,,它是一種解釋性語言。但也不同于JAVA,,Python 語言主要集中在可用性上,。4 E1 X! h6 ?/ ]; Q: T: q
![]()
. |0 w$ S" c8 f! Z* aPython優(yōu)點(diǎn):
& e, ^$ {. S2 r. v* h5 t. E: N1.更易入門
- J# L5 {9 ?* a# C0 ?Python程序簡單易懂,初學(xué)者學(xué)Python更易入門且深入下去可編寫非常復(fù)雜的程序,,且開發(fā)效率高,,有非常強(qiáng)大的第三方庫。/ L# m+ Q8 d1 v
2.高級語言
( {$ c$ U* x/ K. G" t& B當(dāng)你用Python語言編寫程序的時(shí)候,,你無需考慮諸如如何管理你的程序使用的內(nèi)存一類的底層細(xì)節(jié)" B/ t, M9 C2 G2 L+ C: U. w
3.可移植性
2 w( J3 s# T; ]- y) R+ C由于它的開源本質(zhì),,Python已經(jīng)被移植在許多平臺上(經(jīng)過改動(dòng)使它能夠工 作在不同平臺上)。如果你小心地避免使用依賴于系統(tǒng)的特性,,那么所有Python程序無需修改就幾乎可以在市場上所有的系統(tǒng)平臺上運(yùn)行
* n8 |( T' k- K4.可擴(kuò)展性: r0 r' o- K4 u; W& `4 B
如果需要一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開,,就可將部分程序用C或C++編寫,然后在你的Python程序中使用它們,。
& l3 @' b8 g. z# J! i. D: k- ?
) Z% }5 [, D& f) G+ ~+ C( {Python缺點(diǎn):
0 d& q, O" c3 C) P+ n- j4 V1.運(yùn)行速度慢
+ z) Z9 Z+ R# J8 CPython的運(yùn)行速度相比C語言確實(shí)慢很多,,跟JAVA相比也要慢一些。
2 i) M/ [& t7 _1 j. C$ q, m2.線程不能利用多CPU問題
0 c" G9 N/ J( Y) z P這是Python被人詬病最多的一個(gè)缺點(diǎn),。
( t+ i3 `, m L) ]1 Q2 G' ]3 \0 k" s# l- _; r% t3 P% Z
二,、C /C ++——大多數(shù)中國程序員的第一個(gè)語言
: U4 u% l- D0 ^% OC++語言是從C語言發(fā)展過來的,,是一門面向?qū)ο蟮恼Z言,它繼承了C語言的優(yōu)勢,。很多人都認(rèn)為 C 和 C ++ 對機(jī)器人科學(xué)家來說是一個(gè)很好的開端,。因?yàn)榇蟛糠值挠布䦷焓褂眠@些語言,允許實(shí)時(shí)性能,,是非常成熟的編程語言,。
% m8 M1 _. q; Y5 u+ v2 L! K4 _C /C ++優(yōu)點(diǎn):7 q2 k2 E) p$ F& H+ x5 Z2 Q
1.跨平臺性好+ z0 E) G/ q/ t& k4 |1 k
C/C++可以潛入任何現(xiàn)代處理器中,幾乎所有的操作系統(tǒng)都支持,,跨平臺性非常好,。' ^1 n% ?+ A; c7 f! X: ?: s
2.運(yùn)行效率高
' L7 K4 ], I: G/ TC語言體型小巧,簡潔高效并且接近匯編語言,,C++功能在C的基礎(chǔ)上增加面向?qū)ο蟮奶攸c(diǎn),,代碼可讀性好,運(yùn)行效率高,。
" H6 W# H3 w8 i9 y3.語言簡潔,,編寫風(fēng)格自由: ~, F- D! j: D0 b* O) w. b
兼有高級語言與匯編語言的優(yōu)點(diǎn),語言簡潔,、緊湊,,使用方便、靈活豐富的運(yùn)算符和數(shù)據(jù)類型,,能訪問內(nèi)存地址和位操作等硬件底層操作,,生成的目標(biāo)代碼質(zhì)量高。
/ ?( J5 _. i) T) w& ^
- [2 U" o2 [ tC/C++缺點(diǎn):0 u7 V( c& V9 J0 t
1.無垃圾回收機(jī)制
9 `5 j; T0 h* ~: O相對于JAVA來說,,沒有垃圾回收機(jī)制,,容易引發(fā)內(nèi)存泄露
+ g; {! d. r+ o1 ^) ~2.學(xué)習(xí)較困難0 o" x. r8 L/ m( L& P; z
從應(yīng)用的角度,C語言比其他高級語言較難掌握,。也就是說,對用C語言的人,,要求對程序設(shè)計(jì)更熟練一些,。
4 m i; g( h _6 i) n, s% b. F3.?dāng)?shù)據(jù)安全性上有缺陷/ J4 u2 E& p4 u8 n" Y0 R5 b: d1 a
C語言的缺點(diǎn)主要表現(xiàn)在數(shù)據(jù)的封裝性上,這一點(diǎn)使得C在數(shù)據(jù)的安全性上有很大缺陷,,這也是C和C++的一大區(qū)別,。
( O) [5 A$ g* w2 m: T9 }/ c% u3 n: s( U
三,、JAVA——世界上使用范圍最廣的語言$ q0 P4 m! [5 z4 U/ J
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ī)器人研究中非常流行。: z" E5 t. _( Y" _
JAVA優(yōu)點(diǎn):8 P2 C) f \9 x/ I
1.更易學(xué)習(xí)8 {; H {* r% [, ]
由于JAVA語言與C語言和C++語言比較接近,,使大多數(shù)程序員學(xué)起來更簡單,。
0 `5 {/ |" E5 j% U- v( f, H2.支持動(dòng)態(tài)綁定; L. E! {0 |. f4 ~/ |- m" t
JAVA語言全面支持動(dòng)態(tài)綁定,而C++語言只對虛函數(shù)使用動(dòng)態(tài)綁定,。" n, {! t# v( m* a( r1 ]
3.支持Internet應(yīng)用開發(fā)
, @$ ^4 g2 v* l* FJAVA語言支持Internet應(yīng)用的開發(fā),,在基本的JAVA應(yīng)用編程接口中有一個(gè)網(wǎng)絡(luò)應(yīng)用編程接口(JAVA.net),它提供了用于網(wǎng)絡(luò)應(yīng)用編程的類庫,,包括URL,、URLConnection、Socket,、ServerSocket等,。
5 C/ S3 o; L( \) b1 Y4.更安全
3 N8 B7 b; A1 J7 qJAVA語言提供了一個(gè)安全機(jī)制以防止惡意代碼的共計(jì),相對來說更安全,。7 q& F5 \; H: X
5.具有可移植性
$ ^7 z: i9 z# Q8 CJAVA語言是可移植的,,這種可移植性來源于體系結(jié)構(gòu)中立性,另外,,JAVA還嚴(yán)格規(guī)定了各個(gè)基本數(shù)據(jù)類型的長度,。
! v1 E& n& U6 q9 g" L% C
+ N& ^/ ~" \1 t; G9 eJAVA缺點(diǎn):! X1 R6 P2 r7 C. Y$ ^3 ?
1.運(yùn)行需要安裝JAVA虛擬機(jī). L; g( J+ R- V( h& ]' T% N1 O
JAVA語言最大的缺點(diǎn)就是運(yùn)行JAVA程序需要裝JAVA虛擬機(jī),就這一條嚴(yán)重的影響了JAVA應(yīng)用程序的使用,,基本看不到JAVA的應(yīng)用程序,。0 j ^$ e8 X: p' Y4 A- l/ F; t
2.運(yùn)行成本較高
$ @* O! z. i: ^3 m# \5 j3 n. M; |$ u另外JAVA程序的運(yùn)行成本比較高,過去機(jī)器配置不夠高的時(shí)候,,JAVA顯得很慢現(xiàn)在隨著JAVA本身的版本升級和電腦性能的強(qiáng)化這條基本已經(jīng)不是問題了,。
7 n" i2 F8 [/ K3 O/ D W' ~+ f( c7 I$ J1 K
四、C#/.NET——微軟提供的一種限制性編程語言1 {+ I, m% q' r4 q M
C#/ .NET很大程度上是為微軟機(jī)器人工程師工作室提供的,,微軟機(jī)器人工程師工作室將其作為基本語言,。如果使用這個(gè)框架,就必須學(xué)習(xí) C#,。
2 L9 W7 u: N$ u$ NC#/.NET優(yōu)點(diǎn):) D! O j7 M* w" i
1.強(qiáng)大的.Net Framework托管代碼集合類
: n0 N1 G; V+ O+ m, J! p1 F,封裝了大多數(shù)windows上使用的技術(shù)組件類, 文件系統(tǒng),,UI界面,,數(shù)據(jù)源訪問,網(wǎng)絡(luò)訪問,,COM互操作(圖形圖像多媒體,WPF圖形系統(tǒng)),,沒有的可以通過.net的平臺調(diào)用win API函數(shù)來得到。
" r- |8 s0 J& p5 P3 \+ O2.較簡單的語言特性* a K! P- J7 {5 H+ F3 b* x( e, P Y% [! \
自動(dòng)內(nèi)存管理, 單繼承,,支持事件,、委托、屬性,、Linq等一系列讓業(yè)務(wù)開發(fā)更簡單的功能,。
. b( j7 K* S6 x9 Y2 a" h/ R3.Web應(yīng)用程序開發(fā)速度快
; Q; I! ~0 }5 AWeb應(yīng)用程序開發(fā)速度快(.net框架的支持,控件可以拖拉(UI方便編輯和定位),,添加事件(跳轉(zhuǎn)到控制邏輯層),ADO.net數(shù)據(jù)源訪問, xml 網(wǎng)絡(luò)類庫, windows服務(wù)),。
* v; d( `' Y8 y" w8 O+ t4.和語言平臺無關(guān)的編譯機(jī)制及較快的運(yùn)行速度7 s3 a4 @$ h* q& V( T/ E2 |; V3 \( O
和語言平臺無關(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ī)器代碼,對編譯好的機(jī)器代碼緩存起來,,提高了程序速度,。' G) u( H8 v# @4 a7 E) i$ R8 H0 ]
5.代碼安全性
7 o, D3 W7 s* } u& I. ?window是基于角色的安全機(jī)制,.net提供了基于代碼的安全機(jī)制,,由于中間語言提供了類型安全性,,CLR在運(yùn)行前檢查代碼,確定是否有需要的安全權(quán)限,,CLR沒有權(quán)限則不能執(zhí)行該代碼,。" n. r- o% m+ Z3 T' z2 u. `* `
4 t0 L; ~$ J* p9 X* XC#/.NET缺點(diǎn):
; n* ~' j! c/ v3 u1.底層和高性能不合適
* @! a- Z" E- \) S不合適做時(shí)間性能很高(高速算法)或空間性能很靈活(內(nèi)存立即釋放)的程序,因?yàn)橹虚g語言和編譯過程,,比C/C++Native類型的語言會(huì)慢一些,,內(nèi)存自動(dòng)回收難以立即釋放不需要的內(nèi)存,不采用內(nèi)聯(lián)函數(shù)和析構(gòu)函數(shù)(不建議),。9 g- r: p: R$ c1 D6 S3 g
2.Windows平臺以外支持有限
: M% B2 A) G4 gmono不夠成熟好用,,window以外Java,Python等是很強(qiáng)大和同樣優(yōu)秀的。
C% }, L5 C+ ~$ x/ ^* ]# o" N2 e/ I2 {+ F+ \! c7 N/ |
五,、MATLAB——一種面向數(shù)值計(jì)算的高級程序設(shè)計(jì)語言) I1 |& m. g9 n& x( `/ @8 C8 L
MATLAB和它的開源親戚(例如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)建高級圖表或執(zhí)行控制系統(tǒng),,那就很可能需要學(xué)習(xí)MATLAB,。! D1 ` F/ ]" H9 ?* q2 h: A
MATLAB優(yōu)點(diǎn):& r( y# b, d4 R1 m( { O. b3 L) w
1.編程效率高
! q) ]# `7 Z0 c, P7 }: iMATLAB語言為演算紙式科學(xué)算法語言,由于它編程簡單,,所以編程效率高,,易學(xué)易懂。" i. k7 j3 ^$ W8 Q) `7 L3 [
2.高效方便的矩陣和數(shù)組運(yùn)算
" q/ d$ s0 p2 n: F# c6 gMATLAB語言像BASIC,、C語言一樣規(guī)定了矩陣的算術(shù)運(yùn)算符,、關(guān)系運(yùn)算符、邏輯運(yùn)算符,、條件運(yùn)算符及賦值運(yùn)算符,,而且這些運(yùn)算符大部分可以毫無改變的照搬到數(shù)組建的運(yùn)算中。
5 e H0 Z' A! @! v0 F5 `MATLAB缺點(diǎn):
+ a$ H! q9 v. |, B3 w9 L1.循環(huán)運(yùn)算效率低,。
8 u3 U- m, o; k9 v$ FMATLAB中所有的變量均為向量形式,,這樣一方面在對向量進(jìn)行整體的計(jì)算時(shí),表現(xiàn)出其他語言難以表現(xiàn)出的高效率,,但是對于向量中的單個(gè)元素,,或是將向量作為單個(gè)的循環(huán)變量來處理時(shí),其處理過程相當(dāng)?shù)膹?fù)雜,。
% p4 D; S, V% `* Z2.封裝性不好,。
& r6 }9 N0 g) R0 ?+ Z一方面,所有的變量均保存在公共工作區(qū)中,,任何語句都可以調(diào)用,。另一方面,作為一個(gè)完備的軟件,,而不是實(shí)現(xiàn)算法的程序,,編程人員在使用MATLAB時(shí)需要花相當(dāng)多的時(shí)間考慮如何設(shè)計(jì)用戶界面。. o7 E. U1 L6 U6 d
本文為大家列舉了機(jī)器人編程比較熱門的5種語言,,但這并不意味著需要全部掌握,,對于開發(fā)者來說,發(fā)現(xiàn)一種對自身來說很自然的語言更為重要,,且適合你的機(jī)器人硬件,,使你能快速上手。在這里建議先學(xué)習(xí)Python,,Python是一門相對簡單易懂的語言,,有許多有效的庫可供學(xué)習(xí),且功能非常強(qiáng)大,。
* ~# J! R: t: \8 f# |! b7 P! G. X" W# H) [6 ^% {3 l+ I+ B, A
. w% ~% A! F6 L& h! R
|
|