|
8 f/ }* J4 W2 a& U4 Z' D
机器人编程语言最早于20世纪70年代初期问世,到目前为止已有多种编程语言出现,在众多机器人编程语言中究竟哪种编程语言最好呢?这个问题困扰了很多新手学者,但遗憾的是,这是一个没有准确答案的问题,你问不同的人会得到不同的答案,对于机器人学者来说建立“编程思维“才是最关键的,而不是用一种特定语言去衡量,在很多方面,学习哪种机器人编程语言并不是最重要的,重要的是通过编程思维来不断提升自己的技能。
2 o+ p+ Y# c% ?回到本文主题,我们将为大家介绍机器人研发中比较主流的5种机器人编程语言,并对他们的优缺点进行分析。
/ \* B8 f( `4 t7 g" }$ j, H" j! y, H% {8 b# k+ D6 j' J. F& {. }
一、Python——一种动态的、面向对象的脚本语言
6 L6 c. E/ a% B9 E* c在机器人研究领域,Python 占据了重要地位。其中一个原因很可能是 Python(和C ++)是ROS中的两种主要编程语言。像JAVA一样,它是一种解释性语言。但也不同于JAVA,Python 语言主要集中在可用性上。 S q8 f$ a: I
" R6 l( l) T6 n% Y/ y" k5 h# p9 j. @Python优点:
. ^' y6 Y8 Y( T1 I1.更易入门
3 b4 T9 }( R6 c. z/ m rPython程序简单易懂,初学者学Python更易入门且深入下去可编写非常复杂的程序,且开发效率高,有非常强大的第三方库。
4 \; V( f2 l- b. y! ~5 @: i" Z2.高级语言
s5 ]. ]4 _) |' y& e当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节7 O! q1 e4 l1 {( [: Q( u. V
3.可移植性% }7 @9 U0 v/ D
由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行
' A I" N: J/ C4.可扩展性
7 v3 H9 ]) V, T1 H( E如果需要一段关键代码运行得更快或者希望某些算法不公开,就可将部分程序用C或C++编写,然后在你的Python程序中使用它们。$ L8 Q! g0 O1 L U* T7 J; P
, [' ~# q! ?8 E! \. z# v/ q
Python缺点:, j) ^7 K$ t7 X; b; U: q U5 E
1.运行速度慢
$ c4 W$ W# d9 S/ d5 N$ O1 }8 {Python的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些。2 F/ p& ?; a/ D+ s+ C P$ c
2.线程不能利用多CPU问题
* e7 |, ?0 f( `! n: g这是Python被人诟病最多的一个缺点。/ Y' t5 g( p: }. P
/ E5 w! \ b0 b$ q! v" S二、C /C ++——大多数中国程序员的第一个语言
- y# ^& F, i+ h' uC++语言是从C语言发展过来的,是一门面向对象的语言,它继承了C语言的优势。很多人都认为 C 和 C ++ 对机器人科学家来说是一个很好的开端。因为大部分的硬件库使用这些语言,允许实时性能,是非常成熟的编程语言。; c4 a7 N) M2 k/ {* ]. m/ A% \
C /C ++优点:. Y9 ^: A6 G7 v" h: {* ]
1.跨平台性好
* Z; ~$ J S E9 sC/C++可以潜入任何现代处理器中,几乎所有的操作系统都支持,跨平台性非常好。
) q k ?0 t6 s/ _2.运行效率高
: Q' ?6 l3 z! _: N! s6 YC语言体型小巧,简洁高效并且接近汇编语言,C++功能在C的基础上增加面向对象的特点,代码可读性好,运行效率高。0 O# Z9 J0 M) ~; C
3.语言简洁,编写风格自由
# ~( i5 n0 U, o0 V7 ^! q兼有高级语言与汇编语言的优点,语言简洁、紧凑,使用方便、灵活丰富的运算符和数据类型,能访问内存地址和位操作等硬件底层操作,生成的目标代码质量高。
$ }2 A5 E; @1 q$ h3 {
2 _ s9 e' Y% u4 tC/C++缺点:5 L; D; Y3 T( x3 J+ }; P
1.无垃圾回收机制
8 B9 T& a/ Y8 w( ^+ R相对于JAVA来说,没有垃圾回收机制,容易引发内存泄露
: b5 r$ R# I! E/ g% {6 \# P; G' [8 ^6 X2.学习较困难' g$ i! s/ K$ y. H; W
从应用的角度,C语言比其他高级语言较难掌握。也就是说,对用C语言的人,要求对程序设计更熟练一些。& A0 `0 c( y" Y$ F( N: ?# G
3.数据安全性上有缺陷
( d6 G* \2 O3 Y0 J9 JC语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。 1 q2 j, ]" e2 |8 C, c6 `+ m
% i+ h: B( [+ ~6 j
三、JAVA——世界上使用范围最广的语言
9 |2 V# f3 f$ v) {1 f8 T" f( @) uJAVA语法规则和C++类似,从某种意义上来说,JAVA是由C和C++语言转变而来的。像C#和MATLAB一样,JAVA是一种解释性语言,这意味着它不会被合并到机器语言代码中。相反,JAVA虚拟机在运行时解释指令。理论上来说,基于JAVA虚拟机,使用JAVA可以在不同机器上使用类似的代码。但实际上,这并不普遍使用,有时会导致代码运行缓慢,但是JAVA编程语言在机器人研究中非常流行。
! \* I) K6 B Q% hJAVA优点:5 a Z6 L8 w* M* M2 s: S$ _
1.更易学习
7 `! v8 J8 w( Z9 F5 q; J由于JAVA语言与C语言和C++语言比较接近,使大多数程序员学起来更简单。
, Y/ a7 H! ^. ~' m- L p2.支持动态绑定) Q( V' o- b* \9 }8 X$ H" B; n
JAVA语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。2 J( F! D. X) \1 p
3.支持Internet应用开发
, n9 m$ i- Z: i- Z XJAVA语言支持Internet应用的开发,在基本的JAVA应用编程接口中有一个网络应用编程接口(JAVA.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。. ~( ^& @& i4 f: o& [; ~4 s
4.更安全/ w1 K4 \: |7 F3 {3 [
JAVA语言提供了一个安全机制以防止恶意代码的共计,相对来说更安全。
, s+ x& A' x+ O2 t$ C: K5.具有可移植性8 ?+ r8 H( V ~
JAVA语言是可移植的,这种可移植性来源于体系结构中立性,另外,JAVA还严格规定了各个基本数据类型的长度。
, y' {& [( G4 p% z/ g
6 i [0 a# w( O8 Q4 S6 UJAVA缺点:( y: P' y5 ]" L5 A
1.运行需要安装JAVA虚拟机' U" q0 ~+ P: j
JAVA语言最大的缺点就是运行JAVA程序需要装JAVA虚拟机,就这一条严重的影响了JAVA应用程序的使用,基本看不到JAVA的应用程序。
" D$ m, |7 f& e; P8 _2.运行成本较高
8 B- M4 H9 h6 D( V另外JAVA程序的运行成本比较高,过去机器配置不够高的时候,JAVA显得很慢现在随着JAVA本身的版本升级和电脑性能的强化这条基本已经不是问题了。) X( T* W$ M" X, O
: n( T+ a. r) t3 v p. W; C
四、C#/.NET——微软提供的一种限制性编程语言, y$ P% x. ~, @" b1 T K
C#/ .NET很大程度上是为微软机器人工程师工作室提供的,微软机器人工程师工作室将其作为基本语言。如果使用这个框架,就必须学习 C#。9 X: s! A$ O/ M% f8 V1 t+ p
C#/.NET优点:
4 }. @/ v3 } M0 H1.强大的.Net Framework托管代码集合类& W8 ?; p4 [4 W& a
,封装了大多数windows上使用的技术组件类, 文件系统,UI界面,数据源访问,网络访问,COM互操作(图形图像多媒体,WPF图形系统),没有的可以通过.net的平台调用win API函数来得到。$ ~0 M, i6 s% L: a) P
2.较简单的语言特性
9 V& B r# l+ X& X3 A% M自动内存管理, 单继承,支持事件、委托、属性、Linq等一系列让业务开发更简单的功能。$ r/ o3 q6 a4 o+ X, S3 h
3.Web应用程序开发速度快# q$ ?9 Y' y, I, s% T- {
Web应用程序开发速度快(.net框架的支持,控件可以拖拉(UI方便编辑和定位),添加事件(跳转到控制逻辑层),ADO.net数据源访问, xml 网络类库, windows服务)。
( j+ b/ T C. g& y& O4.和语言平台无关的编译机制及较快的运行速度
, o5 V, U+ m/ r9 g6 K5 }和语言平台无关的编译机制,及较快的运行速度(ms不推荐, mono的 Xamarin, Unity还不错):编译成IL中间语言,CLR公共语言运行库托管代码,CLR根据运行时程序需要将IL中间语言用JIT即时编译方式编译为内部机器代码,对编译好的机器代码缓存起来,提高了程序速度。
" C$ K9 I5 u9 @6 @2 x5.代码安全性! A6 {+ S4 S8 ^+ j: J% N
window是基于角色的安全机制,.net提供了基于代码的安全机制,由于中间语言提供了类型安全性,CLR在运行前检查代码,确定是否有需要的安全权限,CLR没有权限则不能执行该代码。* k6 f7 g6 x8 v$ ]) E
, a, f3 t) X% d# g9 }' Y$ p
C#/.NET缺点:9 g4 x7 h1 q& _! k! }$ H
1.底层和高性能不合适
/ N8 B5 T) E9 O# B不合适做时间性能很高(高速算法)或空间性能很灵活(内存立即释放)的程序,因为中间语言和编译过程,比C/C++Native类型的语言会慢一些,内存自动回收难以立即释放不需要的内存,不采用内联函数和析构函数(不建议)。0 B6 Z0 m2 W' l9 R; P
2.Windows平台以外支持有限- @' a5 c: J" d- H5 E
mono不够成熟好用,window以外Java,Python等是很强大和同样优秀的。8 d {7 e/ d3 K4 ?* V* C
' I$ U' Q7 i1 I( Y" j五、MATLAB——一种面向数值计算的高级程序设计语言/ h/ n% L( a7 E2 o! T
MATLAB和它的开源亲戚(例如Octave)在一些机器人专家中非常有名,是他们负责调查数据和创建控制系统常用的语言。还有一个非常有名的MATLAB机器人工具箱。使用MATLAB单独创建整个机器人系统的人员。如需要分解数据,创建高级图表或执行控制系统,那就很可能需要学习MATLAB。
' b; V8 |+ C$ k+ z- J, H) ]MATLAB优点:
( C7 x- k k6 Y5 @8 s7 R; E! @2 J1.编程效率高
( x8 D9 W$ Q( V: y+ x8 [% bMATLAB语言为演算纸式科学算法语言,由于它编程简单,所以编程效率高,易学易懂。
7 W4 x7 s$ D. q) {2.高效方便的矩阵和数组运算
2 `) P# e. r0 J2 O9 _MATLAB语言像BASIC、C语言一样规定了矩阵的算术运算符、关系运算符、逻辑运算符、条件运算符及赋值运算符,而且这些运算符大部分可以毫无改变的照搬到数组建的运算中。+ ]8 }9 h! H: x4 T! f9 U
MATLAB缺点: C2 d4 S, v2 u2 _4 h3 \7 c
1.循环运算效率低。
: `5 h. b- x( Y. ]! xMATLAB中所有的变量均为向量形式,这样一方面在对向量进行整体的计算时,表现出其他语言难以表现出的高效率,但是对于向量中的单个元素,或是将向量作为单个的循环变量来处理时,其处理过程相当的复杂。
$ d; ` _' `3 M: A: X# g2.封装性不好。
" K# v& i0 P5 f8 J一方面,所有的变量均保存在公共工作区中,任何语句都可以调用。另一方面,作为一个完备的软件,而不是实现算法的程序,编程人员在使用MATLAB时需要花相当多的时间考虑如何设计用户界面。
5 ~; ^, v& v& I. W+ J本文为大家列举了机器人编程比较热门的5种语言,但这并不意味着需要全部掌握,对于开发者来说,发现一种对自身来说很自然的语言更为重要,且适合你的机器人硬件,使你能快速上手。在这里建议先学习Python,Python是一门相对简单易懂的语言,有许多有效的库可供学习,且功能非常强大。7 S) T' l& V/ T* S* O7 q
" r9 `! [* @, f6 R! D
) s3 f# ?3 T. | |
|