通过Zigbee实现机器人定位与控制 写于: 星期日 12 三月 @ 14:11:28 |
||||||||||||||||||||||||
这篇文章描述了如何利用Zigbee无线节点来同时实现机器人定位与控制,试验使用了WowWee公司的Robosapien(史宾机器人)类人机器人。Zigbee节点输出机器人的控制控制信号。同时,作者开发了一个简单的GUI(图形用户界面)来控制Robosapien机器人。 通过Zigbee实现机器人定位与控制 这篇文章描述了如何利用Zigbee无线节点来同时实现机器人定位与控制,试验使用了WowWee公司的Robosapien(史宾机器人)类人机器人。Zigbee节点输出机器人的控制控制信号。同时,作者开发了一个简单的GUI(图形用户界面)来控制Robosapien机器人。
故事的开始: 想象一下这种情况:你在超市中对比不同牌子的果酱的成份时,当你在阅读其中一瓶的说明时,瓶子从你的手中滑落到地上,在你眼前的是满地玻璃碎片和果酱。正在你思考该通知谁的时候,一个小型的轮式机器人进入了你的视野。 机器人停在你附近,对现场进行评估。随后,另外两个机器人到达,其中一个高效地铲除玻璃碎片和果酱,另一个在清洗地板。第一个到达的机器人则在监视。几分钟之后,清扫完毕。同时,超市管理者已经得知了这起"意外"。 这个机器人团队是自主机器人(autonomous robot)团队研发领域的结果。这个有趣的领域包括了如何组合多种不同的机器人,并让他们合作来完成各种不同的任务。例如在上面说描述的情形中,第一个到达的机器人首先应该确定需要做什么工作,并在调查之后通知其他两个机器人。而在这个机器人团队了,不但有某种可以清扫地板的机器人,还有可以完成搬货、引导等机器人。 开发这些机器人团队并不是一个简单的任务,无数问题困扰着科研人员,其中一个就是机器人定位,这也是移动机器人(mobile robotic)研究中关键的问题之一。在本文中,我们将讲述如何实现一个基于ZigBee的机器人定位与控制方案。
系统概括: 短程无限通信网络802.15.4/ZigBee是实现定位的一个好选择。除了低价格、低耗损之外,ZigBee还能为其他任务,例如机器人控制,机器人相互通信,提供足够的带宽。我们在实验中使用了Freescale公司的ZigBee评估板MC13192以及WowWee公司的类人机器人Robosapien 1.0。实验中,我们利用了评估板的3各节点发送机器人控制命令的同时,通过信号强度来为机器人提供定位信息。 除了ZigBee评估板之外,我们还使用了3个加速器传感器(同样来自Freescale,MMA6261Q 用于X, Y轴,MMA126OD用于Z轴),系统安装图如图1。这个系统还包括了MC13192 SARD板,让PC可以通过RS-232与另一个MC13192评估板的通信。
图2展示了系统中的三个ZigBee节点。我们使用的通信模式为广播模式(broadcast model),在这种模式中,发送者和接收者都没有分配特殊的地址,在每个发送的信息包的前面添加描述这个信息包的附加信息。 图2―系统中的三个ZigBee节点(标示为R[Robosapien], T[Third],和C[Computer]),箭头表示发送信息的方向
定位原理: 定位处理相当直观:Robosapien节点(R)不断发送包含加速度传感器的信息,计算机节点(C)和第三个节点 (T) 接收信息。(在这次实验中,并没有使用加速度信息 ,不过在文章的后面,我们将描述如何利用这些信息提高这个系统。) 当信息包成功被接收,信号强度将可以通过PLME_link_quality方法来读取,这个方法可以从Freescale提供的代码中找到。当第三节点(T)完成了强度的读取,它将生成一个包含信号强度(我们表示为强度RT)的信息包,并发送给计算机节点。在计算机节点(C),可以通过PLME_link_quality方法获取信息强度RC,这两个强度信息将通过串行口发送给计算机。 当计算接收到这两个强度信息后,由于噪声及信号强度的非线性,无法通过几何方法直接计算机器人位置,所以计算机首先将估计机器人在某一个位置。 噪声是相当大的,在机器人保持不动的情况下,如果仅仅简单计算距离,每次的结果可能相差数米。为了克服这个问题,我们使用了蒙特卡罗定位技术(Monte Carlo localization technique)来计算机器人为止,下面,我们将介绍如何利用“粒子”滤波器(particle filter)来降低机器人位置的不确定性。
软件编写: 我们通过Java来在PC上实现串口数据接收,接收回来的数据将自动倒入到我们已有的定位模型。这个定位模型建立在“粒子”滤波器(particle filter)之上,详细请阅读Sebastian Thrun等人著写的Probabilistic Robotics 。“粒子”滤波器的原理是:首先在观察的范围内撒播随机的样本(成为粒子),每一个粒子表征机器人位置在某一个位置的可能性(概率)。 在每一个时间步,每一个粒子将被重新评估,新的概率将由ZigBee信号强度来决定。低概率的粒子将重新分布在高概率粒子附近。这是通过建一个关于每个粒子的概率(这里使用的是归一化概率,normalized probabilities)的累加图来实现的,请看图3。这个累加图随后将被随机采样,从而建立一个可以预示粒子在下一个时间步里分布的直方图(histogram)。粒子集中的位置就是机器人最有可能在的位置。
当粒子重新分布在新的位置上,我们将在每一个粒子的位置上加入少量的随机噪声,这样它们就不会集中在某一个上,而是集中在某一个小区域中。 这将有助于在我们的模型中保留一点自由度,从而更接近于现实世界。 在我们的项目中,定位软件在每次收到信号强度后重新评估每一个粒子的位置和概率。首先进行一个简单的几何运算:根据机器人的大概位置,将信号强度转化为坐标值(xDATA, yDATA),由于我们只有三个ZigBee节点,我们不能进行真正的三角测量(这种测量需要第4个节点做参考),在这里,我们假定T和C节点是安装在墙上,R节点无法通过墙壁。 如果我们假定信号强度测量是百分之百正确,机器人的位置将在以节点为圆心、以信号强度为半径的两个圆的交叉点(注意,大部分情况有两个交叉点)。最后,通过将这两个节点放在墙上,我们可以去掉两个交叉点中的一个(因为另一个在墙里,机器人是无法到达的!,译者注)。 在计算机中,坐标值(xDATA, yDATA)与前面9次平均后(这是使用的应该是:Moving Average Filter,用于除掉测量噪声。译者注),再送入到“粒子”滤波器。“粒子”滤波器使用1000个粒子来为机器人定位。通过将粒子的坐标值 (xSAMPLE, ySAMPLE) 送入到一个基于xDATA, yDATA 的标准的高斯函数(standard Gaussian function),我们可以计算每一个粒子的概率。为了估计机器人的位置,我们计算1000次采样的加权平均值。 图3展示“粒子”滤波器在三个连续的时间步中,你可以看到粒子迅速收敛在某一个位置(即机器人的位置,图中的蓝色区域)。在机器人移动过程中,信号强度不停测量,更新,从而机器人位置也在实时计算。 图4―GUI展示“粒子”滤波器在三个连续的时间步。图中角落中两个绿色方框表示ZigBee节点 T和C。
机器人控制: 在定位过程中,一个简单的GUI运行在PC中。这个GUI提供用于控制机器人Robosapien的简单设定。在这个项目中,控制命令仅仅限于前进、停滞、左转和右转。当你选择了一个命令,计算机会将信号通过串行口发送到节点C,然后广播出去。当R节点接收到命令,它将发送信号给Robosapien并广播一个信号,告诉其它节点“命令已经完成”。同时T节点停止发送信息,以防信息塞车,直到收到来自R节点的“命令已经完成”后才恢复正常的工作。 为了确保每个命令的将会被执行,任何命令及“命令已经完成”将包含命令索引(从0开始)。命令索引 在命令数超过最大之后,重新恢复到0。表格1列出所有的命令格式。
表格1:不同的信息包包含了不同的信息。每一个通过无线节点广播出去的信息包是以表述发送端的信息开头。为了通过ZigBee来传播,16位的信息需要分割成高8位和低8位分别发送。 我们的项目最后一个阶段是控制机器人Robosapien来执行一个命令。 在解剖Robosapien之后,我们决定使用一个最简单的方法来控制机器人:使用Freescale的ZigBee节点来替代Robosapien自带的红外接收器。 通过编程,让这个节点模仿Robosapien红外接收器接收的信号。我们使用了示波器来破译这些信号,最后我们发现了发给Robosapien的命令信号包含了四个不同时间片段,分别是:7, 3.3, 1, 和 0.7 毫秒(ms)。当没有数据需要发射,逻辑电平为高(=1)。 例如,我们来看一看“前进”这个命令,如图5。这个信号仅仅含有四个时间片断,所以很容易以一个数据的格式保存在Freescale的ZigBee节点。
如下是“前进”这个命令保存在节点上的格式: int FORWARD_COMMAND[] = {1,2,3,4,3,4,3, 4,3,4,3,2,3,2,3,4,3,-1}; 每个数字代表一个时间片断。信息的最后以“-1”结尾,这是因为不是所有的命令具备同样的长度。这种格式让我们可以使用简单的While循环和延时来实现每一个时间片断。MC13192的C5端口与Robosapien的红外接收连线上。这样,通过控制C5的电平高低,我们就可以通过ZigBee网络来控制Robosapien。 改进潜力: 在我们的项目中,还有很多地方可以做改进。例如你可以使用安装在Robosapien上加速度传感器的数据预测机器人的前进方向。这可以提高用于“粒子”滤波器(particle filter)的概率函数的精确度,从而提高系统的定位精度。我们成功地在代码中实现了这个想法,不过由于Robosapien的动作模型,在系统中并不可行。当Robosapien移动时,它快速移动它的身体从这边到另一边,从而令加速度传感器的信息无效。为了实现这种想法,机器人的移动必须平衡运动。 然而,增加更多的ZigBee节点可能是最好的改进。我们并没有足够的材料。如果可以的话,增加更多的节点(充当T节点)将会为定位提供更多的信息,从而更精确定位,以及更精确的控制。
进一步思考: 为了进一步提高这个项目,你也许需要开发一个客户端/服务器关系的定位程序同时为所有的多个机器人定外。服务器实现大部分功能(机器人控制,信息管理等),客户端利用服务器的功能,而不需要自己实现这些功能。 一个低功率的ZigBee可以作为自主机器人团队廉价的信息基站。通过这种移动机器人平台,你可以实现一些功能强大的高级别的应用,例如文章开头部分的机器人团队。 还有很多潜在的应用,例如,你可以为搜救机器人、陆地探索等提供机器人定外。使用机器人在危险地域搬运,可以减少生命的损失。 在不久的将来,自主机器人将在危险的环境下工作,完全替代人类。ZigBee这种技术将帮助机器人开发者去开发这种廉价的、可完成制定任务的机器人。 =================================================== 源代码下载: ftp://ftp.circuitcellar.com/pub/Circuit_Cellar/2006/188 原文出处(英文): http://www.circuitcellar.com/library/print/0306/Leland-188/index.htm |
共1条
1/1 1 跳转至页
通过Zigbee实现机器人定位与控制
只看楼主 1楼
关键词: 通过 Zigbee 实现 机器人 定位 控制 节点
共1条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【笔记】生成报错synthdesignERROR被打赏50分 | |
【STM32H7S78-DK评测】LTDC+DMA2D驱动RGBLCD屏幕被打赏50分 | |
【STM32H7S78-DK评测】Coremark基准测试被打赏50分 | |
【STM32H7S78-DK评测】浮点数计算性能测试被打赏50分 | |
【STM32H7S78-DK评测】Execute in place(XIP)模式学习笔记被打赏50分 | |
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 |