基于红外反射式传感器的赛道检测方法的研究报告(编辑修改稿)内容摘要:

发 环 境采 用 飞思 卡 尔 HCS12 系 列微 控 制器 开 发软 件。 该软件具有支持多种语言,开发环境界面统一,交叉平台开发以及支持插件工具等优点。 在 界面完成编译后,通过清华大学 Freescale MCU/DSP 应用开发研究中心开发的 BDM FOR S12 工具,在 环境下,向 MC9S12EVKC 模块下载程序。 BDM FOR S12 工具使用简单,十分方便 【 1】。 算法说明 本次比赛要求小车能够自主识别路线,按照设定的轨迹行走,在不冲出跑道的前提下追求速度。 因此,程序设计的基本原则是,首先考虑小车的稳定性,在此基础上,尽量提高小车的速度。 经过多方面的考虑和反复的实验,在程序设计中,主要采用了以下一些算法。 路面信息检测 如何确保智能车沿着黑色轨道行驶是程序设计中的关键部分,尤其是对白色跑道和黑线信息的识别。 传感器是放在同一高度的,通过调节串联在发射管上的电位器,可以调节发射管 的发射功率,从而可以使传感器在照到白色跑道上时的电压输出保持在一定值左右。 当传感器的发射功率较大时,传感器检测到黑色和白色时的输出电压值有较大差别。 将传感器的输出进行 A/D 转换后,将转换值保存到一个一维数组里,然后对数据进行二值化处理,即当某个数据小于一个值 (记为 black_value)时,认为相应的传感器检测到的是黑线,记为 0,否则检测到的就是白线,记为 1。 这样就可以得到一个元素为 1 和 0 的一维数组 _result[7],共有 7 个元素,对应着 7 个传感器的信息。 进行二值化处理后便于对数据进行分析。 black_value 值可以用如下方法确定 :首先将小车放置在跑道中间,这样最第一届全国大学生智能汽车邀请赛技术报告 12 中间的传感器正好在黑线正上方,在小车启动前,先进行一次 A/D 转换,可以得到一个大约的黑线值,考虑到各个传感器的差异以及转换的误差,将该黑线值加上一个偏差值,就得到了 black_value 的值。 即使这样,采样白色时得到的值也远大于 black_value 值,充分保证了判断黑线和白色时的准确性。 因此消除了更换跑道, 黑线的深浅以及跑道周围光线的明暗所带来的干扰,该方法也省去了以上因素变化时重新测试黑线值的必要。 传感器优先级的设定 7 个 传感器在辅助电路板的前端一字排开。 从左到右,依次按照 0~ 6 对其进行编号。 小车行驶到弯道时,尤其小车速度较快时,舵机需要快速反应。 按照传感器的安装方法,很有可能两个传感器同时检测到黑线。 在判断是否需要转向时,主要是依据传感器对应的信号是否从 1 变为 0。 那么在两个传感器同时检测到黑线时,该打哪个角度对小车的转性控制比较重要,如果角度过小,就容易出现脱离跑道或无法顺利转弯的情况。 针对此种情况,可以对传感器进行优先级的设定。 两边的传感器相对中间的传感器来说,优先级更高。 优先级依次为 0、 3 号传感器。 一维数组 _result[7]里也依次按照优先级的顺序存放着传感器的信息。 如元素0 对应着 0 号传感器的信息,元素 1 对应 6 号传感器的信息。 与上次保存的信息相比较,一旦检测到传感器的信息从 1 变为 0,停止检测下一个元素。 然后进行分析,控制小车的转向和速度。 智能车的转向角度控制 该智能车的转向主要靠传感器检测到的信息进行判断 【 7】。 受微控制器 A/D转换通道数量的限制,在辅助电路板上只安装了 7 个传感器。 依据前文介绍的检测方法和转向控制方法,传感器越多,检测到的信息也越多,从而对小车的转角控制也越细,效果也会 更好。 但如果在算法上进行优化和改进,可以弥补传感器少的弊端。 在对检测到的信息进行分析时,如果某个传感器的信息从 1 变为 0 时,即第四章 软件设计 13 传感器检测到的信息是从白色变到黑色时,有两种情况,一种是黑线从左边进入到传感器正下方,另一种是从右边进入到传感器正下方。 对这两种情况,黑线相对该传感器的位置是有较大差别的,因此小车的转角也应该不一样。 如对于右边的 5 号传感器,黑线从左边进入时的角度就应该小于黑线从右边进入时的角度。 所以判断出黑线移动的方向十分重要。 根据如下方法可以判断出黑线移动的方向。 在上次数组 _result[7]中,可以检测到 0 处于几号传感器对应的位置,将该值保存起来,然后将本次得到的 _result[7]里的 0 处于几号传感器对应的位置也可以保存起来。 因为传感器是按照顺序编号的,比较前后两次检测到黑线的传感器对应的编号值,就可以判断出黑线是向左偏移还是向右偏移了,还是没有移动。 加上黑线移动方向这个条件,每个传感器检测到的信息在由白色变为黑色时,就对应了两个角度。 但最边上的两个传感器由于只有一边有参照,所以还是只对应一个角度。 这样,依靠算法获得了更多的角度,相当于间接地增加了传感器的个数。 由于传感器的间距有大于黑线宽 度 (25mm)的,在检测时有可能出现传感器检测到的全是白色,即 _result[7]数组中可能全部为 1。 并且 5 号和 6 号, 0号和 1 号传感器之间距离为 25cm,当黑线从左往右进入到 5 号传感器后,要经过较大距离后才能进入到 6 号传感器, 0 号和 1 号传感器也是如此,中间跨度太大。 可以在黑线从左往右进入到 5 号传感器和进入到 6 号传感器之间增设一个角度,即在黑线从左往右移动时,当 5 号传感器检测到的信号由 0 变为 1 即由黑线变为白色时,舵机可以转一个角度,该角度应介于黑线从左往右进入 5号和 6 号传感器时对应的角度之间。 1 号传感器也可 以这样处理。 这样避免了转大角度导致小车行驶不稳的问题。 各传感器对应角度表见表。 表 传感器对应角度表 传感器编号黑线进入 传感器的方向 0 1 2 3 4 5 6 从右向左入 (度) 30 17 6 0 6 17 30 从左向右入 (度) 23 12 0 12 23 从右向左出 (度) 26 10 26 从左向右出 (度) 10 第一届全国大学生智能汽车邀请赛技术报告 14 智能车速度的控制 智能车在直道上行驶时,速度相对较快,当突然遇到弯道时,由于舵机打角 度需要一定的时间,小车很可能会因速度太快而冲出跑道。 因此,考虑到舵机的转向时间,在智能车进入弯道时,舵机打完角度后,必须首先对智能车进行减速,这样可以限制智能车的速度。 从整体来看,越靠近两边传感器检测到黑线时所对应的速度越慢。 黑线在小车最中间时,小车速度最快。 直道的限速 虽然在弯道处,短暂的减速可以降低智能车的速度,但是其也是有局限性的。 当智能车的速度过大时,即使其有短暂的刹车,但由于惯性的作用智能车还是会以很高的速度冲出跑道,尤其是从较长的直道进入弯道时。 对此,在智能车直线行驶的过程中也对智 能车进行了适当的限速。 解决该问题,最主要的是判断出小车是否行驶在直道上。 但是,由于该智能车硬件方面的限制,无法进行远距离的探测,可以在信号检测和数据分析判断方面进行突破。 对采样得到的路面信息,进行分析后,得到一个返回值,将该值赋给 Turnflag 变量,Turnflag 值是从 0 到 17,每个 Turnflag 值都对应着小车左转或右转的角度。 当 Turnflag 值连续 N 次在最中间 3 个传感器对应的返回值时,可以认为小车形式在直道上。 在这连续 N 次过程中,设定一个计数变量, Turnflag 值每等于一次最中间 3 个传感器对应的 返回值时,计数变量加 1,直到等于设定的 N 值,对计数变量清 0,进行一次减速,然后以正常的速度行驶。 因为最中间 3 个传感器如果计数变量还未增加到 N 时,一旦出现 Turnflag 不在最中间 3 个传感器对应的返回值时,计数变量也要清 0。 N 值设的不宜过大,否则就起不到什么在作用。 过小的话,也会影响小车的整体速度。 调试时, 可以 将其设为 90。 交叉线的通过 由于在规定的赛道上有十字交叉线,如果不对智能车进行调整,智能车走任何一条轨迹都是有可能的。 因此,有必要对该情况进行判别。 如上文介绍,路面信息经过采样后,放在 _result[7]数组里,里面的元素为 0 和 1,分别对第四章 软件设计 15 应的是黑线和白色跑道的采样结果。 根据传感器的设计和弯道的大小,最多只有两个传感器检测到黑线,即 _result[7]数组中,最多只会出现 2 个 0,根据这个特点,可以认为当该数组中出现 3 个或 3 个以上的 0 时,传感器采样到了交叉线,那么对该次采样的数据,不做任何处理,小车也不做任何调整。 如果小车斜着经过交叉线时,没有 3 个传感器同时检测到黑线,根据传感器排列的优先级,若最左边的传感器先检测白色到黑线的变化,转一个向左的角度,但接着,将是右边的传感器检测到变化,马上会打一 个向右的角度,在这个过程中,小车已经冲过了交叉线,完全可以保证小车平稳准确的经过交叉线。 抗干扰措施 在调试的过程中,智能车还会受到很多外界因素的干扰,尤其是在自制的跑道上。 主要是路面的凸凹不平,以及组装赛道时各个拼版之间的缝隙都会造成智能车行驶时的不稳定。 尤其是在检测到小缝时,传感器的输出与检测到黑线的输出电压相近。 这种干扰主要会使舵机误打角度,尤其在转弯过程中和最边上的两个传感器检测到小缝隙时,容易使小车脱离轨道,找不到黑线,后果十分严重。 为了解决该问题,可以对返回来的 Turnflag 值 按从小到大排序,如果前后两次返回的 Turnflag 值大于某一值(如 6,如果值太大,可能不起作用;若太小,可能丢失正常的有用信息)时,认为这是干扰信息,不进行转向和转速调整。 如果实际比赛跑道比较平整,且无缝隙,这段子程序可以不用。 智能车的 主 程序及 部分子程序流程如图 ,图 ,图 所示。 第一届全国大学生智能汽车邀请赛技术报告 16 开 中 断P L L 初 始 化定 时 器 初 始 化A T D 初 始 化P W M 初 始 化启 动 A T D , 采 样 路 面 信 息启 动 小 车延 时调 用 转 向 子 程 序启 动 A T D , 采 样 路 面 信 息开 始 图 主程序流程图 第四章 软件设计 17 读 取 采 样 结 果对 本 次 值 做 二 值 化 处 理 , 保 存 在_ _ r e s u l t [ 1 ] [ 7 ] 中判 断 此 次 数 据 中 黑 线 的 位 置 ,赋 值 a 0 1判 断 黑 线 移 动 的 方 向调 用 判 断 T u r n f l a g 值 子 程 序将 本 次 二 值 化 后 的 采 样 值 和 黑 线 位 置 的 值 分 别赋 上 一 次 给 _ _ r e s u l t [ 0 ] [ 7 ] , a 0 0退 出相 同与 上 次 结 果 _ _ r e s u l t [ 0 ] [ 7 ] 相 同 么。 不 同 图 ATD 中断子程序流程图 第一届全国大学生智能汽车邀请赛技术报告 18 对 返 回 的 T u r n f l a g 值 重 新 排 序调 用 抗 干 扰 子 程 序调 用 直 道 刹 车 子 程 序转 向 和 转 速 控 制 图 转向子程序流程图 代码设计介绍 程序设计主要采用 C 语言完成。 因为其编程简单、程序代码相对汇编语言要少、可读性和移植性强、便于子程序调试、易于修改程序、函数库丰富等许多优点。 对于与硬件密切相关的指令,采用汇编语言。 如开中断、系统的初始化等。 建立 C 程序运行环境时,将 main()看承整个应用程序,应用程序由许多子程序或模块组成。 这样调试和修改都比较方便。 该小车整体程序由 组成。 声明为外部 函数的指令,全部放在头文件 中,以免造成混乱 【 14】。 程序 清单 见附录 A。 19 第五章 智能车的调试 在 智能车 调试的过程中主要 采用 的开发工具 是 清华大学开发的 BDM for S12, 调试软件采用了 和 ,以及 数字示波器、万用表 等试验设备。 智能车调试总共有二个阶段,第一个阶段 , 调试 自行 开发的硬件电路板和各个 子程序 、主程序;第二阶段自制了不同跑道调试智能车的速度和转向性能等,根据试验,修改软硬件。 软硬件 调试 首先对设计的电源电路、采样电路、直流电机 驱动电路等硬件电路板进行调试。 在 软件设计中, 需要用到定时器模块、 ATD 模块、 PWM 模块 等。 在编写 主程序 前,应该先对各模块分别进行调试 ,编写各个部分的子程序。 根据系统电路板的资源,本设计方案中,使用 ATD0 模块中的 7 路对传感器输出电压采样, PWM7 口控制直流电机转速, PWM5 和 PWM4 口级联后在 PWM5 口输出 PWM 波控制舵机转角。 调试 ATD 模块时,先使用 BDM 模块将子程序下载到芯片内,然后分别在 ATD的输入端利用稳压源产生 0~ +5V 的电压,观察 中 memory 窗口中各个寄存器的 值。 根据 A/D 转换结果寄存器的值计算输入电压。 若计算出的电压值与实际输入的电压值在误差允许范围内相等,说明该子程序正确。 在调试定时器模块时,可以在通过系统电路板上 PJ 口外接的发光二。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。