機(jī)械社區(qū)

標(biāo)題: 機(jī)器人有哪些熱門編程語(yǔ)言? [打印本頁(yè)]

作者: SLAMTEC思嵐科技    時(shí)間: 2019-3-1 14:41
標(biāo)題: 機(jī)器人有哪些熱門編程語(yǔ)言?

# r" v1 X5 X8 u; U4 j機(jī)器人編程語(yǔ)言最早于20世紀(jì)70年代初期問世,到目前為止已有多種編程語(yǔ)言出現(xiàn),在眾多機(jī)器人編程語(yǔ)言中究竟哪種編程語(yǔ)言最好呢?這個(gè)問題困擾了很多新手學(xué)者,但遺憾的是,這是一個(gè)沒有準(zhǔn)確答案的問題,你問不同的人會(huì)得到不同的答案,對(duì)于機(jī)器人學(xué)者來(lái)說(shuō)建立“編程思維“才是最關(guān)鍵的,而不是用一種特定語(yǔ)言去衡量,在很多方面,學(xué)習(xí)哪種機(jī)器人編程語(yǔ)言并不是最重要的,重要的是通過(guò)編程思維來(lái)不斷提升自己的技能。
5 O: A/ v1 c6 [: J0 O+ ^回到本文主題,我們將為大家介紹機(jī)器人研發(fā)中比較主流的5種機(jī)器人編程語(yǔ)言,并對(duì)他們的優(yōu)缺點(diǎn)進(jìn)行分析。$ D: i  ?/ |  y! ^

, Z2 e7 [5 k# v; p! {+ I7 u一、Python——一種動(dòng)態(tài)的、面向?qū)ο蟮哪_本語(yǔ)言
) p  E4 {- w% T% U! n在機(jī)器人研究領(lǐng)域,Python 占據(jù)了重要地位。其中一個(gè)原因很可能是 Python(和C ++)是ROS中的兩種主要編程語(yǔ)言。像JAVA一樣,它是一種解釋性語(yǔ)言。但也不同于JAVA,Python 語(yǔ)言主要集中在可用性上。* R: ?+ [/ g$ n8 @# d+ k, y" q
; L% Z: E+ c  d2 q
Python優(yōu)點(diǎn):3 g0 g# d! ~2 {& V
1.更易入門: I5 Z, B; u# I, p0 A8 k! E) ]
Python程序簡(jiǎn)單易懂,初學(xué)者學(xué)Python更易入門且深入下去可編寫非常復(fù)雜的程序,且開發(fā)效率高,有非常強(qiáng)大的第三方庫(kù)。
' x" b+ t+ \; R  @$ @' d/ r2.高級(jí)語(yǔ)言
# T: G, v8 s3 \) S5 e& G# q. U9 _6 d當(dāng)你用Python語(yǔ)言編寫程序的時(shí)候,你無(wú)需考慮諸如如何管理你的程序使用的內(nèi)存一類的底層細(xì)節(jié)
4 w" m! q6 k7 p5 ], g3.可移植性% m$ |) C7 u( U9 ^' k: n7 |8 N7 V
由于它的開源本質(zhì),Python已經(jīng)被移植在許多平臺(tái)上(經(jīng)過(guò)改動(dòng)使它能夠工 作在不同平臺(tái)上)。如果你小心地避免使用依賴于系統(tǒng)的特性,那么所有Python程序無(wú)需修改就幾乎可以在市場(chǎng)上所有的系統(tǒng)平臺(tái)上運(yùn)行& S  n& J; O! i& k  a9 }! y
4.可擴(kuò)展性
; J& J; s2 y3 v# D; @' M& Q如果需要一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開,就可將部分程序用C或C++編寫,然后在你的Python程序中使用它們。. }' y3 o* {. C) W! q

6 I, R! I% a0 T7 iPython缺點(diǎn):1 _% a4 A- Q% `2 ^5 F# u
1.運(yùn)行速度慢
' j' g4 q& e2 r9 X6 ]& e  i8 DPython的運(yùn)行速度相比C語(yǔ)言確實(shí)慢很多,跟JAVA相比也要慢一些。
2 j9 b& O+ O6 K5 f2.線程不能利用多CPU問題+ d1 j0 t: K$ |$ q# F
這是Python被人詬病最多的一個(gè)缺點(diǎn)。- T  f  F2 d  b) C7 D, T: E
! ^' y7 m$ O( N7 K) B7 X: m
二、C /C ++——大多數(shù)中國(guó)程序員的第一個(gè)語(yǔ)言& o5 {2 V3 q% \# |. K. f
C++語(yǔ)言是從C語(yǔ)言發(fā)展過(guò)來(lái)的,是一門面向?qū)ο蟮恼Z(yǔ)言,它繼承了C語(yǔ)言的優(yōu)勢(shì)。很多人都認(rèn)為 C 和 C ++ 對(duì)機(jī)器人科學(xué)家來(lái)說(shuō)是一個(gè)很好的開端。因?yàn)榇蟛糠值挠布䦷?kù)使用這些語(yǔ)言,允許實(shí)時(shí)性能,是非常成熟的編程語(yǔ)言。& H$ u6 b  J) {4 w, [
C /C ++優(yōu)點(diǎn):
2 ~* n# O  g4 t1.跨平臺(tái)性好
7 e, m$ w( w( D& A( A$ ^C/C++可以潛入任何現(xiàn)代處理器中,幾乎所有的操作系統(tǒng)都支持,跨平臺(tái)性非常好。
: |  r% R2 R4 ]( z& n2.運(yùn)行效率高
& f' F* W4 k2 d; }& w& a$ E3 _C語(yǔ)言體型小巧,簡(jiǎn)潔高效并且接近匯編語(yǔ)言,C++功能在C的基礎(chǔ)上增加面向?qū)ο蟮奶攸c(diǎn),代碼可讀性好,運(yùn)行效率高。
0 G4 o0 J7 G- _: t3.語(yǔ)言簡(jiǎn)潔,編寫風(fēng)格自由
: F% j& R- q* T兼有高級(jí)語(yǔ)言與匯編語(yǔ)言的優(yōu)點(diǎn),語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活豐富的運(yùn)算符和數(shù)據(jù)類型,能訪問內(nèi)存地址和位操作等硬件底層操作,生成的目標(biāo)代碼質(zhì)量高。; h( C# L# p# K, ~- |9 e
4 O$ `+ X9 M3 @$ s+ e  B8 b
C/C++缺點(diǎn):$ e! x6 j: |! \* I) P. I+ Z/ d
1.無(wú)垃圾回收機(jī)制
: t6 _! D, J9 n- W( R2 X/ {相對(duì)于JAVA來(lái)說(shuō),沒有垃圾回收機(jī)制,容易引發(fā)內(nèi)存泄露* u7 o% s: }4 h& m! B2 M' u2 o: {; ?0 z
2.學(xué)習(xí)較困難
; l* _0 m$ }" q& V* u* m從應(yīng)用的角度,C語(yǔ)言比其他高級(jí)語(yǔ)言較難掌握。也就是說(shuō),對(duì)用C語(yǔ)言的人,要求對(duì)程序設(shè)計(jì)更熟練一些。
* y* k9 k$ u# K# N  {$ I3.?dāng)?shù)據(jù)安全性上有缺陷4 d/ B  r9 U% s. R; E; F0 B; F
C語(yǔ)言的缺點(diǎn)主要表現(xiàn)在數(shù)據(jù)的封裝性上,這一點(diǎn)使得C在數(shù)據(jù)的安全性上有很大缺陷,這也是C和C++的一大區(qū)別!
3 D" M# A. d2 [0 v) g: H* j; O# c5 Q, J* C  G
三、JAVA——世界上使用范圍最廣的語(yǔ)言
& ^: K: c+ R* o" _; Z! J; AJAVA語(yǔ)法規(guī)則和C++類似,從某種意義上來(lái)說(shuō),JAVA是由C和C++語(yǔ)言轉(zhuǎn)變而來(lái)的。像C#和MATLAB一樣,JAVA是一種解釋性語(yǔ)言,這意味著它不會(huì)被合并到機(jī)器語(yǔ)言代碼中。相反,JAVA虛擬機(jī)在運(yùn)行時(shí)解釋指令。理論上來(lái)說(shuō),基于JAVA虛擬機(jī),使用JAVA可以在不同機(jī)器上使用類似的代碼。但實(shí)際上,這并不普遍使用,有時(shí)會(huì)導(dǎo)致代碼運(yùn)行緩慢,但是JAVA編程語(yǔ)言在機(jī)器人研究中非常流行。. ]# E( p( D( s; O( X& O
JAVA優(yōu)點(diǎn):2 z2 T. T* u4 E, k& i% I8 [8 W
1.更易學(xué)習(xí)6 I: o) _8 A# n
由于JAVA語(yǔ)言與C語(yǔ)言和C++語(yǔ)言比較接近,使大多數(shù)程序員學(xué)起來(lái)更簡(jiǎn)單。
. y6 L) K; Y& p( z' \2 O2.支持動(dòng)態(tài)綁定9 z& G5 ~+ |2 }& m* _' L
JAVA語(yǔ)言全面支持動(dòng)態(tài)綁定,而C++語(yǔ)言只對(duì)虛函數(shù)使用動(dòng)態(tài)綁定。
) N1 g8 Q- M4 I! ~+ T5 |3.支持Internet應(yīng)用開發(fā)" s1 M# h# L* Q, c0 m
JAVA語(yǔ)言支持Internet應(yīng)用的開發(fā),在基本的JAVA應(yīng)用編程接口中有一個(gè)網(wǎng)絡(luò)應(yīng)用編程接口(JAVA.net),它提供了用于網(wǎng)絡(luò)應(yīng)用編程的類庫(kù),包括URL、URLConnection、Socket、ServerSocket等。9 A( P  m, P" h! `0 ^' ]
4.更安全$ u/ o$ E( _' m* Z7 S2 O/ D. c
JAVA語(yǔ)言提供了一個(gè)安全機(jī)制以防止惡意代碼的共計(jì),相對(duì)來(lái)說(shuō)更安全。
# D5 ]7 U* z: Y, I; s& @5.具有可移植性7 m7 G! k* A- r6 l! d
JAVA語(yǔ)言是可移植的,這種可移植性來(lái)源于體系結(jié)構(gòu)中立性,另外,JAVA還嚴(yán)格規(guī)定了各個(gè)基本數(shù)據(jù)類型的長(zhǎng)度。6 V- a; n- g4 a6 O' w. g( o4 K

$ w8 j- z- B" n2 {; s/ \% ZJAVA缺點(diǎn):6 \. ~1 o0 A) f$ y
1.運(yùn)行需要安裝JAVA虛擬機(jī)/ R8 B8 M$ u6 t7 h+ Y; H
JAVA語(yǔ)言最大的缺點(diǎn)就是運(yùn)行JAVA程序需要裝JAVA虛擬機(jī),就這一條嚴(yán)重的影響了JAVA應(yīng)用程序的使用,基本看不到JAVA的應(yīng)用程序。
- Q( {0 C: |0 t2 t* z" }& M2.運(yùn)行成本較高$ p; f. l4 h) d+ V
另外JAVA程序的運(yùn)行成本比較高,過(guò)去機(jī)器配置不夠高的時(shí)候,JAVA顯得很慢現(xiàn)在隨著JAVA本身的版本升級(jí)和電腦性能的強(qiáng)化這條基本已經(jīng)不是問題了。
( c7 [* X' s5 z& y7 V. A  L* I8 G) H' Q: u3 i
四、C#/.NET——微軟提供的一種限制性編程語(yǔ)言
% D7 J- N9 L+ {7 oC#/ .NET很大程度上是為微軟機(jī)器人工程師工作室提供的,微軟機(jī)器人工程師工作室將其作為基本語(yǔ)言。如果使用這個(gè)框架,就必須學(xué)習(xí) C#。
1 a+ `/ m9 }3 P- f4 y. t* p! z& `) Q  A
C#/.NET優(yōu)點(diǎn):0 P: ^" r- n% ]- l, Q
1.強(qiáng)大的.Net Framework托管代碼集合類% H' s0 {- T- w: s
,封裝了大多數(shù)windows上使用的技術(shù)組件類, 文件系統(tǒng),UI界面,數(shù)據(jù)源訪問,網(wǎng)絡(luò)訪問,COM互操作(圖形圖像多媒體,WPF圖形系統(tǒng)),沒有的可以通過(guò).net的平臺(tái)調(diào)用win API函數(shù)來(lái)得到。, L! u" n3 }* y0 a1 L$ T2 M! ?0 u
2.較簡(jiǎn)單的語(yǔ)言特性
7 O  V$ T( r3 ^8 G3 {自動(dòng)內(nèi)存管理, 單繼承,支持事件、委托、屬性、Linq等一系列讓業(yè)務(wù)開發(fā)更簡(jiǎn)單的功能。) V7 }! i% g3 o* ]2 Q# L
3.Web應(yīng)用程序開發(fā)速度快! G% v* w4 |: _/ u3 K& t9 ^, y
Web應(yīng)用程序開發(fā)速度快(.net框架的支持,控件可以拖拉(UI方便編輯和定位),添加事件(跳轉(zhuǎn)到控制邏輯層),ADO.net數(shù)據(jù)源訪問, xml 網(wǎng)絡(luò)類庫(kù), windows服務(wù))。
- z* Z) I1 w1 O0 B6 E4.和語(yǔ)言平臺(tái)無(wú)關(guān)的編譯機(jī)制及較快的運(yùn)行速度
+ M. A) o1 @, Q/ C& B; ^& M0 J: g/ ^和語(yǔ)言平臺(tái)無(wú)關(guān)的編譯機(jī)制,及較快的運(yùn)行速度(ms不推薦, mono的 Xamarin, Unity還不錯(cuò)):編譯成IL中間語(yǔ)言,CLR公共語(yǔ)言運(yùn)行庫(kù)托管代碼,CLR根據(jù)運(yùn)行時(shí)程序需要將IL中間語(yǔ)言用JIT即時(shí)編譯方式編譯為內(nèi)部機(jī)器代碼,對(duì)編譯好的機(jī)器代碼緩存起來(lái),提高了程序速度。
. S% I% N: N: g, j5.代碼安全性
! k+ w0 d! E+ y0 Z  L2 w) awindow是基于角色的安全機(jī)制,.net提供了基于代碼的安全機(jī)制,由于中間語(yǔ)言提供了類型安全性,CLR在運(yùn)行前檢查代碼,確定是否有需要的安全權(quán)限,CLR沒有權(quán)限則不能執(zhí)行該代碼。
3 e: \! |$ i, Q
" u* p  w; q4 n$ j3 t! `C#/.NET缺點(diǎn):
2 v8 ^+ \- d/ l) x1 n9 C4 j1.底層和高性能不合適, u1 \. e$ j1 V! x  F
不合適做時(shí)間性能很高(高速算法)或空間性能很靈活(內(nèi)存立即釋放)的程序,因?yàn)橹虚g語(yǔ)言和編譯過(guò)程,比C/C++Native類型的語(yǔ)言會(huì)慢一些,內(nèi)存自動(dòng)回收難以立即釋放不需要的內(nèi)存,不采用內(nèi)聯(lián)函數(shù)和析構(gòu)函數(shù)(不建議)。
7 K+ p6 \3 V  K1 G  u/ P2.Windows平臺(tái)以外支持有限
& x4 x* i  B' M! Lmono不夠成熟好用,window以外Java,Python等是很強(qiáng)大和同樣優(yōu)秀的。3 M- y6 r) p# w/ ]8 `/ y% t9 i3 @# V

: A3 l, S3 ^+ l& o# }3 `五、MATLAB——一種面向數(shù)值計(jì)算的高級(jí)程序設(shè)計(jì)語(yǔ)言
! D3 Q4 s+ k3 j' PMATLAB和它的開源親戚(例如Octave)在一些機(jī)器人專家中非常有名,是他們負(fù)責(zé)調(diào)查數(shù)據(jù)和創(chuàng)建控制系統(tǒng)常用的語(yǔ)言。還有一個(gè)非常有名的MATLAB機(jī)器人工具箱。使用MATLAB單獨(dú)創(chuàng)建整個(gè)機(jī)器人系統(tǒng)的人員。如需要分解數(shù)據(jù),創(chuàng)建高級(jí)圖表或執(zhí)行控制系統(tǒng),那就很可能需要學(xué)習(xí)MATLAB。
8 B9 @: o1 O: X/ j; }* v" e4 X, F
MATLAB優(yōu)點(diǎn):$ M1 a7 m9 w$ d7 A( @9 K1 N
1.編程效率高
. u. m9 w1 x. U& f3 K+ n* U6 l0 Q: jMATLAB語(yǔ)言為演算紙式科學(xué)算法語(yǔ)言,由于它編程簡(jiǎn)單,所以編程效率高,易學(xué)易懂。
, ?; M' i* l" }2.高效方便的矩陣和數(shù)組運(yùn)算
' x2 L5 j0 v( `+ u! gMATLAB語(yǔ)言像BASIC、C語(yǔ)言一樣規(guī)定了矩陣的算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、條件運(yùn)算符及賦值運(yùn)算符,而且這些運(yùn)算符大部分可以毫無(wú)改變的照搬到數(shù)組建的運(yùn)算中。' W. P6 N) M9 j! B4 s4 \- r7 b
MATLAB缺點(diǎn):6 V$ ]+ x5 W9 `! ^7 x
1.循環(huán)運(yùn)算效率低。
- s5 ]/ C, ^$ @8 j( j4 d. \MATLAB中所有的變量均為向量形式,這樣一方面在對(duì)向量進(jìn)行整體的計(jì)算時(shí),表現(xiàn)出其他語(yǔ)言難以表現(xiàn)出的高效率,但是對(duì)于向量中的單個(gè)元素,或是將向量作為單個(gè)的循環(huán)變量來(lái)處理時(shí),其處理過(guò)程相當(dāng)?shù)膹?fù)雜。. w5 c1 u" v: w0 _
2.封裝性不好。
( R& E6 M% c7 p一方面,所有的變量均保存在公共工作區(qū)中,任何語(yǔ)句都可以調(diào)用。另一方面,作為一個(gè)完備的軟件,而不是實(shí)現(xiàn)算法的程序,編程人員在使用MATLAB時(shí)需要花相當(dāng)多的時(shí)間考慮如何設(shè)計(jì)用戶界面。, n& ]- _, p; m; m
本文為大家列舉了機(jī)器人編程比較熱門的5種語(yǔ)言,但這并不意味著需要全部掌握,對(duì)于開發(fā)者來(lái)說(shuō),發(fā)現(xiàn)一種對(duì)自身來(lái)說(shuō)很自然的語(yǔ)言更為重要,且適合你的機(jī)器人硬件,使你能快速上手。在這里建議先學(xué)習(xí)Python,Python是一門相對(duì)簡(jiǎn)單易懂的語(yǔ)言,有許多有效的庫(kù)可供學(xué)習(xí),且功能非常強(qiáng)大。  R3 `6 d, i/ s! e' w
; x0 I8 E7 i+ x! p

, R) p& H: v3 w# Q2 v
作者: 前景錢    時(shí)間: 2019-3-1 16:59
自問自答
作者: KingL    時(shí)間: 2019-3-7 21:31

作者: KingL    時(shí)間: 2019-3-7 21:31
樓主真厲害
作者: 風(fēng)中不眠的燭火    時(shí)間: 2019-3-14 10:44
python感覺不適合新手,只能會(huì)用,但不知道為什么,只好轉(zhuǎn)學(xué)c++了?
作者: 鄧技師    時(shí)間: 2019-4-22 12:24
C++和Python吧。
作者: 奔跑run    時(shí)間: 2019-4-23 18:02
大大的贊,就一個(gè)字
作者: 咚咚嚨咚嗆    時(shí)間: 2019-4-24 13:52
個(gè)人比較喜歡Python
作者: jhon891    時(shí)間: 2019-4-25 18:39

$ y  i& T( t( x樓主真厲害




歡迎光臨 機(jī)械社區(qū) (http://www.mg7058.com/) Powered by Discuz! X3.4