这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 物联网技术 » 开启智能机器人编程神秘之旅

共2条 1/1 1 跳转至

开启智能机器人编程神秘之旅

菜鸟
2016-08-29 15:37:16     打赏
  开启智能机器人编程神秘之旅

不要等待,不要犹豫!!!马上动手,立刻拥有。属于你的智能机器人,就在你眼前。机器人神秘吗?学习机器人编程难吗?造机器人困难?接下来,每个周末,和大家一起交流机器人技术,揭开机器人的神秘面纱。打造属于你的机器人。

机器人操作系统很多,开源的也很多,我个人首推ROS,让大家一步一步了解机器人这个庞大而神秘的机器人家族。

机器人操作系统几大核心功能:

1、传感器

2、机器人导航

3、机器人抓取

4、机器人视觉

5、机器人大脑

6、机器人仿真

以上任一核心块都可以成为一个专家,需要时间的磨练。希望大家追求少而精,把技术做到极致。以ROS为例,我会陆续为大家介绍机器人6大核心功能。

ROS架构探析

一、ROS历史

ROS是起源于2007年斯坦福大学人工智能实验室的项目与机器人技术公司WillowGarage机器人项目(PersonalRobotsProgram)之间的合作,2008年后,由WillowGarage来进行推动。

随着机器人领域的快速发展和复杂化,代码的复用性和模块化的需求越来越强烈,而已有的开源机器人系统又不能很好的适应需求。2010年WillowGarage公司发布了开源机器人操作系统ROS(robotoperatingsystem),ROS很快在机器人研究领域出现研究热潮。

二、设计目标

ROS是开源的,是用于机器人的一种后操作系统,或者说次级操作系统。它提供类似操作系统所提供的功能,包含硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间的消息传递、程序发行包管理,它也提供一些工具程序和库用于获取、建立、编写和运行多机整合的程序。

ROS的首要设计目标是在机器人研发领域提高代码复用率。ROS是一种分布式处理框架(又名Nodes)。这使可执行文件能被单独设计,并且在运行时松散耦合。这些过程可以封装到功能包和功能包集中,以便于共享和分发。ROS最大限度的提高社区参与,ROS社区采用软件仓库的模式进行管理,每个研究所和组织以软件仓库为单位发布他们的代码库。这样做的目的鼓励全世界的开发者和用户,提供和维护自己的ROS代码,并且对代码有直接的所有权和控制权。上述所有功能都能由ROS的基础工具实现。

三、主要特点

ROS的运行架构是一种使用ROS通信模块实现模块间P2P的松耦合的网络连接的处理架构,它执行若干种类型的通讯,包括基于服务的同步RPC(远程过程调用)通讯、基于Topic的异步数据流通讯,还有参数服务器上的数据存储,但是ROS本身并没有实时性。

ROS的主要特点

1、点对点设计

一个使用ROS的系统包括一系列进程,这些进程存在于多个不同的主机并且在运行过程中通过端对端的拓扑结构进行联系。虽然基于中心服务器的那些软件框架也可以实现多进程和多主机的优势,但是在这些框架中,当各电脑通过不同的网络进行连接时,中心数据服务器就会发生问题。

ROS的点对点设计以及服务和节点管理器等机制可以分散由计算机视觉和语音识别等功能带来的实时计算压力,能够适应多机器人遇到的挑战。

2、多语言支持

在写代码的时候,许多编程者会比较偏向某一些编程语言。这些偏好是个人在每种语言的编程时间、调试效果、语法、执行效率以及各种技术和文化的原因导致的结果。为了解决这些问题,我们将ROS设计成了语言中立性的框架结构。ROS现在支持许多种不同的语言,例如C++、Python、Octave和LISP,也包含其他语言的多种接口实现。

3、精简与集成

大多数已经存在的机器人软件工程都包含了可以在工程外重复使用的驱动和算法,由于多方面的原因,大部分代码的中间层都过于混乱,以至于很困难提取出它的功能,也很难把它们从原型中提取出来应用到其他方面。

为了应对这种趋势,我们鼓励将所有的驱动和算法逐渐发展成为和ROS没有依赖性单独的库。ROS系统具有模块化的特点,各模块中的代码可以单独编译,而且编译使用的CMake工具使它很容易的就实现精简的理念。ROS基本将复杂的代码封装在库里,只是创建了一些小的应用程序为ROS显示库的功能,就允许了对简单的代码超越原型进行移植和重新使用。作为新加入的优势,单元测试当代码在库中分散后也变得非常的容易,一个单独的测试程序可以测试库中很多的特点。

ROS利用了很多已经存在的开源项目代码,比如说从Player项目中借鉴了驱动、运动控制和仿真方面的代码,从OpenCV中借鉴了视觉算法方面的代码,从OpenRAVE借鉴了规划算法的内容,还有很多其他的项目。在每一个实例中,ROS都用来显示多种多样的配置选项以及和各软件之间进行数据通信,也同时对它们进行微小的包装和改动。ROS可以不断的从社区维护中进行升级,包括从其他的软件库、应用补丁中升级ROS的源代码。

4、工具包丰富

为了管理复杂的ROS软件框架,我们利用了大量的小工具去编译和运行各种各样的ROS组件,从而设计了内核,而不是构建一个庞大的开发和运行环境。

这些工具担任了各种各样的任务,例如,组织源代码的结构,获取和设置配置参数,形象化端对端的拓扑连接,测量频带使用宽度,生动的描绘信息数据,自动生成文档等等。尽管我们已经测试通过像全局时钟和控制器模块的记录器的核心服务,但是我们还是希望能把所有的代码模块化。我们相信效率上的损失是管理上的复杂性无法弥补的。

5、开源免费

ROS所有的源代码都是公开发布的。我们相信这将必定促进ROS软件各层次的调试,不断的改正错误。虽然像MicrosoftRoboticsStudio和Webots这样的非开源软件也有很多值得赞美的属性,但是我们认为一个开源的平台也是无可替代的。当硬件和各层次的软件同时设计和调试的时候这一点是尤为突出。

ROS以分布式的关系遵循这BSD许可,也就是说允许各种商业和非商业的工程进行开发。ROS通过内部处理的通讯系统进行数据的传递,不要求各模块在同样的可执行功能上连接在一起。如此,利用ROS构建的系统可以很好的使用他们丰富的组件:个别的模块可以包含被各种协议保护的软件,这些协议从GPL到BSD,但是许可的一些“污染物”将在模块的分解上就完全消灭掉。

ROS总体架构

根据ROS系统代码的维护者和分布来标示,主要有两大部分:

1、main:核心部分,主要由WillowGarage公司和一些开发者设计、提供以及维护。它提供了一些分布式计算的基本工具,以及整个ROS的核心部分的程序编写。这部分内容被存储在计算机的安装文件中。

2、universe:全球范围的代码,有不同国家的ROS社区组织开发和维护。一种是库的代码,如OpenCV、PCL等;库的上一层是从功能角度提供的代码,如人脸识别,他们调用各种库来实现功能;最上层的代码是应用级的代码,叫apps,让机器人完成某一确定的功能,比如去拿酒杯。

一般是从另一个角度对ROS分级的,主要分为三个级别:计算图级、文件系统级、社区级。除此之外还有两种类型命名:功能包源名称、计算图源名称。

计算图级

计算图是ROS处理数据的一种点对点的网络形式。程序运行时,所有进程以及他们所进行的数据处理,将会通过一种点对点的网络形式表现出来。这一级主要包括几个重要概念:节点(node)、消息(message)、主题(topic)、服务(service)。

1、节点

节点就是执行计算的过程。ROS利用规模可增长的方式是代码模块化:一个系统由很多节点组成。在这里,节点也可以被称之为“软件模块”。我们使用“节点”使得基于ROS的系统在运行的时候更加形象化:当许多节点同时运行时,可以很方便的将端对端的通讯绘制成一个图表,在这个图表中,进程就是图中的节点,而端对端的连接关系就是其中弧线连接。

2、消息

节点之间是通过传送消息进行通讯的。每一个消息都是一个简单的数据结构。原始的数据类型(整型,浮点型,布尔型等等)都是支持的,同时也支持原始数组类型。消息可以包含任意嵌套的结构和阵列(很类似于C语言的结构structs)。

3、主题

消息以一种发布/订阅的方式传递。一个节点可以在一个给定的主题中发布消息。一个节点针对某个主题关注与订阅特定类型的数据。可能同时有多个节点发布或者订阅同一个主题的消息。一般说来,发布者和订阅者不知道对方的存在。

4、服务

发布/订阅模型是很弹性的通信模式,但是多对多的传输方式并不适合请求/回复的交互方式。请求/回复通过服务进行,其中服务被定义为一对消息结构:一个用于请求,一个用于回复。

在上面概念的基础上,需要有一个控制器可以使所有节点有条不紊的执行,这就是一个ROS的控制器(ROSMaster)。

ROSMaster通过RPC(RemoteProcedureCallProtocol,远程过程调用)提供了登记列表和对其他计算图表的查找。没有控制器,节点将无法找到其他节点,交换消息或调用服务。

比如订阅/发布消息模型如下:

ROSMaster给ROS的节点存储了主题和服务的注册信息。节点与ROSMaster从而报告它们的注册信息。当这些节点与ROSMaster的时候,它们可以接收关于其他以注册及节点的信息并且建立与其它以注册节点之间的联系。当这些注册信息改变时ROSMaster也会回馈这些节点,同时允许节点动态创建与新节点之间的连接。

节点与节点之间的连接是直接的,ROSMaster仅仅提供了查询信息,就像一个DNS服务器。节点订阅一个主题将会要求建立一个与出版该主题的节点的连接,并且将会在同意连接协议的基础上建立该连接。

另一模型:

文件系统级

ROS文件系统级指的是在硬盘上面查看的ROS源代码的组织形式。

ROS中有无数的节点、消息、服务、工具和库文件,需要有效的结构去管理这些代码。在ROS的文件系统级,有以下几个重要概念:功能包、功能包集、Manifests、Stackmanifests、Messagetype、Servicetype

1、功能包

ROS的软件以包的方式组织起来。包包含ROS运行过程(节点)、ROS依赖库、数据集、配置文件、第三方软件或者任何其他文件构成。包的目标是提供一种易于使用的结构以便于软件的重复使用。它可以包含任何内容:节点、库、工具、可执行文件等。

2、功能包集

功能包集是功能包的集合,它提供一个完整的功能。像“导航功能包集”,有相关版本号,是ROS软件发布的关键。

3、Manifests(manifest.xml)

提供关于功能包元数据,包括它的许可信息和功能包之间依赖关系,以及语言特性信息像编译旗帜(编译优化参数)。

4、Stackmanifests(stack.xml)

提供关于功能包集元数据,包括它的许可信息和功能包集之间依赖关系。

5、Messagetype

消息的描述,定义发送的消息的数据结构

6、Servicetype

服务的描述,定义需求和响应的数据结构

社区级

ROS的社区级概念是ROS网络上进行代码发布的一种表现形式。结构如下图所示:

ROS最大限度的提高社区参与,ROS社区采用软件仓库的模式进行管理,每个研究所和组织以软件仓库为单位发布他们的代码库。这样做的目的鼓励全世界的开发者和用户,提供和维护自己的ROS代码,并且对代码有直接的所有权和控制权。正是因为社区结构,ROS迅速发展,软件仓库中包的数量指数级增加。

ROS新手教程

ROS官网针对新手的教程很详细,新手最好把所有的教程都搞清楚,这是后面开发的基础。尽管如此,ROS对于新手来说还是很难上手。

一、ROS的安装

ROS的安装当然是我们开始动手的第一步,使用的操作系统是Ubuntu,因为ROS在Ubuntu上的支持是最好的。

如果是新手,建议使用apt-get的方法进行安装,不走很简单,按照官网说的,大概半个小时就可以安装完毕完全版的ROS

如果想挑战源代码,当然也OK:

安装完毕之后运行一下roscore,如果没有问题,安装就OK!

二、ROS新手教程

官网新手教程还是很详细的,对代码都有解释,新手一定要把这些例子和代码搞明白:

上面的教程都是英文的,如果感觉略有压力,可以参考下面这两个博客中的部分翻译:

建议看官方英文文档

ROS使用的编程语言主要是C++和Python,所以也有针对这两种语言的功能包roscpp和rospy,这两个包的教程与上面的教程基本相似,看完上面的教程也可以看看这两个包的教程:

努力学习完这些教程,至少应该明白ROS里面的节点和消息是干什么用的,如果还没理解,那就再多看几遍吧!

三、ROS常用功能

ROS中提供了很多强大的功能,学习完基本知识后继续进行深入。

1、SLMA

ROS有大量用于导航的算法,强大的导航功能和导航功能包集成为ROS最重要的软件包之一。

2、机器视觉

ROS系统,机器视觉通过添加摄像头驱动、集成OpenCV算法库、集成tf工具和一系列第三方库,其中第三方库中包含大量的视觉测量、增强现实、物体检测、智能感知等各种算法。

tf是ROS中的坐标变换系统,在机器人的建模仿真中经常用到。

ROS中主要有两种坐标系:

(1)固定坐标系:用于表示世界的参考坐标系;

(2)目标坐标系:相对于摄像机视角的参考坐标系。

3、rviz

rviz是ROS中一款强大的3D可视化工具,后面会经常用到,是必须要弄明白的,详细的教程可以参

我们可以在里面创建自己的机器人,并且让机器人动起来。可以参考下面的链接:

机器人模型是通过urdf文件描述的,urdf文件怎么写,参考:

4、gazebo

gazebo是ROS中的物理仿真环境,gazebo本身就是一款机器人的仿真软件,基于ODE的物理引擎,可以模拟机器人以及环境中的很多物理特性,

四、ROS常用机器人

1、PR2—柳树车库机器人

柳树车库公司开发了ROS操作系统,并开发了PR2机器人。如图所示,该机器人由一个头部—2个运行ubuntu和ROS的电脑、两个手臂另加一些牛逼的传感器组成。功能非常强大,它头部可调远近视距的双目视觉系统和激光雷达系统、上本身通过液压控制—抬起或下降、8个轮子可实现全向移动。该机器人可在ROS上集成,仿真环境请自行学习。

2、REEM-类人形PAL机器人

REEM由PAL公司制造,有一款采用差分轮式驱动机器人,自带一套自动导航系统,同时集成了语言和人脸识别系统,它胸前有一个操作界面进行人机交互。公司官网有很多学习资料,

3、TurtleBot—移动机器人

TurtleBot机器人集成很多简单、低成本、技术先进的硬件设备,它算是应用ROS小型移动机器人的典型代表。设备有微软Kinect传感器、Yujin公司Kobuki机器人底盘、iRobot公司一些设备。网上资料、文档和代码比较多,主要在建立模型和导航定位方面,代码比较容易理解,可以作为新手参考的最佳机器人了,上面rviz中显示的那个机器人就是它了。



4、R2—NASA敏捷型人形机器人

R2是美国航空航天局开发的第二代敏捷型人形机器人,它帮助宇航员完成空间任务,它操作敏捷,主要由多自由度手臂和机械师组成。

5、Husky—Clearpath轮式机器人

HuskyA200,Clearpath是柳树车库一家子公司。它由可旋转摄像头、GPS、ROS。

同样可以作为新手学习的参考:

强调一下,基础很重要哦,先熟悉教程,可以一边做一边学习。

好了今天到此为止,基础好好练习。下周为,没有实体机器人的朋友介绍另外一种办法——仿真机器人,让你拥有一款属于自己的机器人。

不要等待,不要犹豫!!!马上动手,立刻拥有。属于你的智能机器人,就在你眼前。机器人神秘吗?学习机器人编程难吗?造机器人困难?接下来,每个周末,和大家一起交流机器人技术,揭开机器人的神秘面纱。打造属于你的机器人!!!




关键词: 机器人    

院士
2016-08-29 23:47:01     打赏
2楼
哇~~ 看上去 机器人很是火啊~~

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]