|
% x" G( m! V0 V& q机器人编程语言最早于20世纪70年代初期问世,到目前为止已有多种编程语言出现,在众多机器人编程语言中究竟哪种编程语言最好呢?这个问题困扰了很多新手学者,但遗憾的是,这是一个没有准确答案的问题,你问不同的人会得到不同的答案,对于机器人学者来说建立“编程思维“才是最关键的,而不是用一种特定语言去衡量,在很多方面,学习哪种机器人编程语言并不是最重要的,重要的是通过编程思维来不断提升自己的技能。
2 M, A2 q9 F+ R1 L' ^' k回到本文主题,我们将为大家介绍机器人研发中比较主流的5种机器人编程语言,并对他们的优缺点进行分析。0 l% A- F# t, I! B/ N& x
, F y& F a& j$ Z" I
一、Python——一种动态的、面向对象的脚本语言
* @- V! s' j, u+ b* T! n ~/ v在机器人研究领域,Python 占据了重要地位。其中一个原因很可能是 Python(和C ++)是ROS中的两种主要编程语言。像JAVA一样,它是一种解释性语言。但也不同于JAVA,Python 语言主要集中在可用性上。
, O% x c: l# D- Q' ~+ g+ b2 D f \3 q7 c$ ^0 Q- \* i
Python优点:
& i! U y. \6 N d2 j! w) X1.更易入门
. _+ B" n$ N# T! dPython程序简单易懂,初学者学Python更易入门且深入下去可编写非常复杂的程序,且开发效率高,有非常强大的第三方库。/ x1 c# o* z! X* t; f- a( q7 r
2.高级语言
Q6 S. b$ _2 A$ r当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节0 i% R% n* g$ n; W7 B! o( m
3.可移植性
% b. N3 F/ |. [* Z6 {由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行. i4 Z; R4 V) H+ I" S# W1 c4 k5 t
4.可扩展性/ p4 U; W; X5 C; I/ j: j8 g
如果需要一段关键代码运行得更快或者希望某些算法不公开,就可将部分程序用C或C++编写,然后在你的Python程序中使用它们。+ c/ m4 E6 h4 U% Q6 K0 {
2 ~7 `' c4 Y/ ~8 A8 |1 V& r8 T- GPython缺点: w) V9 B/ q6 t2 `" W8 d5 _9 _
1.运行速度慢
; @0 ^2 Y* f) S+ mPython的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些。/ g/ f$ N# A: T: `$ j
2.线程不能利用多CPU问题
3 ?" s1 q% {% J3 Q5 x2 r4 e这是Python被人诟病最多的一个缺点。
1 W- Q: X9 A+ ^, V2 Q& v( ^: F( i3 K, @( |
二、C /C ++——大多数中国程序员的第一个语言
8 @& S1 l& B; IC++语言是从C语言发展过来的,是一门面向对象的语言,它继承了C语言的优势。很多人都认为 C 和 C ++ 对机器人科学家来说是一个很好的开端。因为大部分的硬件库使用这些语言,允许实时性能,是非常成熟的编程语言。6 N' H" k' T- U* z+ F
C /C ++优点:5 l. N/ ]2 u' s$ b$ J
1.跨平台性好
1 n5 X1 O# d4 Y( X* U! CC/C++可以潜入任何现代处理器中,几乎所有的操作系统都支持,跨平台性非常好。0 R p7 V" \" e% ~; w, I
2.运行效率高( Q0 O2 t6 m# Z$ z/ V' W4 B) R9 |
C语言体型小巧,简洁高效并且接近汇编语言,C++功能在C的基础上增加面向对象的特点,代码可读性好,运行效率高。: G m' A [/ ]0 W% |- e
3.语言简洁,编写风格自由
8 o$ u6 }5 x5 L$ F+ t兼有高级语言与汇编语言的优点,语言简洁、紧凑,使用方便、灵活丰富的运算符和数据类型,能访问内存地址和位操作等硬件底层操作,生成的目标代码质量高。5 _5 A% m2 e# e& L( w
9 Z4 p6 Y" o' m1 n3 r8 kC/C++缺点:- o7 t- j% O8 y4 G; k5 r- R
1.无垃圾回收机制
4 Q7 |# B3 g, ~) i& e相对于JAVA来说,没有垃圾回收机制,容易引发内存泄露
8 R4 A7 M0 q" N6 N, G, Y2.学习较困难; Y; h9 z8 D8 e2 x% w
从应用的角度,C语言比其他高级语言较难掌握。也就是说,对用C语言的人,要求对程序设计更熟练一些。8 D( k) i7 Y' |+ N
3.数据安全性上有缺陷) Z# |0 m3 C9 O* t
C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。
! R% t" @$ p5 e4 m# i; ~) W
& @) K6 a: d+ x& k6 l9 |0 V三、JAVA——世界上使用范围最广的语言
1 }! a# |3 P5 u; eJAVA语法规则和C++类似,从某种意义上来说,JAVA是由C和C++语言转变而来的。像C#和MATLAB一样,JAVA是一种解释性语言,这意味着它不会被合并到机器语言代码中。相反,JAVA虚拟机在运行时解释指令。理论上来说,基于JAVA虚拟机,使用JAVA可以在不同机器上使用类似的代码。但实际上,这并不普遍使用,有时会导致代码运行缓慢,但是JAVA编程语言在机器人研究中非常流行。. z# @, z2 @9 t; v1 h% a
JAVA优点:
0 ~. Q0 w. z- x z; I3 e/ U1.更易学习
6 M! E; D. Q3 m. M* Z; ?由于JAVA语言与C语言和C++语言比较接近,使大多数程序员学起来更简单。) e- c1 K# [& b3 i: _ C- x
2.支持动态绑定, t* ~0 n1 ]6 J( [- S
JAVA语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。' |9 J# p1 w6 }- y$ y6 T
3.支持Internet应用开发
4 X6 S0 _; e" _) ^/ MJAVA语言支持Internet应用的开发,在基本的JAVA应用编程接口中有一个网络应用编程接口(JAVA.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。8 {4 F# \, x) b
4.更安全
: z. ~, E7 @* p! L" @' G, F& I$ qJAVA语言提供了一个安全机制以防止恶意代码的共计,相对来说更安全。
6 J( y1 E0 j5 U. T5.具有可移植性
( U6 b* }# j6 e) M9 Y7 H! L. KJAVA语言是可移植的,这种可移植性来源于体系结构中立性,另外,JAVA还严格规定了各个基本数据类型的长度。
1 X% B9 e8 S$ u$ f7 n3 y2 f" [2 g* I
JAVA缺点:
/ ?* c* ~0 Q# X* J' x8 e1.运行需要安装JAVA虚拟机" Q9 G+ l6 ]' ]* b6 F6 x
JAVA语言最大的缺点就是运行JAVA程序需要装JAVA虚拟机,就这一条严重的影响了JAVA应用程序的使用,基本看不到JAVA的应用程序。9 t4 _+ J7 G" d* P6 V; W
2.运行成本较高
. b# u. V- e4 S+ o( _另外JAVA程序的运行成本比较高,过去机器配置不够高的时候,JAVA显得很慢现在随着JAVA本身的版本升级和电脑性能的强化这条基本已经不是问题了。# f8 h. N; n% w/ H/ w
. d3 `- ^6 g# j P0 V. `
四、C#/.NET——微软提供的一种限制性编程语言! s' F& T* |/ N0 t/ j) o
C#/ .NET很大程度上是为微软机器人工程师工作室提供的,微软机器人工程师工作室将其作为基本语言。如果使用这个框架,就必须学习 C#。
, h9 G7 l: P) N6 _1 {$ J+ oC#/.NET优点:. Z$ @( E/ g6 w1 t1 S
1.强大的.Net Framework托管代码集合类) U# k2 i, |) n1 _0 z6 L4 K% b! v
,封装了大多数windows上使用的技术组件类, 文件系统,UI界面,数据源访问,网络访问,COM互操作(图形图像多媒体,WPF图形系统),没有的可以通过.net的平台调用win API函数来得到。/ O6 k7 q; j3 ^
2.较简单的语言特性
$ P& w; i7 |& m8 R自动内存管理, 单继承,支持事件、委托、属性、Linq等一系列让业务开发更简单的功能。
+ B+ ]8 I, K* @; H$ t) k+ N; `+ Y3.Web应用程序开发速度快5 a! Q( z. d: [
Web应用程序开发速度快(.net框架的支持,控件可以拖拉(UI方便编辑和定位),添加事件(跳转到控制逻辑层),ADO.net数据源访问, xml 网络类库, windows服务)。
# d) f$ v0 N8 n1 d8 I( X# j4 K4.和语言平台无关的编译机制及较快的运行速度
( l7 z8 E5 n# {- j1 }和语言平台无关的编译机制,及较快的运行速度(ms不推荐, mono的 Xamarin, Unity还不错):编译成IL中间语言,CLR公共语言运行库托管代码,CLR根据运行时程序需要将IL中间语言用JIT即时编译方式编译为内部机器代码,对编译好的机器代码缓存起来,提高了程序速度。# J. H. K. `& O
5.代码安全性3 c: ?* ?3 g, q6 S5 h, l6 s' E
window是基于角色的安全机制,.net提供了基于代码的安全机制,由于中间语言提供了类型安全性,CLR在运行前检查代码,确定是否有需要的安全权限,CLR没有权限则不能执行该代码。
/ z1 q" f$ M6 p& @9 G, C% P8 B; o7 h
C#/.NET缺点:
- ^8 r% Y1 @; _1 A5 @) V1.底层和高性能不合适
2 x) X( n( _/ m7 P5 @不合适做时间性能很高(高速算法)或空间性能很灵活(内存立即释放)的程序,因为中间语言和编译过程,比C/C++Native类型的语言会慢一些,内存自动回收难以立即释放不需要的内存,不采用内联函数和析构函数(不建议)。
0 Y: I& l; w( F! q2.Windows平台以外支持有限
+ ~9 B. s0 ]9 q- \- C emono不够成熟好用,window以外Java,Python等是很强大和同样优秀的。( ^# N6 C: v0 M! n. W( l1 l
1 P3 x( e5 n* j* x五、MATLAB——一种面向数值计算的高级程序设计语言
6 _8 W5 b1 P; Y) }& @% E% tMATLAB和它的开源亲戚(例如Octave)在一些机器人专家中非常有名,是他们负责调查数据和创建控制系统常用的语言。还有一个非常有名的MATLAB机器人工具箱。使用MATLAB单独创建整个机器人系统的人员。如需要分解数据,创建高级图表或执行控制系统,那就很可能需要学习MATLAB。/ ` g% A; o1 p/ y9 }: f+ V( N0 s+ b
MATLAB优点:
8 M, I6 M- C/ l4 X/ _! {; S/ c0 \1.编程效率高
* C, d! t/ h$ _MATLAB语言为演算纸式科学算法语言,由于它编程简单,所以编程效率高,易学易懂。
' a/ s9 z9 D8 y& H; q- X2.高效方便的矩阵和数组运算
, U5 q- p9 [6 i, X3 u: ~* ~MATLAB语言像BASIC、C语言一样规定了矩阵的算术运算符、关系运算符、逻辑运算符、条件运算符及赋值运算符,而且这些运算符大部分可以毫无改变的照搬到数组建的运算中。
& ~0 A) {) ]3 n9 T+ q# D# N$ K. `MATLAB缺点:
8 Y9 O9 k' Q e0 ~) f1.循环运算效率低。* K7 u) ?- ]7 m- I) b; r: u/ ^5 s5 h
MATLAB中所有的变量均为向量形式,这样一方面在对向量进行整体的计算时,表现出其他语言难以表现出的高效率,但是对于向量中的单个元素,或是将向量作为单个的循环变量来处理时,其处理过程相当的复杂。
2 z. N" O7 _: }5 P" S* C2.封装性不好。$ d" K; c" [& K8 p9 M
一方面,所有的变量均保存在公共工作区中,任何语句都可以调用。另一方面,作为一个完备的软件,而不是实现算法的程序,编程人员在使用MATLAB时需要花相当多的时间考虑如何设计用户界面。
# e3 d0 d6 T9 P- Q/ T Z5 Q本文为大家列举了机器人编程比较热门的5种语言,但这并不意味着需要全部掌握,对于开发者来说,发现一种对自身来说很自然的语言更为重要,且适合你的机器人硬件,使你能快速上手。在这里建议先学习Python,Python是一门相对简单易懂的语言,有许多有效的库可供学习,且功能非常强大。
3 B3 | F+ d9 ]; T; P
! }4 A$ U0 c- K7 }9 d7 n- V/ b; r
|
|