为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

用光电鼠标作传感器的自动小车导航系统

2017-11-26 7页 doc 22KB 33阅读

用户头像

is_597436

暂无简介

举报
用光电鼠标作传感器的自动小车导航系统用光电鼠标作传感器的自动小车导航系统 用光电鼠标作传感器的自动小车导航系统 提出一种仅用一个普通光电鼠标作为自动小车导航系统传感器的方法。本设计中创新设计,用一个普通光电鼠标作小车导航传感器,测定小车上一点相对地面的位移,计算出小车方位,并在计算机界面上显示,实现小车可以不依靠外部的辅助设备就能对自身定位。在获取小车坐标与方向后,计算机发出小车的控制信号,并经无线模块传输到小车上的控制电路,无线控制小车行进路线。这项技术可以运用在多种领域。一、背景综述 移动机器人小车在许多领域扮演着重要角色,在应用过程中,最重要的是要让机器...
用光电鼠标作传感器的自动小车导航系统
用光电鼠标作传感器的自动小车导航系统 用光电鼠标作传感器的自动小车导航系统 提出一种仅用一个普通光电鼠标作为自动小车导航系统传感器的方法。本中创新设计,用一个普通光电鼠标作小车导航传感器,测定小车上一点相对地面的位移,计算出小车方位,并在计算机界面上显示,实现小车可以不依靠外部的辅助设备就能对自身定位。在获取小车坐标与方向后,计算机发出小车的控制信号,并经无线模块传输到小车上的控制电路,无线控制小车行进路线。这项技术可以运用在多种领域。一、背景综述 移动机器人小车在许多领域扮演着重要角色,在应用过程中,最重要的是要让机器人随时知道自已的位姿,否则不能完成其它工作。移动机器人上的传感器进行工作时,获得的信息通常有不确定性,不能完描述外界环境,移动机器人定位的难度也就在于这种不确定性。 在各种机器人大赛中,机器人需要按特定要求的路线运动。传统的定位方式是循线前进,即利用光电传感器检测比赛场地上的标记线,作为判断方位的依据。循线方式的缺点是速度较低,系统抗干扰能力及纠错能力较差。 现在国内多所大学在机器人大赛的比赛中摒弃了以光电传感器为基础的定位系统,以陀螺仪作为传感器进行自定位。该系统的精确度高、适应性强、纠错能力好,可方便的对机器人进行预先的行进路线设计,但成本较高。 鼠标作为一种常见电脑外设,其本身就是一种传感器,通过检测鼠标底部表面的变化,来判断鼠标的移动方向和移动距离,并输出数字信号。由于鼠标与地面无直接接触,故可以测量小车相对地面在不同方向的运动数据,所以对测量方式的选取及计算方法有多种,可以进行优化选择。 随着技术不断成熟,光电鼠标以及类似的激光鼠标性能不断提升,能适应较复杂的检测平面,准确度也不断提升。相反地,优质鼠标的成本不断下降,也更容易获得。如果能成功利用鼠标这一种常用的电脑外设作为小车的位移传感器,则可实现传感器的通用化。 用光电鼠标作位移传感器,并用来测定计算小车坐标与方位角,类似于航迹 1推算法,有累计误差,但不受轮子打滑和机械制造因素的影响。但鼠标工作时的移动速度有上限,也容易受地面因素影响,数据传递也有一定的频率范围,所以需要对各种影响最终导航结果的因素进行分析研究。 经查询,现已有设想用鼠标作传感器的方法的,但无具体实验。而本课所预计采用的鼠标布局是独立创新的,与已有设计不同。二、课题简介2.1 研究内容 本设计目标是尝试利用普通的光电鼠标作自动导航小车的位移传感器,检测小车上一点或多点相对地面的运动变化,用计算机编程计算小车相对原点的坐标与方位角。 本设计的实验中实际采用测定小车上一点相对地面的位移,计算出小车方位,并在计算机界面上显示,指导控制小车行进路线。本设计中小车可以不依靠外部的辅助设备就可进行自身的定位。这项技术将可以运用在多种领域。 系统流程图如图 1 所示: 通过恒压驱动芯片 鼠标随小车移动 驱动电机 计算机获取 单片机判断指令 鼠标数据 无线接收模块接收 VB程序处理数据, 指令,传给小车上 计算小车坐标 的单片机 在计算机屏幕地图 单片机将指令编码 上显示小车方位 通过无线模块发送 在计算机上发送小 指令通过串口发送 车控制指令 到单片机上 图 1 系统流程图2.2 研究方法 研究过程采用理论分析与实验相结合的方法进行研究,流程如图 2。 2 研究理论算法 分析鼠标工作原理 测试小车工作性能 分析鼠标与计算机 提出改进 软硬件接口 结题 制作测试用小车 设计用户程序 图 2 研究方法流程图三、 用光电鼠标作小车传感器3.1 鼠标作小车传感器的特点 光电鼠标挣脱了传统光电鼠标需要专用鼠标板的束缚,可在任何不反光的物体表面使用,由于通常的室内地面满足其使 用条件,因此可以在移动机器人的底部贴近地面的位置安装光电鼠标,监测相对地面的运动。如果使用无线鼠标,或将计算机安装在机器人上,可将信息传送到计算机上,用于移动机器人的定位。 光电鼠标的定位也与传统的航迹推算法一样,需要进行累加计算,从而累积误差。但光电鼠标靠成像元件获取移动的图像并进行处理的过程是连续的,当第二幅图像与第一幅图象进行比较时,可能多了半个像素点,但当第三幅图与第二幅图象进行比较时,就会少了半个象素点,累加结果会匀相抵消而趋于精确,最后的定位结果类似于外部传感器测量路标一样直接精确地记录机器人的移动位置。 由于鼠标不与地面接触,可以测量同时两个方向的位移,从而可计算出鼠标相对地面任意方向运动时的位移,这是其他传感器不能做到的。 可以认为光电鼠标是一种同时具备内部传感器和外部传感器特点的传感器。理山如下: 1 它不像内部传感器如编码器)只关心机器人自己的内部构造和特征并测量内部的变量。它与外部世界地面)有直接联系。 3 2 尽管它与外部世界联系并直接记录机器人的运动,但它不像绝大多数外部传感器那样检测已知的参考地标或其它障碍。 如果轮子绝对不打滑,机器人的各个机械参数也可以非常准确地测得,轮了又很圆,则传统的航迹推算法也会很准确,可惜这在传统的航迹推算法中是小可能的。光电鼠标不会因为轮了打滑和机械误差而导致定位误差,因而能够在众多情况下达到非常高的精度,其测量精度可达毫米量级,这对于移动机器人定位来说已是非常精确了。3.2 鼠标数据处理的方式 鼠标作为计算机的常用外设,无论其接口是 USB 还是 PS/2,其数据必能由计算机读取并进行处理。经过研究相关资料,发现常用以下几种方法:3.2.1 获取电脑操作系统底层的数据 鼠标作为计算机输入设备随着 Windows 的流行而逐渐成为计算机的标准配置。在 Windows 中鼠标的操作可以产生二十多个消息,主要分为客户区鼠标消息和非客户区鼠标消息两大类,包括鼠标的移动,左中右键的按下、释放、双击等。事实上,实际的应用程序中往往会用到一些特殊的鼠标事件,如鼠标三击、左右鼠标同时按下、鼠标单击双击三击的独立识别或依次处理等。如果从电脑操作系统底层获取的鼠标数据需详细了解 Windows 系统程序机制,比较复杂。3.2.2 获取屏幕光标数据 在 Windows 系统中,很容易获得屏幕光标坐标值。显卡输出的刷新率和显示器支持的刷新率一般在 100Hz 左右,一般笔记本电脑的在 60Hz。假如显卡刷新率为 60Hz,鼠标报告率 120Hz,则第秒鼠标向 PC 报告 120 次,而显卡却只会挑选其中的 60 次,来据此调整光标的移动并显示出来。通过屏幕获取光标值的方法取得的坐标值,也就是这部分数据,不能实时反映鼠标的移动。3.2.3 单片机读取鼠标数据 对于 PS/2 接口的鼠标,理论上可以利用单片机模拟鼠标的上位机驱动程序,读取鼠标数据。PS/2 通讯协议是一种双向同步串行通讯协议。通讯的两端通过Clock时钟脚同步,并通过 DATA数据脚交换数据。任何一方如果想抑制另外一方通讯时, 只需要把 Clock时钟脚拉到低电平。 按照 PS/2 协议,移动时,鼠标会输出一组时钟和数据信号;而在静止时,时钟和数据信号将一直保持为逻辑高电平,表示处于空闲状态。每次移动时,鼠 4标会向主机发送 3 个数据帧,每个数据帧 11 位,包括 1 个起始位“0”、8 个数据 、1位(低位在前) 个奇校验位和一个结束位“1”,因此每次移动时,鼠标会向主机发送 33 位数据,其中第 0、11 和 22 位是起始位“0”,第 10、21 和 32 位是结束位“1”。 鼠标每周期发送“Mouse status byte” 、 direction byte”和“Y direction byte” “X 三个字节的数据,是鼠标移动产生的相关数据,包括状态、X 方向数据和 Y 方向 数据。按照 PS/2 协议,鼠标数据在时钟 CLK 的下降沿有效,而时钟 CLK 的频率要求在 20KHz,30KHz 之间。 经过前期试验,未能利用单片机成功获取鼠标数据,故在本设计的实验中选用获取屏幕光标数据的方法进行。四、利用 Visual Basic 6.0 获取与处理鼠标数据4.1 基本数据获取4.1.1 软件概要 Visual Basic 6.0 是微软推出的一款面向对象的编程软件,能较快速的开发Windows 窗口程序,能获取鼠标事件,并能控制串口通信有利于后续开发,所以选用该软件作为上位机程序。4.1.2 鼠标坐标获取 由于对 Windows 底层的鼠标数据调用在编程上较为复杂,在本设计中仅采用获取屏幕坐标的方式进行实验。 VB 里可以调用 Windows API 函数读取与设置光标坐标: 先定义一个 type 格式的自定义变量。定义为: Public Type POINTAPI x As Long y As Long End Type 对鼠标的停留位置做出判断,也就是得到鼠标在屏幕上停留的位置。 Public Declare Function GetCursorPos Lib quotuser32quot lpPoint As POINTAPI AsLong 这样就可以通过 GetCursorPos 函数获得鼠标的位置,存放到一个 POINTAPI 5变量中 将鼠标的移动到所确定的位置上。 Public Declare Function SetCursorPos Lib quotuser32quot ByVal x As Long ByVal yAs Long As Long 这样就可以通过 GetCursorPos 获得屏幕上鼠标的坐标,再通过 SetCursorPos函数来设置鼠标的位置。4.2 VB 程序界面设计4.2.1 主窗口 主窗口如图 3 主要有三个模块:鼠标数据、小车信息、小车控制。 鼠标数据模块:显示在利用屏幕光标计算出小车实际移动距离象素值的过程中,结果与各主要中间变量; 小车信息:经过测量光标移动象素值与鼠标实际移动距离的比例关系,计算出小车的实际方位。在此模块可以设定小车的初始方位。 小车控制:通过串口与无线信号发送的下位机通信,发送控制小车运动方向与速度的指令。此 图 3 主窗口示意图 本设计的实验中,制作了两张测试场地。场地 1 用海报展板制作,64.2.2 地图窗口 大小为1600mm×1200mm,黑色背景;场地 2 用布质海报制作,大小为 3000mm×2300mm测试地图,背景为工大规划图。 地图窗口 1图 4对应场地 1,大小为 15000Twip×11505TwipTwip 是 VB 里的 计 量 单 位 , 折 算 为 象 素 为 1000pixel×767pixel 。 根 据 实 际 场 地 大 小 宽Map_H1600mm,高 Map_V1200mm,用 Qipan.Scale -Qipan_H / 2 Qipan_V /2-Qipan_H / 2 -Qipan_V / 2命令,将该窗口坐标设置为左下角00,右上角16001200。 图 4 地图窗口 1 地图窗口 2图 5对应场地 2,大小为 15360Twip×11520Twip,折算为象素为 1024pixel×768pixel。 高 根据实际场地大小宽 Map_H3000mm, Map_V2300mm,用 Map.Scale -Map_H / 2 Map_V / 2-Map_H / 2 -Map_V / 2命令,将该窗口坐标设置为左下角00,右上角30002300 7 图5 地图窗口 24.3 初始化各参数4.3.1 主窗口加载 启动 声明API函数GetCursorPos 和SetCursorPos,定义各 变量 定义主窗口和地图窗口 大小、地图窗口标尺 ResetData 初始化各参数 结束 图 6 主窗口加载程序流程图4.3.2.ResetData函数 8 设置计时器 Timer1Timer2 启动 定义并启动计时器 Timer1和Timer2 输入小车初始位置 初始化各参数 结束 图 7 设置计时器流程图4.4 计算小车坐标4.4.1.Timer1_Timer过程 在计时器 1 过程中,循环调用鼠标数据处理函数 MouseData。 启动 MouseData() 处理鼠标数据 结束 图 8 循环调用鼠标数据处理函数图4.4.2.MouseData函数 9 根据屏幕光标坐标值判断鼠标累计移动的象素值,计算小车的实际坐标值。 启动 此时光标水平值 Y M M – 1 Mouse_Screen.X 0 光标水平置中 小车当前角度Angel_pi, Mouse_X/鼠标距轴心 距离 N 此时光标水平值 Y M M,1 Mouse_Screen.X screen_w – 1 Y 光标水平置中 小车当前角度 (screen_w 为屏幕宽度) 小车当前角度gt2pi 自减2pi N N Mouse_X M - 1 / 2 screen_w Mouse_Screen.X Y 小车当前角度 小车当前角度加lt0 记录当前光标累计水平移动象素值 自2pi N 本次Mouse_X变化值Deta_x 当前值-上次值 NewX_Deta Deta_y CosAngel_pi 计算小车本次垂直移动象素值 此时光标垂直值 Y N N – 1 Mouse_Screen.Y 0 光标竖直置中 New_Deta Deta_y SinAngel_pi 计算小车本次水平移动象素值 N 此时光标高度值 Y N N,1 NewX NewX NewX_Deta Mouse_Screen.Y screen_h – 1 光标竖直置中 小车当前水平坐标 /象素 (screen_h 为屏幕高度) N NewY NewY NewY_Deta Mouse_Y N - 1 / 2 screen_h Mouse_Screen.Y 小车当前垂直坐标 /象素 记录当前光标累计垂直移动象素值 结束 本次Mouse_Y变化值Deta_y 当前值-上次值 图 9 计算小车实际位置程序4.5 小车坐标的显示4.5.1.Timer2_Timer过程在计时器 2 过程中,循环调用主窗口显示函数 Display和地图窗口显示函数Map_Dispaly。4.5.2.Dispaly函数和 窗口数据。 Map_Dispaly函数:更新地图窗Map_Dispaly函数 Dispaly函数:更新主 口数据,并在显示小车的位置。 10 启动 Display() 在主窗口显示 Map_Dispaly() 在地图窗口显示 结束 图 10 计时器 2 工作流程图 启动 启动更新所有文本框数据 小车横坐标Car_X NewX / MS H_s mm将角度转换为分秒格式 小车纵坐标Car_Y NewY / MS V_s mm 结束 结束 a b 图 11 更新程序图 11五、小车定位测试5.1 场地选择 本设计制作的两张测试场地中,场地 2 用布质海报制作,由于是彩色光面,测得鼠标分辨率极低且不稳定,故放弃使用。场地 1 用海报展板制作,黑色背景,测得分辨率在 50pixel 左右浮动,不太稳定。但由于在课题期限内难于找到更适合材质,暂时使用场地 2 进行测试,分辨率设置为 50pixel。5.2 小车设置 小车在场地中以主动轮连线中点为自身中心,对齐地图上横纵交点。上位机软件里根据小车实际初始坐标设置初始状态。地图上标记的坐标单位为厘米。小车电机占空比设定为 7,速度约 15cm/s。 图 12 实验场地图5.3 实验结果 通过无线控制小车以 10cm/s 左右的速度在地图上行进,与屏幕上测得轨迹进行对比如下。为便于打印出版,将黑色的地图反色显示。地图上由一系列连续小圆圈表示的屏幕记录的小车轨迹,虚线表示实际小车行进路线。 由于作为小车定位依赖的鼠标分辨率,在该地图上不是稳定的,所以导致最 12后计算结果存在随机误差。但从图片对比可以看出,小车运动的基本方位可以做大致的确定,但运行距离较大后,定位误差非常大。 图 13 测试结果图 13六、结论 通过上述理论分析与实物实验,可以得出以下结论:鼠标作.
/
本文档为【用光电鼠标作传感器的自动小车导航系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索