目录
一、提要
在下文中,与机器人,通信,相关的最新作品,并描述了快速原型框架,突出了它们的目标,体系结构和典型使用方案。通过分析他们的优势和缺点,我们将说明高层之间还有一个缺口需要填补在功能强大的计算机上运行的框架,以及那些主要运行的框架专注于硬件或通信方面。这些观察结果将引出我们的建议,将在下一章中说明。
二、对快速原型框架的需求
机器人开发是一项真正的多学科任务,主要涉及机械结构,电子设计,软件工程和人工智能。这些学科中的每一个都需要自己的环境来构建一个完整的机器人,需要时间,计划,硬件和操作。相反,机器人研究人员应该以快速,廉价和简单的方式构建新想法。因此,需要提供友好的环境,以减少构建新想法的资源需求,不一定是优化的最终形式,但至少是有意义的近似。
此外,机器人的大多数部件,无论是物理的还是虚拟的,都有一个共同的设计,因此,可以构建机器人原型而无需从头开始重新设计所有内容,而是通过组装预制零件。事实上,通过将开发划分为特定目的的任务,设计,操作和维护整个系统比每次都重新发明轮子容易得多;这是任何领域众所周知的策略。预制部件共享一个定义良好的接口,并且它们已经过测试制造商,由于大规模生产,可以保持较低的价格。
三、关于ROS
在我们的工作中,我们将主要关注快速的软件环境机器人开发。这样的环境以框架的形式出现,其中是用户用来构建复杂软件的工具和库集一些小的和特定目的的部分。例如,要控制一个机器人,它是需要从传感器收集数据、推理其值并生成执行器的命令。
一种直观的方法是为每个传感器连接一个软件到一个虚拟大脑(甚至多个),然后连接到
每个执行器的软件组件。这样的框架通常提供底层通信子系统,用户模块可以与之通信通过定义明确的 API。
最普遍的框架也提供了一些常用的模块,像用于图像处理、机械臂操作、里程计等的那些,以及一些简化开发和调试的工具。
3.1 机器人操作系统
机器人操作系统(ROS [22],图 2.1 中的标志)是一个元操作系统针对机器人软件的快速发展,由柳树车库。它已经成为一个非常普遍的框架,可能是研究领域中最活跃和采用的一种,提供了大量的预制包。它的源代码是在修订后的 BSD 许可证下发布的,所以它可以被爱好者和机构自由修改和使用,但是也由商业公司提供;顺便说一句,有些软件包是在下面发布的更严格的许可证,如通用 GPL。它本机在 Ubuntu 上运行Linux,但对其他类 Unix 操作系统有一定程度的支持。
ROS 客户端(核心)库主要用 C++、Python 和 Lisp 编写,具有对 Java、Lua 和 Mono / .NET 的实验性支持。
3.2 架构 ROS 框架是高度模块化的。
使用 ROS 开发的软件由一组节点组成,这些节点是提供非常具体的接口和操作的虚拟处理元素。例如,存在用于精化点云的节点,用于从立体图像中提取几何图元的节点,其他用于路径规划、人工智能、运动控制、与常见外围设备(例如,操纵杆、Microsoft Kinect、激光扫描仪、伺服电机)等。
节点本身没有什么目的,但是通过将它们连接在一起可以构建一个非常复杂的机器人应用程序。节点通信通过发布/订阅技术。产生某种数据的节点通过特定类型的主题发布它,以及那些需要这些数据的节点通过订阅该主题来接收它;图 2.2 描述了这个概念。
ROS 支持通过主题的连续数据流,同时也支持请求/响应对全局服务的调用,以及共享的环境参数。
节点网络(称为计算图)的设置和控制是通过基于 XML-RPC 的协议制作,确保最大的可移植性在具有 TCP / IP 功能的任何平台中;有一个中心节点,Master,负责监督整个网络。相反,主题和服务数据流采用自定义的低级协议,该协议通常基于 TCP,但也基于 UDP 用于延迟敏感的应用程序。深入的信息关于 ROS 通信系统可以在第 4 章找到。
使用 ROS 开发的软件可以分为堆栈和包。 ROS 包是一个软件容器,它提供了可以轻松重用的特定功能。例如,存在用于特定传感器或特定识别算法的包。一个包可能包含 ROS 节点、与 ROS 无关的库、数据集、配置文件或任何其他逻辑上构成有用模块的东西。堆栈是具有共同目标的包的容器;例如,计算机视觉或运动规划。堆栈可以依赖于其他堆栈,以便独立维护。一些规则定义了包和堆栈的文件系统结构,因此它们可以通过基于 CMake 构建系统 [5] 的自动化工具链构建,从而使代码保持良好的组织和不同的人可维护。
四、开发过程
使用 ROS 开发机器人软件很简单。用户必须知道如何在 ROS 元文件系统和工作区(文件夹
其中包括包源代码),如何创建一个节点,以及如何制作它与计算图的其余部分通信。这个知识库是在 ROS Wiki [25] 中有详细记录,以及自动命令集meta-OS 缩短了准系统应用程序的创建时间。
然后,用户必须概述机器人的软件功能。大多数时代,已经存在一些提供它们的ROS包,所以它是通常只是从官方存储库中选择正确的问题。如果有些缺少功能,可以轻松编写特定用户节点,这要归功于对常见高级语言的良好支持;通常,C++ 用于高性能,Python 的简单性和 Lisp 的人工智能。
从节点中写入用户应用程序后,工作区必须是通过使用自动包编译编译成二进制形式由 ROS 定义的流。然后需要实例化和连接节点通过启动文件一起。
如果需要,开发人员可以捕获内部交换的数据计算图得益于一组调试工具。他们可以检查网络的当前状态,或记录流以供进一步分析、阐述、和重播。
4.1 开放机器人控制软件
开放式机器人控制软件 (Orocos, [4]) 是一个软件框架,用于 实时机器人的控制,主要是工业机器人。它是用 C++ 编写的 在 GNU Lesser GPL 下。其目标是为复杂的机器人控制和机器提供高度模块化、高性能、易于使用的框架 学习。存在一些基于非实时控制的后代项目Orocos.
4.2 架构
该框架分为以下库,按图 2进行分组:
- Orocos 实时工具包 (RTT)、
- Orocos 组件库 (OCL)
- Orocos 运动学和动力学库 (KDL)
- Orocos Baye sian 滤波库 (BFL)。
RTT 提供基础设施和在 C++ 中构建机器人应用程序的功能。重点是实时、在线交互和基于组件的应用程序。
OCL 提供一些准备使用的控制组件。组件管理和提供用于控制和硬件访问的组件。
KDL 是一个 C++允许实时计算运动链的库。
BFL 提供了一个用于在动态贝叶斯网络中进行推理的独立于应用程序的框架,IE。基于贝叶斯的递归信息处理和估计算法规则,如(扩展)卡尔曼滤波器、粒子滤波器(序列蒙特方法)等。
作为一个模块化框架,Orocos 应用程序是由联网的特定用途的组件。使用基于 CORBA 的通信系统用于网络的设置和控制,使应用程序遵循有效的软件工程方法。有五种不同的(和可选的)方式可以连接一个 Orocos 组件,如图3 所示:通过它的属性(运行时可修改的参数)、事件(执行的函数发生变化时)、方法(即时结果函数)、命令(达到目标的过程)和数据流端口(线程安全的非/缓冲数据传输通道)。除了定义上述组件通信机制,Orocos 允许组件或应用程序生成器编写使用这些原语的分层状态机;这是奥罗科斯的方式定义应用程序特定的逻辑。状态机可以(卸载)加载到在任何组件中运行时。
4.3 开发过程
Orocos 社区已经提供了预制组件,用于创建用户应用程序;否则,必须编写自己的组件。可以通过 XML 属性或命令/方法设置应用程序接口。
五、轻量级通信和编组
轻量级通信和编组框架(LCM,[12]),由麻省理工学院开发,提供了非常高的性能通信系统通过 UDP/IP,使多个进程可以以高吞吐量和低延迟交换数据。它专为非常复杂的机器人软件,需要优化通信以模块化的方式满足软实时约束,并且具有最小要求。最突出的应用是 2007 DARPA Urban挑战 [12],其中 MIT 团队通过运行来管理一辆自动驾驶汽车70 个并发进程分布在 10 个联网工作站上,异构网络流量(涉及近 100 种数据类型)。它也被使用用于空中、水下和陆地机器人。
一组工具有助于开发用户应用程序,并且由于协议设计,它们对网络性能几乎没有影响。 LCM 支持 C、C++、Java、Python、MATLAB 和 C#,因此它可以原生用于许多操作系统并用于不同目的(高性能、原型设计和仿真)。它是在 GNU Lesser GPL 下发布的。
-
struct
waypoint_t {
-
2 string id;
-
3
float position[
2];
-
4 }
-
5
-
6
struct
path_t {
-
7
int64_t timestamp;
-
8
int32_t num_waypoints;
-
9
waypoint_t waypoints[num_waypoints];
5.1 网络建筑
LCM 是一个网络通信框架,其中一个网络节点通常是操作系统的单个进程。这保证了隔离每个节点的内存地址空间,这有助于保持应用程序安全且易于维护。节点通过一个发布/订阅方式,节点可以发布或订阅主题。
由于不需要集中控制,主题是无状态的,减少了协议和软件复杂性。 LCM 仅使用 UDP 多播消息,因此全网消息一次发送,随数量伸缩性很好的节点。 UDP是一种直接基于IP的尽力而为的协议,所以有根本没有流量控制。丢弃的数据包不会重新发送,从而减少延迟连续的数据包,从而使软实时应用成为可能。如果流需要控制,可以在更高的网络层实现。
一个主题的消息必须是相同的数据类型。类型描述符是用一种简单的类 C 形式语言编写,这样一个工具就可以生成原生的LCM支持的所有语言的源代码。每条消息的标题通过其类型描述符的 64 位哈希码,为每个正在接收消息。清单 2.1 显示了路径规划的示例消息类型,使用 LCM 定义的自定义类 C 语言进行描述。
图 2.5 的网络调试器 lcm-spy 简单地订阅所有通过网络交换的主题,并可视化消息内容
(语法由类型描述符推断)。由于多播协议,调试器对网络几乎是完全透明的。也可以录音网络流量,可以对其进行分析或详细说明以供以后重播。
5.2 开发过程
要为 LCM 构建应用程序,开发人员必须概述所需的主题和消息类型。为通过 LCM 提供的生成器选择编程语言。这然后应将应用程序划分为子进程,每个子进程提供一个特定的逻辑功能。然后,开发和运行流程。
由于没有集中的构建工具链,也没有任何特定的规则源代码组织,一切听用户诉求。 LCM只是一个通信框架,对提供预打包模块不感兴趣,也没有定义软件工程规则。
六、快速机器人原型
快速机器人原型(R2P,[2])是一个硬件/软件框架,用于机器人学研究。它被设计成低成本、轻量级、易于使用、并具有实时功能。这个想法是为了缩短开发时间通过使用小型且廉价的硬件来研究新的机器人设计模块。果然大部分时间都花在了开发上机械、电子和它们的固件从头开始,而不是在开发实际的机器人应用程序,即使是简单的设计 [2]。经过给研究人员一套机器人中常见的硬件模块,实时通信和操作系统,以及一套开发工具,可以在更短的时间内制作出可工作的物理原型。 R2P 是最用于快速机器人原型设计的有前途的混合硬件/软件框架。
6.1 系统构筑R2P
具有混合的硬件/软件性质。它采用发布/订阅技术就像其他最先进的框架一样,用于物理节点(板)和虚拟节点(进程内)之间的通信通讯)。该框架是用C++编写的,目前支持ChibiOS / RTOS [6]。
R2P 硬件模块是一个提供基本功能的微型板,例如直流电机控制,13-dof IMU(3 acc + 3 gyro + 3 mag +气压计 + GPS)、超声波或通用 Sharp 距离传感器、以太网网关等。此类板通过 CAN 总线连接以太网跳线,得益于 CAN 的高可用性和低成本控制器和以太网电缆。 CAN总线允许实现硬实时消息循环,也广泛用于恶劣环境,如与汽车和工业领域一样,这是一项成熟的技术。
互连电缆承载差分 CAN 信号和 5 V 电源用于低功率(高达极少安培)电路的导轨;如果高电压或电流需要(例如,对于直流电机),则必须添加辅助电源到设计。图 2.6 显示了一个自平衡机器人的架构,TiltOne [20],它使用 R2P 网络从传感器收集数据并驱动电机,连接到外部工作站用于调试和用户控制。
主题调度分为三种:硬实时、软实时和非实时。硬实时主题利用 CAN 规范定义的硬件优先级数据包仲裁。它们的消息由一个时间触发的调度程序安排,由一个集中节点托管(在所有节点中公平选举)。声明了调度器的固定时间片,并被分割成时间片,每个时间片最多分配给一个控制环发布者;这构成了硬实时控制循环消息的(固定)调度策略。软实时由 Earliest Deafline First 调度器满足,应用于硬实时调度器的空闲时间片;这对于具有软实时要求的零星或低延迟事件很有用。任何剩余的空闲时间片都可用于交换非实时主题消息。由于 CAN 总线固有的广播特性,可以使用对网络完全透明的数据包捕获工具。同样,一组标准工具允许实时记录和分析交换的消息,以及记录和回放功能。
6.2 开发过程
机器人研究人员在愿意构建新物理时可能会选择 R2P原型的想法。研究人员应首先概述硬件要求正在开发的结构;例如,对电机的需求、距离传感器、连接 Wi-Fi 的桥梁等,建议适当的预制
要使用的 R2P 硬件模块。否则,设计定制板是相当简单,只需要一个CAN总线接口,几乎在
所有最新的微控制器。在选择或设计正确的硬件模块后,用户必须编写他们的固件应用程序;简单的 R2P API 使自定义的编写固件比较简单。 R2P 路线图提出了一些代码生成器,它们将自动生成开箱即用的工作应用程序模板,并且一种高级脚本语言,适用于那些不太了解的用户固件编程;这反过来将有助于将 R2P 应用程序移植到不同的嵌入式平台。
框架比较和观察 之前描述的所有最先进的框架在某些领域都表现出色,但它们在其他领域也表现出不足。 ROS 是开发机器人研究软件的最佳选择,这要归功于其庞大的即用型算法库和自动化开发过程。作为一个非常活跃和成功的项目,可以快速修复错误,庞大的用户群可以使库进一步增长。相比之下,高级语言和协议的使用使其不适合简单且廉价的机器人,例如学生或业余爱好者负担得起的机器人,需要运行功能适中的计算机(无需微控制器)。
Orocos 完全遵循软件工程原则,这有助于长期、高质量的实时机器人控制。这样比较合适
用于工业级机器人,而不是新想法的快速原型制作,也因为相对复杂的软件架构(如果与 ROS 相比)。
LCM 是一个非常高效的通信框架,它可以适应任何支持 UDP 的计算机,从工作站到嵌入式系统。虽然简单性和性能是这个项目的主要特点,它只是一个通信系统,缺乏任何更高级别的功能,例如即用型机器人算法、自动化工具链,甚至 UDP 上的服务质量本身。
R2P 是一种有前途的快速发展的混合硬件/软件系统新的机器人创意,它是轻量级的,实时的,并且针对廉价的嵌入式系统。尽管具有几乎即插即用的特性,但它并不提供任何更高级别的库,减少对新手的吸引力。
总体而言,有些框架在软件/通信级别或较低/硬件级别都很好。我们找不到最先进的框架,可用于所有这些级别之间的快速原型设计。
事实上,研究人员只能在开发的某些阶段快速和协助,而其他阶段目前仍需要单独完成。表 1
总结了最先进框架的特性。
这些观察促使我们勾勒和开发一个框架,与 ROS 计算图的接口,以利用其高级快速原型功能,但仍可以在廉价的嵌入式系统上运行,例如 R2P以太网网关模块。第 5 章中说明的建议可以满足高级和低级快速原型设计之间缺少联系。
(未完再续)
转载:https://blog.csdn.net/gongdiwudu/article/details/127348631