|
9 p, g7 H5 o4 ^- x, X
机器人编程语言最早于20世纪70年代初期问世,到目前为止已有多种编程语言出现,在众多机器人编程语言中究竟哪种编程语言最好呢?这个问题困扰了很多新手学者,但遗憾的是,这是一个没有准确答案的问题,你问不同的人会得到不同的答案,对于机器人学者来说建立“编程思维“才是最关键的,而不是用一种特定语言去衡量,在很多方面,学习哪种机器人编程语言并不是最重要的,重要的是通过编程思维来不断提升自己的技能。3 k5 v: u* k& \; w. }( P2 K
回到本文主题,我们将为大家介绍机器人研发中比较主流的5种机器人编程语言,并对他们的优缺点进行分析。
& |* C3 ~9 }* B
- M3 n4 R* ~- o* J, U0 T一、Python——一种动态的、面向对象的脚本语言2 `2 U( n( ]# L3 _. e
在机器人研究领域,Python 占据了重要地位。其中一个原因很可能是 Python(和C ++)是ROS中的两种主要编程语言。像JAVA一样,它是一种解释性语言。但也不同于JAVA,Python 语言主要集中在可用性上。! O/ t3 H8 o& }
# P# V @# A1 N( | M9 QPython优点:
6 Q) c& X; E1 ?4 `$ ?6 ~; {# u1.更易入门' b8 j8 s1 Z) V4 [$ s4 [! K0 s
Python程序简单易懂,初学者学Python更易入门且深入下去可编写非常复杂的程序,且开发效率高,有非常强大的第三方库。0 X/ ~9 R8 y J0 T+ ?
2.高级语言
3 C q; d2 P/ A7 z* c当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节
0 n1 x- f; b3 H8 P. T! w- K5 w- B- n3.可移植性* `$ E" u e+ I( r4 m! I
由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行
6 \1 G' l. }1 k9 L' [+ h4.可扩展性$ w. I0 }; v8 x) W4 C6 `# b
如果需要一段关键代码运行得更快或者希望某些算法不公开,就可将部分程序用C或C++编写,然后在你的Python程序中使用它们。
4 ~0 e4 M5 o& y( h7 _* l9 X
' x9 P; Q8 J6 S6 m! Q. I. n; b# IPython缺点:, h5 |/ M' T. r8 ~' r+ T
1.运行速度慢& u8 O& \! N9 u2 L. I( r4 q
Python的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些。
+ B O& s' z3 s7 N$ q2.线程不能利用多CPU问题" q J+ w' P! o- T7 i# R
这是Python被人诟病最多的一个缺点。1 r: a) U) [5 c1 b; Y/ c- s7 ^
" p4 o* W8 R' }, Z: H. b二、C /C ++——大多数中国程序员的第一个语言
# J# G( f8 g3 BC++语言是从C语言发展过来的,是一门面向对象的语言,它继承了C语言的优势。很多人都认为 C 和 C ++ 对机器人科学家来说是一个很好的开端。因为大部分的硬件库使用这些语言,允许实时性能,是非常成熟的编程语言。
" U. T1 v0 a* mC /C ++优点:
' Y* t: l5 A. f; m$ q0 q1.跨平台性好1 c) |7 y) e8 j$ k$ o" B# X* y
C/C++可以潜入任何现代处理器中,几乎所有的操作系统都支持,跨平台性非常好。
, H3 N* a& K7 L' g5 r/ X7 n; ^2.运行效率高
, @4 O$ P- q" W$ p) TC语言体型小巧,简洁高效并且接近汇编语言,C++功能在C的基础上增加面向对象的特点,代码可读性好,运行效率高。' g- n n' Y5 g
3.语言简洁,编写风格自由5 o; r/ t9 j8 g L; f; g+ P1 m
兼有高级语言与汇编语言的优点,语言简洁、紧凑,使用方便、灵活丰富的运算符和数据类型,能访问内存地址和位操作等硬件底层操作,生成的目标代码质量高。
) C5 R) r1 m' a2 B6 _" C* K/ E- V8 H' e, \: |0 S1 N
C/C++缺点:. {7 |" ?9 |2 c' S3 `
1.无垃圾回收机制' k8 i4 O X6 @ C
相对于JAVA来说,没有垃圾回收机制,容易引发内存泄露+ S: Y, P/ R* y7 ^8 y* L( I
2.学习较困难
6 T8 Q! Z+ H; e! B* a! D从应用的角度,C语言比其他高级语言较难掌握。也就是说,对用C语言的人,要求对程序设计更熟练一些。8 S, r/ Q3 `, K+ [4 T o
3.数据安全性上有缺陷
5 s7 r3 B, g" @2 n- lC语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。
% v$ S# D! R. O! E, \3 v4 n
; X2 A% z# w) ]2 ^3 Z) i# G三、JAVA——世界上使用范围最广的语言
+ a: ^6 l# }0 {2 c2 UJAVA语法规则和C++类似,从某种意义上来说,JAVA是由C和C++语言转变而来的。像C#和MATLAB一样,JAVA是一种解释性语言,这意味着它不会被合并到机器语言代码中。相反,JAVA虚拟机在运行时解释指令。理论上来说,基于JAVA虚拟机,使用JAVA可以在不同机器上使用类似的代码。但实际上,这并不普遍使用,有时会导致代码运行缓慢,但是JAVA编程语言在机器人研究中非常流行。! D2 b( `" Q# B/ a9 ^+ o
JAVA优点:( s4 Q, O. }3 ]: K0 }
1.更易学习
( \7 `2 Q3 H7 T4 R7 I6 O- d由于JAVA语言与C语言和C++语言比较接近,使大多数程序员学起来更简单。
7 s: z8 q6 T2 \, G; J3 Q2.支持动态绑定
7 u; f$ V+ V( ^' ]JAVA语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。
* [- D$ ]! P, N# ?* E3.支持Internet应用开发* @- m; L4 j0 L( ~/ `# B8 t9 A7 b
JAVA语言支持Internet应用的开发,在基本的JAVA应用编程接口中有一个网络应用编程接口(JAVA.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。( Q0 f4 d) V; b" R. F
4.更安全
% G; B- `- D& mJAVA语言提供了一个安全机制以防止恶意代码的共计,相对来说更安全。3 y1 B) _8 F5 [! ?
5.具有可移植性; U; L. J/ w. O% D' z( A) m: e! x
JAVA语言是可移植的,这种可移植性来源于体系结构中立性,另外,JAVA还严格规定了各个基本数据类型的长度。
* `) c2 \, @3 T6 _
8 o# e- n6 W* }$ k( ~" ~6 D) ^9 j/ @JAVA缺点:
" K9 _9 z9 U; j" j& g9 J+ ^1.运行需要安装JAVA虚拟机- L; E9 Z1 L! p9 t% V5 f+ x' F# O
JAVA语言最大的缺点就是运行JAVA程序需要装JAVA虚拟机,就这一条严重的影响了JAVA应用程序的使用,基本看不到JAVA的应用程序。
+ N: Z/ @# Q* x- y2.运行成本较高; `7 E' t& |+ r7 c# H. I
另外JAVA程序的运行成本比较高,过去机器配置不够高的时候,JAVA显得很慢现在随着JAVA本身的版本升级和电脑性能的强化这条基本已经不是问题了。
' `8 B1 D8 a6 l# d% s
9 f% e6 Z( ]5 `3 E& i2 e四、C#/.NET——微软提供的一种限制性编程语言 Q+ W; \3 `7 h+ N* Z8 t
C#/ .NET很大程度上是为微软机器人工程师工作室提供的,微软机器人工程师工作室将其作为基本语言。如果使用这个框架,就必须学习 C#。
3 F7 f- ^1 N+ G( x+ C, @C#/.NET优点:
' r5 R! _' G& A1.强大的.Net Framework托管代码集合类
% R; n" c- Q5 U0 G6 C& R) m,封装了大多数windows上使用的技术组件类, 文件系统,UI界面,数据源访问,网络访问,COM互操作(图形图像多媒体,WPF图形系统),没有的可以通过.net的平台调用win API函数来得到。
4 X6 I" B8 B! Z) ^( Z2.较简单的语言特性0 U$ `2 {! |/ L" Y6 a
自动内存管理, 单继承,支持事件、委托、属性、Linq等一系列让业务开发更简单的功能。
) E* i3 l7 {/ j! h2 x0 c3.Web应用程序开发速度快; F, M _- _2 w2 k8 c _; d6 S- |
Web应用程序开发速度快(.net框架的支持,控件可以拖拉(UI方便编辑和定位),添加事件(跳转到控制逻辑层),ADO.net数据源访问, xml 网络类库, windows服务)。
0 ~, R' m6 g/ ~4 v9 b! T4.和语言平台无关的编译机制及较快的运行速度
( U! W1 P" ~7 E1 [( O& q和语言平台无关的编译机制,及较快的运行速度(ms不推荐, mono的 Xamarin, Unity还不错):编译成IL中间语言,CLR公共语言运行库托管代码,CLR根据运行时程序需要将IL中间语言用JIT即时编译方式编译为内部机器代码,对编译好的机器代码缓存起来,提高了程序速度。. d, x; } |+ o: H- w. p
5.代码安全性8 A8 b e; w E- d- r5 G1 g5 u
window是基于角色的安全机制,.net提供了基于代码的安全机制,由于中间语言提供了类型安全性,CLR在运行前检查代码,确定是否有需要的安全权限,CLR没有权限则不能执行该代码。' `$ O) f4 d2 L7 c* j, p, A
$ S3 B7 L6 G* s4 i- WC#/.NET缺点:2 l& B; S( j$ O% @
1.底层和高性能不合适. H8 C! I* ^. q
不合适做时间性能很高(高速算法)或空间性能很灵活(内存立即释放)的程序,因为中间语言和编译过程,比C/C++Native类型的语言会慢一些,内存自动回收难以立即释放不需要的内存,不采用内联函数和析构函数(不建议)。
* k' w4 K. M7 Y/ ?/ q h0 l ^4 I# D2.Windows平台以外支持有限( e( Y9 V0 R2 G) l& y0 f- v. C
mono不够成熟好用,window以外Java,Python等是很强大和同样优秀的。
# `/ O/ ~% }$ \5 z% q/ o% R+ e; [8 X1 D/ W) f% h, V6 i8 a# B k8 z
五、MATLAB——一种面向数值计算的高级程序设计语言$ I8 ?' C: \0 Y
MATLAB和它的开源亲戚(例如Octave)在一些机器人专家中非常有名,是他们负责调查数据和创建控制系统常用的语言。还有一个非常有名的MATLAB机器人工具箱。使用MATLAB单独创建整个机器人系统的人员。如需要分解数据,创建高级图表或执行控制系统,那就很可能需要学习MATLAB。
5 B& u% P- z, F2 ~+ m' G& SMATLAB优点:1 V" ] a7 G; s) ?* P; b0 ?0 N
1.编程效率高
" A4 G; O( a/ L* P; A7 p" iMATLAB语言为演算纸式科学算法语言,由于它编程简单,所以编程效率高,易学易懂。+ o" `3 t0 s' L
2.高效方便的矩阵和数组运算
0 u) c2 K% ? W! k8 ]MATLAB语言像BASIC、C语言一样规定了矩阵的算术运算符、关系运算符、逻辑运算符、条件运算符及赋值运算符,而且这些运算符大部分可以毫无改变的照搬到数组建的运算中。: W. r# Q" W% O3 S( Y8 c; V" q
MATLAB缺点:
# Y3 Z7 X7 H: T8 S, }" z1.循环运算效率低。0 i+ b5 d/ d2 |' O7 ~2 Q9 u1 C- n3 ?
MATLAB中所有的变量均为向量形式,这样一方面在对向量进行整体的计算时,表现出其他语言难以表现出的高效率,但是对于向量中的单个元素,或是将向量作为单个的循环变量来处理时,其处理过程相当的复杂。0 I% E. V6 L) Q4 K
2.封装性不好。# l& ^+ ^ w7 l+ \$ w
一方面,所有的变量均保存在公共工作区中,任何语句都可以调用。另一方面,作为一个完备的软件,而不是实现算法的程序,编程人员在使用MATLAB时需要花相当多的时间考虑如何设计用户界面。
6 n0 Q* o' {8 G7 |, Y本文为大家列举了机器人编程比较热门的5种语言,但这并不意味着需要全部掌握,对于开发者来说,发现一种对自身来说很自然的语言更为重要,且适合你的机器人硬件,使你能快速上手。在这里建议先学习Python,Python是一门相对简单易懂的语言,有许多有效的库可供学习,且功能非常强大。
& E o. l" L# ~, p8 s. i/ `8 ^9 b1 e
. e! P; O2 u5 J/ E+ v, A. B/ k6 h9 u4 ^' x0 u) y$ Q9 r
|
|