|
- ^& i6 U) {5 V7 r+ n机器人编程语言最早于20世纪70年代初期问世,到目前为止已有多种编程语言出现,在众多机器人编程语言中究竟哪种编程语言最好呢?这个问题困扰了很多新手学者,但遗憾的是,这是一个没有准确答案的问题,你问不同的人会得到不同的答案,对于机器人学者来说建立“编程思维“才是最关键的,而不是用一种特定语言去衡量,在很多方面,学习哪种机器人编程语言并不是最重要的,重要的是通过编程思维来不断提升自己的技能。
; F% [+ R9 T" o/ d |- H回到本文主题,我们将为大家介绍机器人研发中比较主流的5种机器人编程语言,并对他们的优缺点进行分析。
! z! A* f5 q# T) U b# v9 y5 ^. P$ M/ N* J
一、Python——一种动态的、面向对象的脚本语言+ V) e0 G/ p6 R' w7 r- Y
在机器人研究领域,Python 占据了重要地位。其中一个原因很可能是 Python(和C ++)是ROS中的两种主要编程语言。像JAVA一样,它是一种解释性语言。但也不同于JAVA,Python 语言主要集中在可用性上。 o& n% j! q2 y; P; K6 ^3 h; N
# G: J1 c% ~$ f( l( G! U4 f7 s
Python优点:
. Q. Q+ W7 v: W- O+ T2 W% F* ?8 a1.更易入门
5 K9 |6 F! o' D+ Z9 ?! j! OPython程序简单易懂,初学者学Python更易入门且深入下去可编写非常复杂的程序,且开发效率高,有非常强大的第三方库。# q( a1 R& {0 i. ]' Q! r
2.高级语言
# }6 X! V) ^! X. F$ ]% I& p当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节" z* t; C8 t4 I- B4 _* A; x4 [
3.可移植性
- o* k: Z# F; v% E, @( J: A6 g由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行9 ~5 z2 d7 a' c! V
4.可扩展性
. |* T4 D' d2 f8 t如果需要一段关键代码运行得更快或者希望某些算法不公开,就可将部分程序用C或C++编写,然后在你的Python程序中使用它们。: C# ~$ P1 O! w" ?+ J( u( d
T/ o& _8 u3 } q+ x7 r
Python缺点:, F. ~8 q- Y$ ~8 G
1.运行速度慢
( D" h' m) Q4 n( I2 }) Y. HPython的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些。
' t. o( T- o9 W2.线程不能利用多CPU问题
" e# ]0 r" `; o这是Python被人诟病最多的一个缺点。
; g3 j' q) Z2 q% n5 ?7 p& Z
' o) ]+ Z$ Y2 p/ l8 J; R- r# a, k二、C /C ++——大多数中国程序员的第一个语言
8 q3 p/ k0 q1 N3 GC++语言是从C语言发展过来的,是一门面向对象的语言,它继承了C语言的优势。很多人都认为 C 和 C ++ 对机器人科学家来说是一个很好的开端。因为大部分的硬件库使用这些语言,允许实时性能,是非常成熟的编程语言。, X, V% s; V0 O% P" r
C /C ++优点:' b: ^- I- s$ T8 A' {
1.跨平台性好
: S1 [' n$ o. P' o6 o) T$ VC/C++可以潜入任何现代处理器中,几乎所有的操作系统都支持,跨平台性非常好。, T7 z1 ]: Z; S; |6 Q( f8 v
2.运行效率高: C& b! r, ]. D: v- Y% t! L' _7 m
C语言体型小巧,简洁高效并且接近汇编语言,C++功能在C的基础上增加面向对象的特点,代码可读性好,运行效率高。
0 x7 ?" k3 l8 X i3.语言简洁,编写风格自由- M( C0 T, {8 N1 E' M: K% [
兼有高级语言与汇编语言的优点,语言简洁、紧凑,使用方便、灵活丰富的运算符和数据类型,能访问内存地址和位操作等硬件底层操作,生成的目标代码质量高。
1 s. Z" R9 g5 g, ~4 L/ j5 D i8 h* o2 }# E- Y4 F9 `
C/C++缺点:1 C' N9 K/ e- K
1.无垃圾回收机制
2 a8 n/ ~4 Z4 V( K/ D' ?相对于JAVA来说,没有垃圾回收机制,容易引发内存泄露7 ?( {* W* D, W9 w2 z
2.学习较困难9 S$ b2 X* W( Y; }6 f2 V
从应用的角度,C语言比其他高级语言较难掌握。也就是说,对用C语言的人,要求对程序设计更熟练一些。% I4 \. s4 s* e5 B
3.数据安全性上有缺陷
: e2 e2 k% x/ h0 o2 K9 N- EC语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。
0 j9 ^' p) W3 g9 F6 D* s v
0 y9 `' r1 @- u8 \0 g; A三、JAVA——世界上使用范围最广的语言
! }1 U8 V2 u. {7 z9 ~# [! qJAVA语法规则和C++类似,从某种意义上来说,JAVA是由C和C++语言转变而来的。像C#和MATLAB一样,JAVA是一种解释性语言,这意味着它不会被合并到机器语言代码中。相反,JAVA虚拟机在运行时解释指令。理论上来说,基于JAVA虚拟机,使用JAVA可以在不同机器上使用类似的代码。但实际上,这并不普遍使用,有时会导致代码运行缓慢,但是JAVA编程语言在机器人研究中非常流行。
/ g9 e+ T; l- d# s$ MJAVA优点:
* x* z( X+ |3 A6 t1.更易学习7 V6 g4 i: c! Z6 D
由于JAVA语言与C语言和C++语言比较接近,使大多数程序员学起来更简单。
$ E/ _- A8 g7 x5 [- H H2.支持动态绑定
/ N& X/ b% v1 kJAVA语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。
' [9 q4 J: M7 `9 |" G; e( V3.支持Internet应用开发( e( v' `) W) y1 V: Z
JAVA语言支持Internet应用的开发,在基本的JAVA应用编程接口中有一个网络应用编程接口(JAVA.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。7 r4 b6 q5 d. ~
4.更安全
1 T. z6 b2 [8 C1 ]: f" yJAVA语言提供了一个安全机制以防止恶意代码的共计,相对来说更安全。1 ]$ w0 d W; q. k, G' e; F3 ^
5.具有可移植性; T* f% x, G. S! Q
JAVA语言是可移植的,这种可移植性来源于体系结构中立性,另外,JAVA还严格规定了各个基本数据类型的长度。1 t& D% D8 O% y
9 W+ p% T2 {+ aJAVA缺点:1 D8 R2 U3 a$ t& Z
1.运行需要安装JAVA虚拟机# K0 f$ \. n1 K. G
JAVA语言最大的缺点就是运行JAVA程序需要装JAVA虚拟机,就这一条严重的影响了JAVA应用程序的使用,基本看不到JAVA的应用程序。
8 w' D+ f$ ~: b2.运行成本较高3 ^ e: D2 i$ v5 ^; a5 ]2 w6 U
另外JAVA程序的运行成本比较高,过去机器配置不够高的时候,JAVA显得很慢现在随着JAVA本身的版本升级和电脑性能的强化这条基本已经不是问题了。- U, ]- o- ^- k0 b$ e7 x
5 }2 X5 |' I7 q; L, i! Q四、C#/.NET——微软提供的一种限制性编程语言* @) R( r0 q; s- j' x0 T
C#/ .NET很大程度上是为微软机器人工程师工作室提供的,微软机器人工程师工作室将其作为基本语言。如果使用这个框架,就必须学习 C#。
8 m& M, o1 S- @# _C#/.NET优点:
* J% Z: G |+ F" ^) o% ?1.强大的.Net Framework托管代码集合类- P! z# ? n: d, o2 r% J
,封装了大多数windows上使用的技术组件类, 文件系统,UI界面,数据源访问,网络访问,COM互操作(图形图像多媒体,WPF图形系统),没有的可以通过.net的平台调用win API函数来得到。/ \ d s8 u; y* `6 z' e9 R+ n
2.较简单的语言特性
) N" @, U' h; Q- N自动内存管理, 单继承,支持事件、委托、属性、Linq等一系列让业务开发更简单的功能。
: `9 r$ X e: e0 `6 {% q3.Web应用程序开发速度快
% P/ a# @% V( e. X3 u5 ]6 ]! p7 MWeb应用程序开发速度快(.net框架的支持,控件可以拖拉(UI方便编辑和定位),添加事件(跳转到控制逻辑层),ADO.net数据源访问, xml 网络类库, windows服务)。
; J# U; s# J# w+ N, e4 l9 U4 n4.和语言平台无关的编译机制及较快的运行速度" o9 Y& G$ L2 w; c, g
和语言平台无关的编译机制,及较快的运行速度(ms不推荐, mono的 Xamarin, Unity还不错):编译成IL中间语言,CLR公共语言运行库托管代码,CLR根据运行时程序需要将IL中间语言用JIT即时编译方式编译为内部机器代码,对编译好的机器代码缓存起来,提高了程序速度。
5 k* i' e/ `8 S* g9 M" x5.代码安全性
+ B0 d2 I' c: S* owindow是基于角色的安全机制,.net提供了基于代码的安全机制,由于中间语言提供了类型安全性,CLR在运行前检查代码,确定是否有需要的安全权限,CLR没有权限则不能执行该代码。
% W" U$ @( w+ O& @" S" \
9 d0 [' j/ A) z% TC#/.NET缺点:8 P. W4 ~( I/ @% e/ ^1 T
1.底层和高性能不合适
2 F+ k. r$ O/ V7 X, D不合适做时间性能很高(高速算法)或空间性能很灵活(内存立即释放)的程序,因为中间语言和编译过程,比C/C++Native类型的语言会慢一些,内存自动回收难以立即释放不需要的内存,不采用内联函数和析构函数(不建议)。
( u: A4 \' V k0 \2.Windows平台以外支持有限
& w/ T0 {/ P0 W& C/ Bmono不够成熟好用,window以外Java,Python等是很强大和同样优秀的。
. D6 O0 v( i6 d! f( x: {% t" o& g8 f$ V E: J' _" w% B) v0 |
五、MATLAB——一种面向数值计算的高级程序设计语言2 | r2 F/ F4 r( B$ P3 |
MATLAB和它的开源亲戚(例如Octave)在一些机器人专家中非常有名,是他们负责调查数据和创建控制系统常用的语言。还有一个非常有名的MATLAB机器人工具箱。使用MATLAB单独创建整个机器人系统的人员。如需要分解数据,创建高级图表或执行控制系统,那就很可能需要学习MATLAB。
5 T2 h# O, n) c- b1 u2 xMATLAB优点:, q. q! ~& o5 m
1.编程效率高# D' B9 N! [# _+ U5 Z1 a6 A
MATLAB语言为演算纸式科学算法语言,由于它编程简单,所以编程效率高,易学易懂。$ T2 z# x2 b2 b
2.高效方便的矩阵和数组运算
9 Z! h. [6 W/ q- s7 W6 Y7 rMATLAB语言像BASIC、C语言一样规定了矩阵的算术运算符、关系运算符、逻辑运算符、条件运算符及赋值运算符,而且这些运算符大部分可以毫无改变的照搬到数组建的运算中。% e( y. j/ P% c$ Q0 R( O Q. N, L
MATLAB缺点:" n$ U1 K5 t3 ~
1.循环运算效率低。
" h" M4 S" D( }% kMATLAB中所有的变量均为向量形式,这样一方面在对向量进行整体的计算时,表现出其他语言难以表现出的高效率,但是对于向量中的单个元素,或是将向量作为单个的循环变量来处理时,其处理过程相当的复杂。7 Q* K0 w* T9 e0 [
2.封装性不好。7 L8 {- a4 q, K8 N0 T
一方面,所有的变量均保存在公共工作区中,任何语句都可以调用。另一方面,作为一个完备的软件,而不是实现算法的程序,编程人员在使用MATLAB时需要花相当多的时间考虑如何设计用户界面。1 `/ M$ Y8 N7 V' f) a4 X
本文为大家列举了机器人编程比较热门的5种语言,但这并不意味着需要全部掌握,对于开发者来说,发现一种对自身来说很自然的语言更为重要,且适合你的机器人硬件,使你能快速上手。在这里建议先学习Python,Python是一门相对简单易懂的语言,有许多有效的库可供学习,且功能非常强大。8 }8 X; G3 T+ n1 k, x
7 k' i+ w# r% F& z: ^4 p" }( Z% \
v5 y1 W6 l7 q4 p1 M! q
|
|