基于硬件的建模方法
1 引言
多机器人协作系统设计研究这一新兴领域对于实际应用具有重要意义且极为相关。在许多情况下,由于机器人感知、技术限制(如识别视场[1]或响应时间[2])、执行精度以及仿真精度等原因,软件仿真后立即进行算法实现存在困难。所讨论的研究系统提供了介于仿真与真实系统之间的中间步骤,使通用算法更贴近特定硬件。
传统算法开发过程如图1所示。该过程包含从仿真环境到硬件的算法适配步骤,相对耗时且容易出错,可能导致开发过程的每次迭代都不可靠。所提出的研究系统采用了一种不同的开发流程,如图2所示。由于研究硬件与仿真环境之间具有更紧密的耦合,该方法可缩短算法开发的迭代周期。附加的开发方法也可应用于研究系统,例如全局集中控制,在实验环境中可获取全局位置信息,或基于实时反馈[3, 4]进行系统调优。研究人员和商业公司已开发出多种教育和研究用硬件系统:RoboCup( http://www.robocup.org)系统、FIRA( http://www.fira.net)、SwarmBot( http://www.swarmrobot.org)等。所有这些项目均用于多机器人系统的算法研究与开发。与上述项目不同,所讨论的系统配备了主动测试区域、先进传感器子系统以及将红外通信与射频模块融合的IR+RF通信模块,以消除协作任务中对外部计算或导航模块的依赖。
本文描述了主要部分的架构、硬件、固件和软件开发
硬件建模系统——用于协同算法研究的第二代移动自主研究机器人。该机器人与ePuck( http://www.e‐puck.org)教育机器人的简要技术规格对比列于表1中。有关第一代的详细描述,请参见[5]。
该移动机器人(图3)由8个测距仪、一个无线电通信模块、2个红外(IR)定位器(能够检测特殊的红外信标)、一个定向红外通信模块、2个编码器、2个直流电机以及一个指示与通知系统组成。集成多种传感器是出于在没有外部校正的情况下实现内部导航的需要。因此,该研究系统可用于结构相似任务的算法研究,其中无法获取外部导航数据(如全球定位系统、外部信标系统、 RFID标记等)。双向通信系统IR+RF的集成提供了机器人组内交互的充分机会。无线局域网通信可作为选配模块,并可结合选配的树莓派单板计算机以扩展计算能力。
本文的结构如下:第1节描述了移动机器人的机械部分及简要技术特性;第2节解释了机器人电子系统的工作原理;固件与软件架构在第3节中进行描述,而第4节对全文进行总结。
2 硬件架构
该移动自主研究机器人的电子硬件部分包括:
1. 两个单路直流电机驱动模块(D类电机放大器)
2. 电池充电模块(电池充电模块)
3. 传感器模块(传感器阵列)
4. 无线电台(无线电台)
5. 外围设备模块:蜂鸣器、LED和其他设备(外围设备)
6. 电源单元(电源)
7. 主处理单元(LPC17xx微控制器模块)
硬件架构图如图4所示。两个直流驱动电机均对称地配备了D类电机放大器。连接器P1和P2提供来自充电站和电池的电源。连接器CN1实现USB连接,用于固件下载以及与机器人之间的数据流传输。连接器P3和P4用于连接两个车轮的脉冲增量编码器。
主处理单元(图5)基于LPC1769,这是一种用于嵌入式应用的Cortex‐M3微控制器,具有高度集成和低功耗特性,运行频率为120 MHz。单片机由OSC1实时时钟32.768千赫和OSC2主12.0 MHz晶体共同提供时钟信号。
DIP开关SW2 A‐D用于配置机器人的独立地址。
R2‐R12是用于USB连接的接口匹配电阻,而Q10用于设备和OTG模式中的USB检测。当USB和无线功能被禁用或没有引导加载程序可用时,ISP模式用于闪存重新编程。
P13是一个ISP跳线,ISP UART在P12连接器上可用。
L2‐C24和L3‐C26构成低通滤波器,分别用于模拟电源和参考输入上的高频噪声纹波抑制。所有未使用的GPIO引脚都连接到P10连接器,额外的I2C和SPI接口分别连接到P8和P9。按键开关SW1用于激活USB引导加载程序。
电源模块中使用的升降压开关式DC‐DC转换器TPS63001,能够利用锂离子电池的全电压范围(从3.4V到4.2V),并提供稳定的3.3V系统电压供电。
电池充电电路基于充电控制器IC MAX1555,采用USB Vbus电压和5V独立输入(连接器P1)作为电池充电的电源。CHG_DETECTION信号用于检测模块的充电状态:充电时为逻辑0,否则为高阻态。电池为锂离子单节电池,通过P2连接至主板。滑动触点用于外部充电站对接。
基于硬件的建模方法 | 33
| 元件 | AMRR技术信息 | ePuck技术信息 |
|---|---|---|
| 处理器 | LPC1769,ARM Cortex‐M3 @ 120MHz | dsPIC 30 CPU @ 30 MHz |
| SRAM | 64 kB | 8 KB |
| 闪存 | 512 kB | 144 KB |
| 运动驱动 | 差速,2个直流电机 | 差速,2个步进电机 |
| 速度 | 0.3 米/秒 | 0.13 米/秒 |
| 传感器 | 编码器, IR信标传感器, IR测距仪 | 编码器, 红外测距仪, 光传感器, 彩色摄像头,3D惯性测量单元,麦克风 |
| 额外输入/输出 | I2C,SPI,USB,GPIO | ? |
| 电源 | 单节锂离子/锂聚合物电池,800毫安时标称 | 锂离子电池,3小时自主运行 |
| 通信 | 2.4吉赫兹 SimpliciTI / ZigBee, IR, USB, 带可选模块的无线局域网 | 带可选模块的ZigBee |
| 充电 | 通过USB或底座充电 | ? |
| Size | 60 × 120 × 120 mm | 60 × 70 × 70 mm |
| 重量 | 不含附加组件约300克 | 660克 |
| 模拟器 | Player/Stage 项目附加一个软件包 ENKI, WEBOTS, V‐REP | - |
| 开发环境 | GNU C/C++编译器 | C 编译器 |
传感器模块包含多个光耦D1‐U10、D2‐U11以及至D8‐U17,它们构成红外接近反射感应单元,分布在机器人的边缘。所有二极管通过相应的MOSFET开关Q1‐Q8驱动,并由单片机控制。感应电压连接到单片机模数转换单元的模拟输入端。距离测量分为两个步骤:在无背光的情况下测量环境光,以及在LED提供背光的情况下测量反射光量。距离计算公式为:
$$
r=\sqrt{f\left( \frac{1}{M_2 - M_1} \right)}
$$
其中,$ r $ 表示在视场内到最近物体的测量距离,$ M_1 $ 和 $ M_2 $ 分别表示有背光和无背光时感应到的电压,$ f() $ 为测距仪校准函数。由于多边形部件的颜色和属性基本相同,在经过一轮校准后,可获得相对稳定的测量结果[6]。机器人自身也计划采用相同的材料覆盖,以确保在机器人与障碍物之间的测量准确性。
为了扩展本地计算能力并增强与无线局域网的通信能力,可以安装一个可选的树莓派控制器(如图2最大配置中所示),并通过UART连接到主机器人PCB。
3 软件架构
3.1 仿真软件
仿真软件( https://bitbucket.org/duprein/swarm‐control/src/)在普通PC环境中运行,并操作实际硬件的数学原型。图6展示了仿真机器人与真实机器人的俯视图。测距仪沿机器人周边分布的方式与物理硬件类似:机器人前部有五个,后部有三个。
软件使用C++编写,作为Player/Stage( http://playerstage.sourceforge.net)仿真环境的扩展。
图7展示了包含部分类和方法的结构。2D仿真器模块负责可视化以及系统响应建模,包括传感器响应部分。服务器用于在多边形仿真控制模块和2D仿真器模块之间建立连接。
多边形仿真控制模块为所有模拟设备提供互操作性,包括接口、物理位置对齐和交互逻辑,并处理物理碰撞过程。每个所示类用于实现对象相关的功能:Robot类——代表机器人功能,Workpoint——执行任务仿真的目标点(例如待搜索的信标),Charger——充电用对接站。模拟器的主循环构建方式使得模拟对象的数量可以轻松变化,包括动态更改。
在 Robot 类中实现了依赖于机器人的功能:通信方法、控制方法和传感器数据处理等。这种实现结构使得可以在物理机器人上以跨平台的方式直接重用部分代码。
对于机器人控制,可以使用附加例程,例如通过库机制连接到模拟器环境的神经网络控制器或模糊逻辑控制器:libfann(http://sourceforge. net/projects/fann/) 用于神经控制器, libfuzzylite(http://code.google.com/p/fuzzy‐lite/) 用于模糊逻辑控制器。
仿真环境控制过程通过循环调用多边形管理和机器人控制方法来实现。需要调用的方法集合被称为环境的用户部分,可根据仿真的需求进行更改和调整。
多边形管理方法为属于该多边形的所有非机器人对象实现功能。机器人控制方法实现了一种机器人控制例程,该例程在仿真所考虑的组内所有机器人中完全相同。
这两种方法的简化数据流图如图8所示,其中机器人控制算法的输入为传感器数据和通信数据,输出为电机控制数据和通信数据。至于多边形控制算法,它以对象位置和对象状态作为输入,并在每一步生成对象的新状态。
图9展示了对所仿真的多边形的俯视图,其中a为二维可视化,b为三维可视化。在英特尔酷睿双核 1.66GHz,1GB内存,Linux Ubuntu 9.04计算机上,包含单组对象(即仅一个机器人)的仿真环境的平均循环时间约为650微秒,而可视化循环时间和客户端‐服务器交互耗时为17毫秒。循环时间的最大部分来自机器人仿真与可视化,该时间随机器人数量线性增长[7]。这一特性使得模拟由6个机器人组成的机器人组时,平均循环时间约为100毫秒。但在关闭可视化的情况下,可获得高达10倍的加速,这对于长期仿真非常重要。
3.2 固件架构
机器人软件采用多层结构组织,如图10所示:顶层实现所研究的算法,该算法运行在异步事件驱动框架之上,该框架提供对异步通信中间件和硬件抽象层(HAL)的访问。
被研究的算法将以与硬件无关的方式编写,运行在包含里程计输入、机器人速度、发送给其他组成员的消息等操作系统参数的系统上。底层将这些接口连接到硬件,并创建出在此系统中运行被研究的算法的能力。通过该系统拟研究的算法示例包括机器人组群集体搜索算法、组群区域覆盖算法和组群任务分配算法。
3.3 异步框架
异步事件驱动方法目前正作为传统多线程同步方法的一种高性能替代方案,在不同技术领域中受到越来越多的关注。异步方法没有上下文切换开销,减少了对锁原语的依赖,使机器人软件能够实现更及时的响应。但这些相较于传统线程的改进是以改变编程范式为代价的。异步框架引入了事件和事件处理器,以取代传统的同步过程。事件可由用户空间软件或硬件驱动发出,例如当测距仪驱动完成新距离数据的采集和处理时。软件可以利用事件来周期性地或在固定时间偏移下执行例程。
该框架专为内存、中央处理器和电源资源有限的嵌入式应用而开发。低功耗模式支持、静态分配的内存使用以及纯C语言实现是该框架的主要特性。
3.4 通信层
通信层是一个事件驱动的软件库,用于抽象网络IO例程并提供群内通信的便捷方式。通信层采用非阻塞事件驱动接口,而非传统的阻塞式BSD套接字类接口。图11展示了通信层内部结构的主要组成部分:通信API为上层的异步框架提供事件驱动的前端,协议API负责将数据封装成数据包,并在使用时处理认证,序列化‐反序列化器将协议层准备好的数据转换为字节数组,并将其交给传输层,通过网络发送给接收方,在接收方整个过程将逆向重复进行。
3.5 硬件抽象层
硬件抽象层图12为机器人的所有外设实现了驱动和应用程序编程接口。电机驱动基于增量编码器的数据实现了PID控制器和里程计测量。它接收左右轮的目标速度 (ωL, ωR),并输出x、y、 α(方向角)以及行驶距离。
无线电驱动为输入和输出消息实现FIFO队列,并提供传输完成和接收完成标志。无线电驱动API通过通信层使用。测距仪驱动实现带有滑动平均滤波器和背光补偿的距离感知功能。每个驱动都能通过“pwren”(电源使能)API调用来管理相关硬件部件的功耗,从而便于管理机器人的整体功耗。
3.6 测试区域软件
测试区域(图13)软件(https://bitbucket.org/ snegovick/dswarm/src/)包含视觉跟踪soft-
每个机器人上都标有唯一的二维码,顶部摄像头会识别这些二维码。跟踪软件将机器人的位置和姿态轨迹写入持久存储,以便后续分析,并将当前值广播给网络客户端。
无线电监控软件类似于跟踪软件:它监听机器人的无线电通信,存储接收到的数据,并将其广播到网络。
可视化软件消耗广播数据,并为实验人员的分析可视化实验当前状态。广播还用于实验数据处理应用,这些应用可以在多台机器上运行,以实现实时自动化分析。
4 结论
本文提出了一种群体机器人系统的建模方法。一种算法设计过程,一种事件驱动的机器人软件设计,一个配备了先进传感器子系统的原始自主移动研究机器人,所有这些创新使该项目对新研究具有吸引力。集成的专利[8]异步无线射频与红外通信系统,提供了在进行数据交换的同时实现机器人相对定位的可能性。上述理念的结合使得算法能够更快地转移到实际机器人硬件上,并实现更可靠的软件设计。所提出的算法设计过程旨在使算法适应实际硬件的时间更少、错误更少,并通过在仿真机器人和硬件实现的机器人中使用相同的软件,促进仿真软件与机器人硬件之间的深度耦合。软件设计中的事件驱动方法可以创建高性能且响应迅速的机器人应用;或者,如果功耗降低更为重要,事件驱动异步设计的单线程特性也便于更轻松地切换到睡眠模式并从中恢复,同时也有利于离散模块的电源管理。
3341

被折叠的 条评论
为什么被折叠?



