机器人循线算法原理与实践转收_第1页
机器人循线算法原理与实践转收_第2页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、机器人循线算法原理与实践(转收)硬件基本构架对于机器人的循线,为了获得场地上白线(黑线)的信息,硬件结构一般有如下 几种种类。1、红外对管阵列。采取这种方式的机器人比较多,尤其在各种机器人竞赛中, 几乎是标准配置。 但是这种技术有一个致命的弱点, 就是对于场地光线的干扰特 别敏感,而且也很难把红色和白线区别开来, 所以使用受到一定的限制。 一般解 决这类问题的方法是在红外光上加载一个调制波, 通过检测这个调制波来消除场 地光线的干扰,至于如何解决红色和白色的区别问题,那就几乎是五花八门了。2、光纤传感器阵列。采用这种传感器阵列的原因是,光纤非常细,在单位面积 内可以安装更多的传感器, 从而获得

2、更精确地场地信息。 当然,钱也也花得更多。3、 线性CCD这种硬件方法几乎是一种对场地信息分辨率的BT追求,如果说红 外对管阵列还是离散信息的话,那么线性CCD就是线性的连续数据。当然驱动它 也不是一件容易的事情,对于单片机也有更高的速度要求。4、视觉。废话少说否则明天我都别想吃饭。基本原理所谓循线,就是通过一定的传感器探测地面色调迥异的两种色彩从而获 得引导线位置, 修正机器人运动路径的一种技术。 说的太拗口了。 不说太多 理论的东西,我们就从基于红外对管阵列的循线技术来说起。假设,我们使用的是黑底白线的场地。红外对管阵列由3个红外对管1字摆开组成。白线的宽度略小于或等于红外对管阵列的宽度。

3、1、数据的采集。对于机器人来说, 通过传感器感知周围事物的信息, 利用这些信息并不 作太多智能上的计算而直接通过一定的转换, 指导机器人的运动这种形式在 人工智能学上叫做机器人的“反应范式”。 所以,我们要想让我们的机器人能够 寻着我们给定的轨迹线运动, 第一步就必须让他感知到轨迹线的存在。 一般的做 法就是通过AD采样,获得红外对管(传感器)反馈回来的电压信息。然而,这 样获得的电压值信息是无法直接指导运动的, 必须把他们转化为二值的 (也就是 二进制信息,1表示线存在,0表示线不存在)信息,然后通过处理每一个管子 反馈回来的二值信息获得白线的位置信息。技术点AAD信号的阀值化。(你可以参考

4、其它的算法,获得比较详尽的技术,我这里只是举例一二)所谓阀值化, 就是通过一定的范围把握, 从而把线性的数据转化为离散 数据的一种变换。简单的说,就是通过分段函数的方法,将数据分类。在我们这 个应用中,就是想方设法使AD采集回来的电压值变化为一个恰恰能够准确表示 白线位置信息的二进制信息,1代表白线存在,0代表白线不存在。由于白色和 黑色在电压差异上非常之巨大, 所以可以简单的通过一个标志线来区分它们, 当 电压值高于这个标志线了,就把他标志为1,否则就标志为0,算法描述为:if (AdValuei MarkLing)elseLineInfori1;LineInfori = 0;这样做非常简单

5、, 适合于比较标准的场地, 然而对于那些模糊了的场地或者是非 标准场地, 虽然人的肉眼能够看出来, 但是对于机器人来说, 可能看到的就是花 白的一片或者是黑色的夜幕。 当标志线值过高时, 机器人能看到的只是那些特别 明显的白线,其他则是黑色的夜幕,很容易丢失轨迹线;当标志线值过低时,机 器人眼中就是白茫茫的一片毛刺。 总而言之, 对场地的适应性非常差。 解决方法 是,通过设定两个标志线来标定轨迹线信息,当AD值高于某一值时,标志1;当AD值低于另外某一值时,则标定0。算法描述为:if (AdValuei High_MarkLine)LineInfori = 1;else if (AdValue

6、i 技术点B动态预值。(你可以参考其它的算法,获得比较详尽的技术,我 这里只是举例一二) 当然,这种算法在简单的机器人循线中不是很常用。比较常见,适应性强的方法 是,首先从AD值中找到一个中间值作为MarkLine,(或者可以从AD值中找那 些比较接近最大值和最小值之差的0.618倍的数值) ,然后再使用第一种方法标 记,这样的算法叫做动态预值。如果把这种算法应用于第二种当然也不多啦。2、数据的简单加工第一个循线程序。到目前为止,我们已经把AD的值的数组转变为了一个表示白线位置的 二进制位的数组我们不妨直接把他用一个字节表示哈。 那么,这个字节的状 态就表示了当前白线的位置信息。 再假设,我们

7、已经写好了几个函数用来分别控 制小车的左右运动。那么我们就可以通过以下的简单方式来实现循线了。/用字节的高三位表示三个管子检测到的白线信息。switch (LineInforByte)case 0b11100000:/全部在白线上Motor_Left_GoFront(FullSpeed);Motor_Right_GoFront(FullSpeed);break;case 0b01100000: /明显车子向左偏了哈Motor_Left_GoFront(FullSpeed);Motor_Right_GoFront(NormalSpeed);break;case 0b00100000:Motor_

8、Left_GoFront(FullSpeed);Motor_Right_GoFront(LowSpeed);break;/其他情况仿照上面自己写了哈。default:Motor_Left_GoFront(StopNow);Motor_Right_GoFront(StopNow);break呵呵,这样就完成了一个循线小车的程序了哈。简单吧。顺便说明一下下,Motor_Lef_GoFront()函数是一个控制电机PWM输出的函数。FullSpeed NormalSpeed LowSpeed StopNow StopFree是一些控制PW啲 宏定义,你可以修改这些宏定义的值来实现以上的功能。 我想,

9、你看了这个程序 应该已经对循线的基本原理了然于胸了吧。哈哈哈哈哈哈哈哈。3、数据的高级加工复杂地面情况的模糊识别算法。以上的算法的确可以应付规范场地下的情况了, 但是由于其类似查表式的 数据处理方式,一旦出现真值表中没有的情况哪怕是很明显的直线存在 机器人都没有办法处理了。典型的就是在地上有大块的白色斑点, 导致机器人对 白线视而不见。解决以上问题的方法还要从人眼识别白线的原理上说起。 在破坏严重的场地上,人类的眼睛仍然可以识别出原先的白线, 这是为什么呢?通过重心。人类 的眼睛通过捕捉白线的重心确立白线的大体轨迹, 从而辨认出白线的位置。从概应力,就需要增加传感器的数目。我们不妨用8个红外管

10、作为传感器。这样通过处理后获得的场地信息就整整1个字节了。假设1个光电管的1拥有1单位的重 量,八个光电管的坐标分别为-7-5-3-11 3 5 7,其间距都是2个单位,通过置信公式很容易计算出质心的坐标,通过这个坐标和0的绝对值, 就可以知道当前机器人偏离白线的多少,而这个偏离值则可以通过简单的比例直率的角度上说, 在破坏严重的场地上,的,即使不同,由于白线本身的存在, 只要简单的获得地面浅色标志的重心, 用物理学上质心的算法获得这一信息。出现在白线两边的浅色干扰的概率是一样 其重心至少是不会偏离白线很远的,所以, 就可以大体确立白线的所在。我们可以利 忘了说一点,要想机器人增强对环境的适接

11、指导运动函数。典型实例如下:*函数说明:电机动作调速函 数*说明: 该函数放在定时器或者主循环里面用于产生软PWM*/void SpeedPWM(char PWMLine)char PWMLine_L = PWMLine; charPWMLine_R = PWMLine; staticcharPWMCount_L = 0;staticchar PWMCount_R= 0;char Temp = 0;if(FollowLineEnable = True)Temp = (char)fabs(float)CG_X);if (AdcValueFlag = 0)Temp = 0;elseif (CG_X

12、 0)if (Temp4) = PWMLine_R)PWMLine_R -= (Temp5)+Temp2);elsePWMLine_R = 0;elseif (Temp4) = PWMLine_L)PWMLine_L -= (Temp Fastest)PWMCount_L = Stop;if (PWMCount_R Fastest)PWMCount_R= Stop;if (PWMCount_L PWMLine_L)switch (GoDirection)case Front:Motor_Left_GoFront;break; case Back: Motor_Left_GoBack;break

13、; case Left: Motor_Left_GoFront;break;case Right:Motor_Left_GoBack;break; case Stop: Motor_Left_Stop_Free;break;else if (PWMCount_R PWMLine_R)switch (GoDirection)case Front:Motor_Right_GoFront; break;case Back:Motor_Right_GoBack; break;case Left:Motor_Right_GoBack; break;case Right:Motor_Right_GoFro

14、nt; break;case Stop:Motor_Right_Stop_Free; break;elseMotor_Right_Stop_Free;*函数说明:获取偏离轨迹线的数值*输入:表明寻线状态的字节*说明*通过类质心算法获取当前机器人偏离轨迹线的量*-表示偏左+表示偏右*/signedsignedsignedcharGetCG_X(unsigned charAdcValues)charchara = 0; Temp = 0;signed char Totals = 0;for (a = 0;a8;a+)if (AdcValues 7)Temp += (-7)+ (a1);Totals+;if (Tot

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论