|
4 I7 C* | _; v& o; F" U# ~6 P机器人编程语言最早于20世纪70年代初期问世,到目前为止已有多种编程语言出现,在众多机器人编程语言中究竟哪种编程语言最好呢?这个问题困扰了很多新手学者,但遗憾的是,这是一个没有准确答案的问题,你问不同的人会得到不同的答案,对于机器人学者来说建立“编程思维“才是最关键的,而不是用一种特定语言去衡量,在很多方面,学习哪种机器人编程语言并不是最重要的,重要的是通过编程思维来不断提升自己的技能。
$ z. d! k1 M$ B0 c& H回到本文主题,我们将为大家介绍机器人研发中比较主流的5种机器人编程语言,并对他们的优缺点进行分析。 r% s' h4 s& X- x c8 k) K7 V
) y' s! c$ H' i* `* S5 d- C4 O一、Python——一种动态的、面向对象的脚本语言) ]# D f1 m% h5 ^
在机器人研究领域,Python 占据了重要地位。其中一个原因很可能是 Python(和C ++)是ROS中的两种主要编程语言。像JAVA一样,它是一种解释性语言。但也不同于JAVA,Python 语言主要集中在可用性上。3 A4 O' `$ R8 g! l
. O; {1 o" K* T+ l4 ?- }3 w
Python优点:9 p2 |, e+ T8 r+ b4 C9 i
1.更易入门
4 S* ` v" H5 R( L6 p+ P: e w' jPython程序简单易懂,初学者学Python更易入门且深入下去可编写非常复杂的程序,且开发效率高,有非常强大的第三方库。
3 C1 }) [$ p. S8 M2.高级语言
+ c( w2 j* [& _当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节
/ y% c3 f* O9 k0 Q! A0 ~3.可移植性
% L- u6 s( O# L+ L! e由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行" t; |# f7 T# w4 X+ f1 P
4.可扩展性
& R/ C/ U: f& \2 b' T如果需要一段关键代码运行得更快或者希望某些算法不公开,就可将部分程序用C或C++编写,然后在你的Python程序中使用它们。
0 A! J4 i. [ G# e# `; f" q* u2 x* }5 l3 j- _
Python缺点:' s3 E0 a+ F0 q/ |& c9 E+ f
1.运行速度慢
& b% A4 W, j0 M9 aPython的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些。
% }- K+ ]6 A+ Y4 K: \5 G" h2.线程不能利用多CPU问题
8 Q1 |, b0 p- v! M& d+ D Y/ d这是Python被人诟病最多的一个缺点。4 r4 o$ w8 @2 |9 v. g( ^
6 ~) z6 |. ]; I r二、C /C ++——大多数中国程序员的第一个语言5 p+ [. G% \ W3 }) A( b
C++语言是从C语言发展过来的,是一门面向对象的语言,它继承了C语言的优势。很多人都认为 C 和 C ++ 对机器人科学家来说是一个很好的开端。因为大部分的硬件库使用这些语言,允许实时性能,是非常成熟的编程语言。
4 W/ b4 r3 L* I! ?, V& uC /C ++优点:
8 T* n4 Z; e+ y7 R' J1.跨平台性好6 J* d' ^ @7 H4 r" k; g: e5 {
C/C++可以潜入任何现代处理器中,几乎所有的操作系统都支持,跨平台性非常好。8 [0 w$ K% j( V. x Y# s
2.运行效率高) k! j% ?6 w; N8 j9 L
C语言体型小巧,简洁高效并且接近汇编语言,C++功能在C的基础上增加面向对象的特点,代码可读性好,运行效率高。6 X J1 {9 ?) _' l) \4 ~
3.语言简洁,编写风格自由8 I! I( ?5 L2 ^
兼有高级语言与汇编语言的优点,语言简洁、紧凑,使用方便、灵活丰富的运算符和数据类型,能访问内存地址和位操作等硬件底层操作,生成的目标代码质量高。4 R' F+ c- T/ p/ ?$ Z& ?
3 J; Z: M0 R( Y; E, H
C/C++缺点:
' t" L& H G$ N1.无垃圾回收机制
. }. Z$ ]4 j' F5 S3 {: l! Z相对于JAVA来说,没有垃圾回收机制,容易引发内存泄露
3 R9 Y9 R7 |1 ]4 }8 W2.学习较困难
( A( \) b3 I o9 l" `' l从应用的角度,C语言比其他高级语言较难掌握。也就是说,对用C语言的人,要求对程序设计更熟练一些。
' P; E- u2 e( c1 z3.数据安全性上有缺陷- f" Z5 t7 |, U4 L( V/ ?+ n- I
C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。
$ y: s" {% R! c/ N1 j2 k1 h# N
! P, Y4 k1 B* m& j: X, w4 L3 t: u三、JAVA——世界上使用范围最广的语言
0 N2 U/ L) L5 \3 b& oJAVA语法规则和C++类似,从某种意义上来说,JAVA是由C和C++语言转变而来的。像C#和MATLAB一样,JAVA是一种解释性语言,这意味着它不会被合并到机器语言代码中。相反,JAVA虚拟机在运行时解释指令。理论上来说,基于JAVA虚拟机,使用JAVA可以在不同机器上使用类似的代码。但实际上,这并不普遍使用,有时会导致代码运行缓慢,但是JAVA编程语言在机器人研究中非常流行。! x" j$ d9 Y/ |
JAVA优点:
" C! k B# C d, U$ j1.更易学习
$ F' o- _: _% I& G% d由于JAVA语言与C语言和C++语言比较接近,使大多数程序员学起来更简单。9 ]- c6 K4 ]$ d. ?$ W0 K
2.支持动态绑定" ^! v! u9 M! {4 F
JAVA语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。* o W$ r, L- `) y& G( N: U7 ]
3.支持Internet应用开发0 p* v5 r" Q& N& j
JAVA语言支持Internet应用的开发,在基本的JAVA应用编程接口中有一个网络应用编程接口(JAVA.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。
" ]5 F- p/ z5 g( ?6 k4 q6 G1 w4.更安全$ W1 G; v8 `7 |, j: q4 _, l
JAVA语言提供了一个安全机制以防止恶意代码的共计,相对来说更安全。8 |3 X7 T2 ~) \$ E2 |
5.具有可移植性
2 _; p# \0 ]% e: y9 k3 K) P8 r; oJAVA语言是可移植的,这种可移植性来源于体系结构中立性,另外,JAVA还严格规定了各个基本数据类型的长度。
% K W4 b; e6 ?5 T4 I
/ M. E# l$ M6 sJAVA缺点:8 ^+ k5 j! C* z/ u9 z/ Y
1.运行需要安装JAVA虚拟机2 G9 L7 x0 i" X% ?, |7 G, S
JAVA语言最大的缺点就是运行JAVA程序需要装JAVA虚拟机,就这一条严重的影响了JAVA应用程序的使用,基本看不到JAVA的应用程序。! n, g% r: V' y: h
2.运行成本较高
8 x) C; J J, { J另外JAVA程序的运行成本比较高,过去机器配置不够高的时候,JAVA显得很慢现在随着JAVA本身的版本升级和电脑性能的强化这条基本已经不是问题了。
6 q/ p1 c4 v: {! |* V
5 _. n# A2 D9 w2 G) C! ]四、C#/.NET——微软提供的一种限制性编程语言8 c- W" j) Z+ ^: y# B) G9 ^8 f
C#/ .NET很大程度上是为微软机器人工程师工作室提供的,微软机器人工程师工作室将其作为基本语言。如果使用这个框架,就必须学习 C#。9 [% \3 G; O# z% P" m# ]; l* x( m# e0 {
C#/.NET优点:8 d2 U x. f( i3 n
1.强大的.Net Framework托管代码集合类$ s+ S0 F& {/ `
,封装了大多数windows上使用的技术组件类, 文件系统,UI界面,数据源访问,网络访问,COM互操作(图形图像多媒体,WPF图形系统),没有的可以通过.net的平台调用win API函数来得到。) G. g4 B: c! |1 |' P7 [1 ]% h
2.较简单的语言特性. |' C) {+ u* ]8 T# |1 u1 X& x
自动内存管理, 单继承,支持事件、委托、属性、Linq等一系列让业务开发更简单的功能。) s( ^. d0 ]& o- w+ ]& `
3.Web应用程序开发速度快
6 n5 ]5 U) @9 PWeb应用程序开发速度快(.net框架的支持,控件可以拖拉(UI方便编辑和定位),添加事件(跳转到控制逻辑层),ADO.net数据源访问, xml 网络类库, windows服务)。" H: p# Y' Y% j- ~6 A+ N M
4.和语言平台无关的编译机制及较快的运行速度
]& U6 o, v" v; G) d5 E/ T和语言平台无关的编译机制,及较快的运行速度(ms不推荐, mono的 Xamarin, Unity还不错):编译成IL中间语言,CLR公共语言运行库托管代码,CLR根据运行时程序需要将IL中间语言用JIT即时编译方式编译为内部机器代码,对编译好的机器代码缓存起来,提高了程序速度。
; h+ z9 h2 e. N% R5.代码安全性" H+ @# i1 S0 E0 j9 M( [6 G
window是基于角色的安全机制,.net提供了基于代码的安全机制,由于中间语言提供了类型安全性,CLR在运行前检查代码,确定是否有需要的安全权限,CLR没有权限则不能执行该代码。
/ J3 Y0 c3 V( s% a; j! z, ~ A% C {
C#/.NET缺点:7 O" y, _$ N! f l( Q
1.底层和高性能不合适
+ f% X Z- k' P' G不合适做时间性能很高(高速算法)或空间性能很灵活(内存立即释放)的程序,因为中间语言和编译过程,比C/C++Native类型的语言会慢一些,内存自动回收难以立即释放不需要的内存,不采用内联函数和析构函数(不建议)。
/ B& K' Q# G: P/ B* y1 ]2.Windows平台以外支持有限
3 c" ^6 k! P$ _% h% Qmono不够成熟好用,window以外Java,Python等是很强大和同样优秀的。: t, ^- @% a2 E# t c# x2 E% n
6 f' }- D9 \. _* \; N五、MATLAB——一种面向数值计算的高级程序设计语言, |2 I8 Z" }& z3 t+ F
MATLAB和它的开源亲戚(例如Octave)在一些机器人专家中非常有名,是他们负责调查数据和创建控制系统常用的语言。还有一个非常有名的MATLAB机器人工具箱。使用MATLAB单独创建整个机器人系统的人员。如需要分解数据,创建高级图表或执行控制系统,那就很可能需要学习MATLAB。
7 ~, l0 t) q4 I# bMATLAB优点:
7 n9 B. M8 Q" [) g q1.编程效率高& n7 S3 `& Z3 n; f, A& q
MATLAB语言为演算纸式科学算法语言,由于它编程简单,所以编程效率高,易学易懂。
( I, ]6 X5 l4 g2 P, U6 J5 I, n2.高效方便的矩阵和数组运算' k: I' O- Y, C) k4 ?; a$ Y
MATLAB语言像BASIC、C语言一样规定了矩阵的算术运算符、关系运算符、逻辑运算符、条件运算符及赋值运算符,而且这些运算符大部分可以毫无改变的照搬到数组建的运算中。
1 x# b. v, H1 }( h( b: }MATLAB缺点:
1 V" U9 D9 J: ]: B5 _1.循环运算效率低。& N( p7 K7 {/ ^
MATLAB中所有的变量均为向量形式,这样一方面在对向量进行整体的计算时,表现出其他语言难以表现出的高效率,但是对于向量中的单个元素,或是将向量作为单个的循环变量来处理时,其处理过程相当的复杂。0 B' N! l2 j/ _4 f% g8 G
2.封装性不好。
# r- X- D+ I8 Y* ^" ^" Q一方面,所有的变量均保存在公共工作区中,任何语句都可以调用。另一方面,作为一个完备的软件,而不是实现算法的程序,编程人员在使用MATLAB时需要花相当多的时间考虑如何设计用户界面。
5 c/ D' N O8 g/ S3 g' p5 |( s6 ]5 ]9 ?本文为大家列举了机器人编程比较热门的5种语言,但这并不意味着需要全部掌握,对于开发者来说,发现一种对自身来说很自然的语言更为重要,且适合你的机器人硬件,使你能快速上手。在这里建议先学习Python,Python是一门相对简单易懂的语言,有许多有效的库可供学习,且功能非常强大。( D u7 U$ S/ z
[) |$ U& _( L3 I& w" {0 G4 a2 c3 j+ v m7 z3 N# }
|
|