|
4 @. O2 c8 ^6 L& v+ Q机器人编程语言最早于20世纪70年代初期问世,到目前为止已有多种编程语言出现,在众多机器人编程语言中究竟哪种编程语言最好呢?这个问题困扰了很多新手学者,但遗憾的是,这是一个没有准确答案的问题,你问不同的人会得到不同的答案,对于机器人学者来说建立“编程思维“才是最关键的,而不是用一种特定语言去衡量,在很多方面,学习哪种机器人编程语言并不是最重要的,重要的是通过编程思维来不断提升自己的技能。
8 a0 e3 }( ~2 z. j回到本文主题,我们将为大家介绍机器人研发中比较主流的5种机器人编程语言,并对他们的优缺点进行分析。7 H4 h3 v7 M- [5 `( _
e9 i. _7 x% d8 j0 n一、Python——一种动态的、面向对象的脚本语言
. c- w7 f' o) ` B7 A+ K5 o5 ]在机器人研究领域,Python 占据了重要地位。其中一个原因很可能是 Python(和C ++)是ROS中的两种主要编程语言。像JAVA一样,它是一种解释性语言。但也不同于JAVA,Python 语言主要集中在可用性上。. ^9 h! H0 l$ R2 [( i5 _
G' w w' t4 N& [. F1 e2 cPython优点:
6 u' X+ Y4 b8 F8 m" D1.更易入门$ ~% p' W1 F, X- n& x
Python程序简单易懂,初学者学Python更易入门且深入下去可编写非常复杂的程序,且开发效率高,有非常强大的第三方库。
; M. D0 g) J) w0 G4 S% z5 g& x" ]2.高级语言
3 T- M2 u& P0 h/ n* o s! K当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节
/ Y2 J; i% |2 b+ u f: e- G' B3.可移植性8 y1 Z4 S8 D: @3 d
由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行
' i) {* o z) U) D( B, V9 I! M4.可扩展性; [2 a$ H- } J
如果需要一段关键代码运行得更快或者希望某些算法不公开,就可将部分程序用C或C++编写,然后在你的Python程序中使用它们。
1 K. ] A5 r: O6 h& a5 V) U0 x; x- g, j5 M6 w; c- j# h" m3 X
Python缺点:
; \! b2 b f4 @& @: t1.运行速度慢6 U* c/ I7 d6 ^/ g3 I; J
Python的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些。/ {: `/ y1 c* ]" e! [( ~5 _2 I" |# L
2.线程不能利用多CPU问题
+ b; G8 _$ X: L1 F. O9 f# K. f这是Python被人诟病最多的一个缺点。' x" H7 D+ m& H
( L1 k" M4 i& R% }* [+ X) W* _二、C /C ++——大多数中国程序员的第一个语言0 ^/ N" @# ~& O% [
C++语言是从C语言发展过来的,是一门面向对象的语言,它继承了C语言的优势。很多人都认为 C 和 C ++ 对机器人科学家来说是一个很好的开端。因为大部分的硬件库使用这些语言,允许实时性能,是非常成熟的编程语言。# L4 [# Q( O, r
C /C ++优点:
2 _" }$ ^3 u' I( A; @/ {1.跨平台性好5 y) o7 P! j% p# e. Q7 N
C/C++可以潜入任何现代处理器中,几乎所有的操作系统都支持,跨平台性非常好。
8 }8 m4 i; e4 p/ b+ V3 H2.运行效率高" c4 j q! h( z# L) j; D% M6 a
C语言体型小巧,简洁高效并且接近汇编语言,C++功能在C的基础上增加面向对象的特点,代码可读性好,运行效率高。; E1 e+ V' Y! P1 j% I) P
3.语言简洁,编写风格自由
3 G- g) f6 s& a# C& U( K t兼有高级语言与汇编语言的优点,语言简洁、紧凑,使用方便、灵活丰富的运算符和数据类型,能访问内存地址和位操作等硬件底层操作,生成的目标代码质量高。. C% k" T* A9 ?& t* t/ L
- s( p( s9 p# y+ z$ G- O
C/C++缺点:/ L/ E& h! r5 `2 I' X6 d- }% X
1.无垃圾回收机制' O0 S" q: l8 H% P3 \
相对于JAVA来说,没有垃圾回收机制,容易引发内存泄露5 Z" M/ \, L1 O7 n; |
2.学习较困难
+ N3 O) H% X, U/ ?9 _从应用的角度,C语言比其他高级语言较难掌握。也就是说,对用C语言的人,要求对程序设计更熟练一些。
4 Y* ^6 v7 a- U3.数据安全性上有缺陷0 P [! d/ Z$ `( {
C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。
$ X& D4 V9 G k: d3 X
2 d+ }5 G% e' m2 l& N9 \6 I三、JAVA——世界上使用范围最广的语言$ @* P5 z8 g' \! k4 o& S
JAVA语法规则和C++类似,从某种意义上来说,JAVA是由C和C++语言转变而来的。像C#和MATLAB一样,JAVA是一种解释性语言,这意味着它不会被合并到机器语言代码中。相反,JAVA虚拟机在运行时解释指令。理论上来说,基于JAVA虚拟机,使用JAVA可以在不同机器上使用类似的代码。但实际上,这并不普遍使用,有时会导致代码运行缓慢,但是JAVA编程语言在机器人研究中非常流行。0 a# D. T, {8 E5 Z S7 D, W* s
JAVA优点:
5 K* `0 H1 o' d. n' ~1.更易学习+ x6 n0 s9 }. ]7 S3 m
由于JAVA语言与C语言和C++语言比较接近,使大多数程序员学起来更简单。
`6 f" ~# Y5 ~$ x2 q" b2.支持动态绑定
7 p, O! r4 T( i- p1 S1 h, vJAVA语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。
$ ^7 @# |$ k. \+ \3.支持Internet应用开发
# J- g9 ~' V& g- X. z5 S# \5 iJAVA语言支持Internet应用的开发,在基本的JAVA应用编程接口中有一个网络应用编程接口(JAVA.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。3 a7 j, {* s1 |# n3 }
4.更安全) U0 n7 G) U) A" o/ C
JAVA语言提供了一个安全机制以防止恶意代码的共计,相对来说更安全。6 B9 G X* M! f
5.具有可移植性
$ g- L1 A/ C$ k* {& DJAVA语言是可移植的,这种可移植性来源于体系结构中立性,另外,JAVA还严格规定了各个基本数据类型的长度。
! a% h1 r1 G# C+ K) ~$ g( p4 a# x% O m$ n0 y% Z
JAVA缺点:
) q* Q, t1 h6 {8 y+ J1.运行需要安装JAVA虚拟机# `, ]9 `: ~" ?0 {
JAVA语言最大的缺点就是运行JAVA程序需要装JAVA虚拟机,就这一条严重的影响了JAVA应用程序的使用,基本看不到JAVA的应用程序。
) X2 O$ K( b$ b5 B" |4 E* l2.运行成本较高- \4 e, p/ W# _0 ~* T/ x
另外JAVA程序的运行成本比较高,过去机器配置不够高的时候,JAVA显得很慢现在随着JAVA本身的版本升级和电脑性能的强化这条基本已经不是问题了。
; T5 _! m5 s: k' `1 u/ A7 A+ g7 y ], E7 B6 ~% U3 r4 p' k5 ~7 A
四、C#/.NET——微软提供的一种限制性编程语言
8 P# p' S Q* f8 Y, {2 K! |C#/ .NET很大程度上是为微软机器人工程师工作室提供的,微软机器人工程师工作室将其作为基本语言。如果使用这个框架,就必须学习 C#。 z# e6 e8 b: k
C#/.NET优点:
- m2 Z B/ ^. S9 u0 U) d1.强大的.Net Framework托管代码集合类
( D- s* w! d% _$ K7 h( V,封装了大多数windows上使用的技术组件类, 文件系统,UI界面,数据源访问,网络访问,COM互操作(图形图像多媒体,WPF图形系统),没有的可以通过.net的平台调用win API函数来得到。( y5 ]. n! x/ P a4 T
2.较简单的语言特性, S- Y* n( d: R0 E5 ^' `1 G M
自动内存管理, 单继承,支持事件、委托、属性、Linq等一系列让业务开发更简单的功能。* u$ T1 N* G i2 Y" L% p; Z; Z
3.Web应用程序开发速度快
' m5 `% g" l$ K7 H5 [" v4 K* F3 xWeb应用程序开发速度快(.net框架的支持,控件可以拖拉(UI方便编辑和定位),添加事件(跳转到控制逻辑层),ADO.net数据源访问, xml 网络类库, windows服务)。7 q9 { P7 U; w9 D4 k
4.和语言平台无关的编译机制及较快的运行速度
2 S7 |+ W: J5 W# J. J1 s和语言平台无关的编译机制,及较快的运行速度(ms不推荐, mono的 Xamarin, Unity还不错):编译成IL中间语言,CLR公共语言运行库托管代码,CLR根据运行时程序需要将IL中间语言用JIT即时编译方式编译为内部机器代码,对编译好的机器代码缓存起来,提高了程序速度。: ^& l r" Y0 S( h. _
5.代码安全性5 _. V- R0 v5 [
window是基于角色的安全机制,.net提供了基于代码的安全机制,由于中间语言提供了类型安全性,CLR在运行前检查代码,确定是否有需要的安全权限,CLR没有权限则不能执行该代码。" p2 S/ b, }' T p( s* ?
. U9 S) P9 U! M% F; y) QC#/.NET缺点:
7 e. v9 `* o/ t3 R Q1.底层和高性能不合适0 @6 g( b9 I) }: k$ J8 b9 a
不合适做时间性能很高(高速算法)或空间性能很灵活(内存立即释放)的程序,因为中间语言和编译过程,比C/C++Native类型的语言会慢一些,内存自动回收难以立即释放不需要的内存,不采用内联函数和析构函数(不建议)。7 b. B( Q S9 t* n+ V& L( J
2.Windows平台以外支持有限
7 J9 B; D+ e }# N3 T% C1 L1 c" \# smono不够成熟好用,window以外Java,Python等是很强大和同样优秀的。
8 m2 P% i; ^: v9 [- O& S' p; v* S% ]" w2 _3 f1 o! Z" V; }2 v
五、MATLAB——一种面向数值计算的高级程序设计语言+ \' f& ?2 l2 V- f# t/ o0 e" N
MATLAB和它的开源亲戚(例如Octave)在一些机器人专家中非常有名,是他们负责调查数据和创建控制系统常用的语言。还有一个非常有名的MATLAB机器人工具箱。使用MATLAB单独创建整个机器人系统的人员。如需要分解数据,创建高级图表或执行控制系统,那就很可能需要学习MATLAB。6 |. E2 ]4 U O5 X& q) J
MATLAB优点:
5 L& s3 D% V. p2 B. V3 `4 R0 n1 l( C1.编程效率高# i; M8 v" u% r3 d! A
MATLAB语言为演算纸式科学算法语言,由于它编程简单,所以编程效率高,易学易懂。6 S6 n! q) [$ W2 Z" p
2.高效方便的矩阵和数组运算1 K. S& T0 ~' h3 O* d6 C
MATLAB语言像BASIC、C语言一样规定了矩阵的算术运算符、关系运算符、逻辑运算符、条件运算符及赋值运算符,而且这些运算符大部分可以毫无改变的照搬到数组建的运算中。
7 p# y7 d8 t: \. @/ k8 d( Z- UMATLAB缺点:
0 F v& I' J% i) }3 k2 D d1.循环运算效率低。& f& m- j- k# @, x& ]" G
MATLAB中所有的变量均为向量形式,这样一方面在对向量进行整体的计算时,表现出其他语言难以表现出的高效率,但是对于向量中的单个元素,或是将向量作为单个的循环变量来处理时,其处理过程相当的复杂。
( J7 n0 s7 j2 h" |6 a4 L5 Y2.封装性不好。- d; Q: @$ [4 f9 h
一方面,所有的变量均保存在公共工作区中,任何语句都可以调用。另一方面,作为一个完备的软件,而不是实现算法的程序,编程人员在使用MATLAB时需要花相当多的时间考虑如何设计用户界面。
; v( Q5 K2 ^" ?本文为大家列举了机器人编程比较热门的5种语言,但这并不意味着需要全部掌握,对于开发者来说,发现一种对自身来说很自然的语言更为重要,且适合你的机器人硬件,使你能快速上手。在这里建议先学习Python,Python是一门相对简单易懂的语言,有许多有效的库可供学习,且功能非常强大。
- G' m3 q; C. k$ R; L& Z
4 o* p. R. E* X' F. w* F( E1 ^
: V( h7 W& I3 f( U, ~1 b |
|