|
& U. ^. E6 U6 J+ |, R) J: E机器人编程语言最早于20世纪70年代初期问世,到目前为止已有多种编程语言出现,在众多机器人编程语言中究竟哪种编程语言最好呢?这个问题困扰了很多新手学者,但遗憾的是,这是一个没有准确答案的问题,你问不同的人会得到不同的答案,对于机器人学者来说建立“编程思维“才是最关键的,而不是用一种特定语言去衡量,在很多方面,学习哪种机器人编程语言并不是最重要的,重要的是通过编程思维来不断提升自己的技能。+ S6 m! n6 F8 b2 K6 P# k. z V/ i
回到本文主题,我们将为大家介绍机器人研发中比较主流的5种机器人编程语言,并对他们的优缺点进行分析。) `! G9 F5 T2 c( G0 ~: l; r# {7 I
' c* y. g( |+ w% d
一、Python——一种动态的、面向对象的脚本语言
* |; v4 S q" t! B( |" d6 v9 g+ a在机器人研究领域,Python 占据了重要地位。其中一个原因很可能是 Python(和C ++)是ROS中的两种主要编程语言。像JAVA一样,它是一种解释性语言。但也不同于JAVA,Python 语言主要集中在可用性上。* G; R4 L( T2 `
- I1 m* f; G r- ^7 h6 o L1 M
Python优点:
- J2 N8 I6 L7 S) } O1.更易入门/ H9 M+ g7 j$ o3 J5 e
Python程序简单易懂,初学者学Python更易入门且深入下去可编写非常复杂的程序,且开发效率高,有非常强大的第三方库。) `! _ b! b$ X& x6 z
2.高级语言
$ o- l/ Q/ q7 f D1 F4 [8 K/ D当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节
7 v" p/ D" v: ]+ q% `3.可移植性' o' q. g0 X- p9 x: o( L
由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行- z( U- I$ S& k6 P3 i
4.可扩展性/ a+ T9 n3 j3 @. c: y
如果需要一段关键代码运行得更快或者希望某些算法不公开,就可将部分程序用C或C++编写,然后在你的Python程序中使用它们。* E5 s* D% z4 V0 K* q
# X6 p4 n% I7 k8 E0 `4 z0 s A) P
Python缺点:
/ I2 ?. _/ y9 U* R1.运行速度慢4 r( V! p; E/ J7 _4 Y9 a3 @& }' X) q/ E
Python的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些。( d0 K/ }+ p& U2 l
2.线程不能利用多CPU问题
8 r0 s4 K) u( j- y这是Python被人诟病最多的一个缺点。% Z) s; k: D) z
" W' I% j2 l9 @6 ?$ R# S
二、C /C ++——大多数中国程序员的第一个语言6 n; U$ X& {. O8 D
C++语言是从C语言发展过来的,是一门面向对象的语言,它继承了C语言的优势。很多人都认为 C 和 C ++ 对机器人科学家来说是一个很好的开端。因为大部分的硬件库使用这些语言,允许实时性能,是非常成熟的编程语言。: [. u1 j' U, N, t, G, |
C /C ++优点:2 ]/ r* x+ v$ ^8 J; S
1.跨平台性好
2 V2 L2 N. r& J) L1 f' h% Z; iC/C++可以潜入任何现代处理器中,几乎所有的操作系统都支持,跨平台性非常好。
& |, n5 n( P1 a8 K+ D! r/ v2.运行效率高1 k2 j! j8 b1 f& e% J$ v
C语言体型小巧,简洁高效并且接近汇编语言,C++功能在C的基础上增加面向对象的特点,代码可读性好,运行效率高。
6 t9 t; j" C1 _" _9 m" [3.语言简洁,编写风格自由0 S, a! \4 r7 t- s) j
兼有高级语言与汇编语言的优点,语言简洁、紧凑,使用方便、灵活丰富的运算符和数据类型,能访问内存地址和位操作等硬件底层操作,生成的目标代码质量高。
6 E9 E) p0 X1 d& \: B1 I3 G$ b
% B' j8 O) i6 ^; g+ S: E9 ]( GC/C++缺点:
1 r5 r2 t% I: V9 Y- Z- i9 l1.无垃圾回收机制, \9 K/ Y( g$ d N- {
相对于JAVA来说,没有垃圾回收机制,容易引发内存泄露2 E! U: {3 C# d% ~5 g& b
2.学习较困难
" t% _8 H) q+ M# o* V* T从应用的角度,C语言比其他高级语言较难掌握。也就是说,对用C语言的人,要求对程序设计更熟练一些。
; K) w$ `7 C& \3.数据安全性上有缺陷+ t2 V3 [% ?. x4 Y4 B
C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。 ?9 @5 |" L$ W2 O: _- k- q4 ^2 A2 ^, E
8 U; }2 S# ~/ S% A) F
三、JAVA——世界上使用范围最广的语言
5 X& l9 x% H" A, ~# iJAVA语法规则和C++类似,从某种意义上来说,JAVA是由C和C++语言转变而来的。像C#和MATLAB一样,JAVA是一种解释性语言,这意味着它不会被合并到机器语言代码中。相反,JAVA虚拟机在运行时解释指令。理论上来说,基于JAVA虚拟机,使用JAVA可以在不同机器上使用类似的代码。但实际上,这并不普遍使用,有时会导致代码运行缓慢,但是JAVA编程语言在机器人研究中非常流行。
1 {" K2 @! D [JAVA优点:7 T2 d& Q! f9 U; r3 a, ~* v) J
1.更易学习
- J$ Z9 |; o3 g# M( j由于JAVA语言与C语言和C++语言比较接近,使大多数程序员学起来更简单。) I5 P1 S$ u% Y/ C) R
2.支持动态绑定4 I( G; i; B7 R6 ~
JAVA语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。5 o. H; H B; s2 o5 A: F
3.支持Internet应用开发
1 G& r7 o7 M8 m7 v4 ]9 i WJAVA语言支持Internet应用的开发,在基本的JAVA应用编程接口中有一个网络应用编程接口(JAVA.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。( m) c _* [9 h1 G. ~# w
4.更安全0 w) u6 w0 g* l; a) _3 y
JAVA语言提供了一个安全机制以防止恶意代码的共计,相对来说更安全。
/ r# s- c' c7 X$ H$ x, Y% I* U K' Z5.具有可移植性1 w' ]5 C3 \6 `& C& C( \* \! t1 E2 [
JAVA语言是可移植的,这种可移植性来源于体系结构中立性,另外,JAVA还严格规定了各个基本数据类型的长度。1 ?- f2 Y0 E/ q: S0 k; P7 R$ J3 m
* p2 U% q$ Z* t9 T: r6 E% GJAVA缺点:# k) v' f- R/ P O3 n( E" n
1.运行需要安装JAVA虚拟机% ]! D' G; S# B- F( f' v
JAVA语言最大的缺点就是运行JAVA程序需要装JAVA虚拟机,就这一条严重的影响了JAVA应用程序的使用,基本看不到JAVA的应用程序。
% J$ P8 L4 H7 Y8 J+ p7 @6 V2.运行成本较高, m( c( d, \% C0 i, i% F* w
另外JAVA程序的运行成本比较高,过去机器配置不够高的时候,JAVA显得很慢现在随着JAVA本身的版本升级和电脑性能的强化这条基本已经不是问题了。
0 o7 g5 _# T$ c" \) A. i0 p' f
0 t3 M! A( ?: [2 `4 e/ c四、C#/.NET——微软提供的一种限制性编程语言
' ?- \" [. B7 O* p* j0 `C#/ .NET很大程度上是为微软机器人工程师工作室提供的,微软机器人工程师工作室将其作为基本语言。如果使用这个框架,就必须学习 C#。
8 S% K3 K2 z! c: ^9 j6 eC#/.NET优点:
1 ~3 ^0 P1 Q2 T7 V* ^% e1.强大的.Net Framework托管代码集合类2 g' i/ m% C8 f4 v
,封装了大多数windows上使用的技术组件类, 文件系统,UI界面,数据源访问,网络访问,COM互操作(图形图像多媒体,WPF图形系统),没有的可以通过.net的平台调用win API函数来得到。
5 c! |0 s+ `( F( H' d. L2.较简单的语言特性
3 ? Q& d& h7 w自动内存管理, 单继承,支持事件、委托、属性、Linq等一系列让业务开发更简单的功能。
, p3 a- M$ H" p' r6 w% ]3.Web应用程序开发速度快
; c5 A- a; @& W; W7 j( s9 F/ N; vWeb应用程序开发速度快(.net框架的支持,控件可以拖拉(UI方便编辑和定位),添加事件(跳转到控制逻辑层),ADO.net数据源访问, xml 网络类库, windows服务)。
) c# M% N+ ^0 }4 P0 K& \6 V+ ^* ?4.和语言平台无关的编译机制及较快的运行速度4 X$ X. f& G: y! R' Q8 m! h
和语言平台无关的编译机制,及较快的运行速度(ms不推荐, mono的 Xamarin, Unity还不错):编译成IL中间语言,CLR公共语言运行库托管代码,CLR根据运行时程序需要将IL中间语言用JIT即时编译方式编译为内部机器代码,对编译好的机器代码缓存起来,提高了程序速度。; V8 {* ]* f4 W. K2 m
5.代码安全性/ H9 A# t+ P n2 K5 l d4 B( r- B
window是基于角色的安全机制,.net提供了基于代码的安全机制,由于中间语言提供了类型安全性,CLR在运行前检查代码,确定是否有需要的安全权限,CLR没有权限则不能执行该代码。
' [1 k5 ]7 d: M: C- ~
* u4 S2 `4 F M! mC#/.NET缺点:
a1 `/ F8 A; M# C+ c% M# _1.底层和高性能不合适
W' y! J% f. w% X$ l z不合适做时间性能很高(高速算法)或空间性能很灵活(内存立即释放)的程序,因为中间语言和编译过程,比C/C++Native类型的语言会慢一些,内存自动回收难以立即释放不需要的内存,不采用内联函数和析构函数(不建议)。
# h' O, J* K7 b2 w2.Windows平台以外支持有限
! \. i* D+ {- j0 r! ^2 c; umono不够成熟好用,window以外Java,Python等是很强大和同样优秀的。
: u5 p5 @0 i4 W; j+ P" K6 `: Y9 {2 _! j; J. h4 I* C* Y+ B
五、MATLAB——一种面向数值计算的高级程序设计语言
2 g) O2 T5 g' c7 D) }4 w& z9 H( _- wMATLAB和它的开源亲戚(例如Octave)在一些机器人专家中非常有名,是他们负责调查数据和创建控制系统常用的语言。还有一个非常有名的MATLAB机器人工具箱。使用MATLAB单独创建整个机器人系统的人员。如需要分解数据,创建高级图表或执行控制系统,那就很可能需要学习MATLAB。
& ?+ F) M. [2 q$ M, [6 r( iMATLAB优点:" r; t, [2 ?. f/ N$ P; a! c( C
1.编程效率高 R c4 s( m) K- v1 s
MATLAB语言为演算纸式科学算法语言,由于它编程简单,所以编程效率高,易学易懂。8 }2 D$ u/ D9 _ J: }( ]& h1 M/ z% U
2.高效方便的矩阵和数组运算( p1 P4 H0 b- T
MATLAB语言像BASIC、C语言一样规定了矩阵的算术运算符、关系运算符、逻辑运算符、条件运算符及赋值运算符,而且这些运算符大部分可以毫无改变的照搬到数组建的运算中。
1 n9 S/ M( z7 ?MATLAB缺点:
- y) D% c0 A8 o! W8 Q1.循环运算效率低。# b8 o( v) A* g, @! V
MATLAB中所有的变量均为向量形式,这样一方面在对向量进行整体的计算时,表现出其他语言难以表现出的高效率,但是对于向量中的单个元素,或是将向量作为单个的循环变量来处理时,其处理过程相当的复杂。+ M4 e& i! k* F7 j% H/ a( \
2.封装性不好。- p3 S" a# |& q, o2 m% c7 s
一方面,所有的变量均保存在公共工作区中,任何语句都可以调用。另一方面,作为一个完备的软件,而不是实现算法的程序,编程人员在使用MATLAB时需要花相当多的时间考虑如何设计用户界面。
% _6 n% u/ d# ]3 W1 I3 q k9 e; E# t本文为大家列举了机器人编程比较热门的5种语言,但这并不意味着需要全部掌握,对于开发者来说,发现一种对自身来说很自然的语言更为重要,且适合你的机器人硬件,使你能快速上手。在这里建议先学习Python,Python是一门相对简单易懂的语言,有许多有效的库可供学习,且功能非常强大。- h% Y( O8 v y) P- u* X5 H
c. e! P+ Q" J: Z* W) k9 d: v
, x& X8 M Z$ U/ Y, m, Q |
|