代
号
10701
学密
号 级
1032121621
公开
分类号 TP242.6
题(中、英文)目
基于嵌入式Linux系统的移动机器人无线控制技术
Wireless Control Technology of Mobile Robot Based on
Embedded Linux System
作者姓名 赵九龙 指导教师姓名、职称 韩保君 副教授
学科门类 工学 提交论文日期
学科、专业 控制理论与控制工程
二〇一三年一月
西安电子科技大学
学位论文独创性(或创新性)声明
秉承学校严谨的学风和优良的科学道德,本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不包含其他人已经发表或撰写过的研究成果;也不包含为获得西安电子科技大学或其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中做了明确的说明并表示了谢意。
申请学位论文与资料若有不实之处,本人承担一切的法律责任。
本人签名: 日期
西安电子科技大学 关于论文使用授权的说明
本人完全了解西安电子科技大学有关保留和使用学位论文的规定,即:研究生在校攻读学位期间论文工作的知识产权单位属西安电子科技大学。学校有权保留送交论文的复印件,允许查阅和借阅论文;学校可以公布论文的全部或部分内容,可以允许采用影印、缩印或其它复制手段保存论文。同时本人保证,毕业后结合学位论文研究课题再撰写的文章一律署名单位为西安电子科技大学。
(保密的论文在解密后遵守此规定)
本学位论文属于保密,在 年解密后适用本授权书。
本人签名: 日期
导师签名: 日期
摘要
基于嵌入式Linux系统的移动机器人无线远程控制系统涉及到多学科、多技术领域,包括嵌入式Linux开发技术、网络通信技术、传感器信息技术和自动控制技术等。对移动机器人的硬件平台、软件操作系统和其涉及的关键技术进行研究开发,获得功能日渐成熟完善的移动机器人,对人类社会生活具有重要意义。
论文讨论了无线远程控制移动机器人的国内外现状和发展趋势。经过比较选型,以陆通公司的LT2440开发板和嵌入式Linux2.6操作系统构建了系统的嵌入式平台。以嵌入式平台为中心,结合电机驱动/控制器和机械手控制器,给出了系统的整体设计方案和软件架构。
研究了机器人常用传感器模块的工作原理和功能作用。采用编写嵌入式Linux模块驱动的方式,实现了在嵌入式平台下传感器信息的获取并给出了实际测试结果;传感器模块主要包括CMOS摄像头、超声波传感器、加速度传感器和红外光电开关等;采用无线Socket通信技术、UART通信技术和SPI通信技术,实现了系统控制器之间的数据通信功能;系统控制器主要包括嵌入式平台、PC终端、电机驱动/控制器和机械手控制器;基于各个控制器模块的通信功能,实现了移动机器人和六自由度机械手的无线远程控制以及传感器数据无线传输的功能。
推导并给出了轮式移动机器人的数学模型,以运动学模型为基础,进行了轮式移动机器人轨迹跟踪控制的研究。研究了基于BP-PID控制器的轨迹跟踪控制算法,并对算法进行了仿真实验,通过仿真结果验证了算法的有效性和可靠性。
关键词:无线远程控制 嵌入式Linux 传感器信息获取 BP-PID
Abstract
Wireless remote control system of mobile robot based on embedded Linux system involves multidisciplinary and more technical field, as embedded Linux development technology, network communication technology, sensor information technology and automatic control technology and so on. Through researching the hardware platform, software operating system, key technologies of the mobile robot, the function of the mobile robot became more and more perfect, which is of great practical value for the human society.
Firstly, this paper analyzes the status of the wireless remote control mobile robot at home and abroad. The embedded platform of this system was build with the developing board LT2440 produced by LuTong Company and the embedded Linux2.6 operating system after comparison and selection. In combination with the motor/drive controller and the manipulator controller, both of the whole design project and the software architecture were given with embedded platform as the center.
The working principle and function of several robot senor modules were researched in this paper in detail. Using the way of writing embedded Linux module drive, the function of sensor information acquisition was achieved and the actual test results of the sensor modules were given. Sensor modules mainly include CMOS camera, ultrasonic sensor, acceleration sensor, infrared photoelectric switch and so on. Using the communication technology of Socket, UART and SPI, the communication function between controllers which were PC terminal, motor/drive controller and manipulator controller was achieved. The wireless remote control of the mobile robot and manipulator with six degrees of freedom and the function of sensor data wireless transmission were achieved based on the communication function of each controller module.
The mathematical model of wheeled mobile robots was researched in this paper. The control of the trajectory tracking was researched based on the kinematic model. The control algorithm of trajectory tracking based on BP-PID controller was researched in this paper. The simulation experiment about the algorithm was carried out and both of the validity and the reliability were verified though the simulation results.
Key words: Wireless remote control Embedded Linux
Sensor information acquisition BP-PID
目录
第一章 绪论 .................................................................................................................................... 1
1.1研究背景 .............................................................................................................. 1 1.2国内外现状和发展动态 ...................................................................................... 2 1.3研究意义 .............................................................................................................. 3 1.4本文组织结构 ...................................................................................................... 3
............................................................................................ 5 第二章 系统整体设计及模块选型
2.1系统整体概况 ...................................................................................................... 5 2.2嵌入式系统 .......................................................................................................... 6
2.2.1 嵌入式硬件平台 ....................................................................................... 7 2.2.2 嵌入式操作系统 ....................................................................................... 7 2.2.3 嵌入式Linux操作系统的优点 ................................................................. 8 2.2.4 嵌入式Linux驱动与应用程序 ................................................................. 9 2.3系统硬件平台 .................................................................................................... 10
2.3.1 机器人底盘及六自由度机械手 ............................................................. 11 2.3.2 嵌入式开发板 ......................................................................................... 12 2.3.3 电机驱动/控制器和机械手控制器 ........................................................ 12 2.4系统软件架构 .................................................................................................... 14 2.4.1 系统客户机控制界面 ............................................................................. 14 2.4.2 嵌入式平台服务器程序架构 ................................................................. 14 2.5本章小结 ............................................................................................................ 15 第三章 系统无线局域网及传感器模块 ................................................................................ 17
3.1系统无线局域网搭建 ........................................................................................ 17 3.2移动机器人系统的体系结构 ............................................................................ 19 3.3机器人传感器模块 ............................................................................................ 20
3.3.1 视觉传感器模块 ..................................................................................... 20 3.3.2 测距传感器模块 ..................................................................................... 21 3.3.3 机器人航向测量传感器模块 ................................................................. 22 3.3.4 避障传感器模块 ..................................................................................... 23 3.3.5 测速传感器模块 ..................................................................................... 23 3.4机器人传感器信息获取 .................................................................................... 26
3.4.1 机器人视觉信息获取 ............................................................................. 26 3.4.2 机器人加速度传感器信息获取 ............................................................. 28 3.4.3 超声波测距传感器信息获取 ................................................................. 30 3.4.4 红外光电与霍尔速度信息获取 ............................................................. 32 3.5本章小结 ............................................................................................................ 34
第四章 移动机器人无线控制 .................................................................................................. 35
4.1系统控制器模块间的通信 ............................................................................... 35
4.1.1 PC终端与嵌入式平台的通信 ................................................................ 35 4.1.2 嵌入式平台与电机驱动/控制器的通信 ............................................... 38 4.1.3 嵌入式平台与机械手控制器的通信 .................................................... 41 4.2机械手的无线远程控制 ................................................................................... 42
4.2.1 机械手硬件结构 .................................................................................... 42 4.2.2 机械手的位姿分析 ................................................................................ 43 4.2.3 舵机的控制原理 .................................................................................... 46 4.2.4 机械手的无线远程控制 ........................................................................ 47 4.3轮式移动机器人的数学模型 ........................................................................... 48
4.3.1 轮式移动机器人的动力学模型 ............................................................ 49 4.3.2 轮式移动机器人的运动学模型 ............................................................ 50 4.4基于神经网络PID控制的机器人轨迹跟踪 ..................................................... 50
4.4.1 轮式移动机器人的轨迹跟踪 ................................................................ 51 4.4.2 轮式移动机器人轨迹跟踪控制器控制输入量的转换 ........................ 52 4.4.3 BP神经网络PID控制器模型 .................................................................. 53 4.4.4 基于BP神经网络PID的移动机器人轨迹跟踪控制器 ......................... 56 4.4.5 仿真实验 ................................................................................................ 58 4.5本章小结 ........................................................................................................... 59 第五章 总结与展望 ..................................................................................................................... 61
5.1总结 ................................................................................................................... 61 5.2展望 ................................................................................................................... 61 致谢 .................................................................................................................................................. 63 参考文献 ......................................................................................................................................... 65 在校期间科研成果 ....................................................................................................................... 69 附录A ............................................................................................................................................... 71 附录B ............................................................................................................................................... 73 附录C ............................................................................................................................................... 75 附录D ............................................................................................................................................... 79
第一章 绪论 1
第一章 绪论
1.1研究背景
根据联合国标准化组织的定义,机器人被定义为一种可执行不同的任务、具有可改变性和可编程动作性的特定的集成系统[1]。机器人系统集合了当前多种热门高新技术于一体,如自动控制技术、网络通信技术、计算机技术、传感器技术等。轮式移动机器人是机器人家族里的重要一员,它的移动结构采用轮式移动结构。它是一种集动态决策与规划,环境感知,行为控制与执行等多功能于一体的综合系统[2]。它通过自身搭载的处理器来处理其传感器模块采集的环境信息并根据处理结果得出相应的行为控制[3],根据不同的行为控制完成相应的功能任务,如路径规划[4]和轨迹跟踪[5]等。
机器人技术象征着一个国家科技发展水平和经济实力的高低,世界上的各个国家对机器人的研究都高度重视并且投入巨资和人力对机器人技术领域进行相关研究[1]。随着科学技术的迅猛发展和人类社会的不断前进,轮式移动机器人的功能越来越完善、性能越来越先进、应用领域越来越广泛。
目前,计算机的发展趋势是微型化和专业化,这主要得益于以通讯技术、计算机技术为主的信息技术的快速发展以及互联网应用领域的不断扩大。这改变了以台式计算机为主流形式的计算机时代,使其进入了以嵌入式系统[6,7]的形式存在的后PC时代[7]。根据IEEE(国际电气和电子工程师协会)对嵌入式系统的定义,嵌入式系统是被用于控制、监视或者辅助操作机器和设备的装置[8]。它按照实际应用要求,把功能软件和操作系统完善结合并将它们集成在一个硬件系统中,这种计算机系统实现了软件和硬件的一体化结合。因此,嵌入式系统具有功耗低、体积小、软件代码简洁和响应速度快等特点,特别适合于对实时性、多任务和系统体积有要求的应用体系。ARM体系具有易扩展、高性能和低功耗等特点,是典型的嵌入式处理器硬件平台,应用于广泛的嵌入式系统领域。在嵌入式操作系统方面,Linux操作系统具有许多优点,如易于移植、源代码公开、支持多种嵌入式硬件平台、网络功能强等[9],使其在嵌入式领域有着广泛的应用。在嵌入式系统的应用领域中,机器人控制[10,11]领域是非常重要的一个方面,因为嵌入式系统的优点刚好符合机器人系统的需求。在20世纪60年代,机器人远程控制[12]的研究开始兴起。并且随着互联网的广泛应用及最近WIFI技术的兴起,通过WIFI技术实现无线远程控制机器人成为机器人研究的前沿技术领域。
2 基于嵌入式Linux系统的移动机器人无线控制技术
1.2国内外现状和发展动态
国外对于机器人的研究起步较早,相对于国内来说技术也较成熟。在世界范围内拉开移动机器人研究序幕的时间可追溯到20世纪80年代,当时的美国国防高级研究计划局(DARPA)立项并制定了地面无人作战平台的战略计划。随后,世界上的各个国家都制定了相关战略计划。
国外著名的移动机器人有如下几个典型代表:1979年,法国的HILARE行走机器人[13]成为第一个应用多传感器模块(视觉、声音、激光测距等)感知环境信息的可移动机器人,它能够在人造未知环境中稳定运行;1997年,代表了远程控制移动机器人技术巅峰的火星探测机器人“Sojourner”登上了火星,它由美国的NASA研制;第二代远程控制移动机器人的典型代表是“Xavier”,它由美国卡内基-梅隆大学的Reid Simmons教授科研小组开发研制;军用或警用的排爆机器人在国外技术也是比较成熟的,排爆机器人集合了传感器信息融合技术、机械手操作技术、无线远程控制技术等热门技术;其它的机器人远程控制系统还有英国布拉德福大学的“Robotic Telescope”[14],它是一个能够在万维网上进行交互的移动机器人系统; 英国曼彻斯特大学的“Forty Two”[15],它是一个基于互联网的移动机器人远程控制系统。
国内移动机器人的技术成熟度及应用领域等方面均没有达到国外的先进程度,整个国内对移动机器人的研究起步比较晚,但是也取得了不错的成就。比较典型的有:由清华大学开发研究的智能移动机器人在1994年通过鉴定,它涉及到的技术有基于地图的全局路径规划、基于传感器信息的局部路径规划、传感器数据信息融合[16,17]等;哈尔滨工业大学开发研制的用于服务场合的轮式智能移动机器人,能够无缆行走、自主避障、并能与人对话等;由中国航天科工集团自主研制的第二代排爆机器人“雪豹-10”参加2010年的珠海航展,它的某些技术处于国内领先水平;在2012年中国专交会上亮相的全地形排爆机器人由中国科学院沈阳自动化研究所开发研制;这些都代表了国内移动机器人的先进技术,标志着国内移动机器人技术正在迅猛发展。
移动机器人技术的发展趋势主要表现有两个特点:其一表现在横向上,移动机器人的应用领域越来越广泛,种类越来越多;其二表现在纵向上,移动机器人的性能越来越高,而且越来越智能[9]。
目前,嵌入式系统发展速度迅猛,在各个领域都有着广泛的应用,如医疗、服务、军事等方面。但是,在移动机器人方面,嵌入式系统的应用还处于开始阶段,国内外都在此领域进行相关研究。近年来,随着WIFI技术的兴起,其凭借自身的优势特点,应用领域越来越广泛,它改变了访问互联网的方式[18]。在移动机器人领域,通过WIFI技术实现无线远程控制移动机器人也刚刚起步。
第一章 绪论 3
1.3研究意义
当前世界各国都在加大移动机器人的开发研究力度,移动机器人正在朝着智能化和多样化的趋势发展[19]。无线远程控制的移动机器人不管在民用和军用方面都有着极其重要的意义[20],在民用方面:典型应用如在汶川大地震中应用的救援机器人;日本福岛核电站爆炸事故中的救援机器人;家用巡逻监控服务机器人等。在军用方面:典型应用如军用排爆机器人;信息侦查机器人等。这些应用都有一些共同点,能够无线远程控制[21,22],能够代替人类执行一些危险操作等。无线远程控制移动机器人是当今各个国家研究的热点,而且基于WIFI的无线远程控制移动机器人正处在起步阶段,因此,对其技术进行相关研究具有重大意义。
当前,网络应用领域越来越广泛,网络技术和其它先进科学技术相结合的新兴技术也随之兴起。在移动机器人控制领域,基于互联网的移动机器人无线远程控制便是其中一个热门技术点。它改变了移动机器人的传统遥控操作技术,构筑基于TCP/IP的网络控制系统,使移动机器人的控制延伸到世界的各个角落[23]。
在本文中所述的基于嵌入式Linux系统的无线移动机器人,嵌入式硬件平台采用ARM9(S3C2440A)处理器,操作系统采用嵌入式Linux操作系统,实现了移动机器人体积小、模块化等功能;所采用的嵌入式硬件平台接口资源丰富,功能完善,改变了以往采用单板机作为控制处理器的移动机器人功能单一的缺陷;而且在嵌入式Linux操作系统下开发无线网络通信模块方便快捷,实现了无线远程控制移动机器人的功能。系统采用用模块化设计方法,使得整个系统成为一个具有开放性和可扩展性的实验平台,具有很好的教学使用价值。论文中研究的相关技术成果可以应用在机器人控制的一些相关领域中。论文中研究的相关技术成果可以应用在机器人控制的一些相关领域中。
1.4本文组织结构
本论文主要研究如何将移动机器人与无线Internet结合,构建易于移植、可扩展、开放的、可重构的机器人无线控制系统的实现技术。从提高远程控制系统的实时性出发构建无线局域网,设计实现一个基于嵌入式Linux系统和无线局域网的移动机器人控制系统。论文的章节安排及内容如下:
第一章主要分析了研究背景、无线远程控制移动机器人的国内外现状及发展趋势,从而引出论文的研究意义和所做的主要工作。
第二章主要介绍系统整体设计概况及系统模块选型。然后介绍了嵌入式系统,包括嵌入式系统的硬件平台和软件操作系统。最后给出了系统的整体软件架构。
第三章主要研究在嵌入式Linux系统下对移动机器人传感器模块的信息获取。首先介绍了系统无线局域网的搭建。然后按移动机器人传感器模块的划分进行信
4 基于嵌入式Linux系统的移动机器人无线控制技术
息获取的介绍并给出实际测试结果,对应的传感器模块有:CMOS摄像头、加速度传感器、超声波测距传感器、红外光电及霍尔传感器等。
第四章主要研究并实现了移动机器人的无线远程控制和轨迹跟踪控制算法。首先研究并实现了系统模块间的通信功能,包括PC终端、嵌入式平台、电机/驱动控制器和机械手控制器。这四个模块间的相互通信实现了在PC终端远程控制移动机器人、显示移动机器人底层传感器数据的功能。然后研究了六自由度机械手的构成、位姿分析及微型伺服直流电机(舵机)的控制方法,并实现了远程控制机械手的功能。最后,研究了基于BP-PID控制器算法的移动机器人轨迹跟踪控制,包括移动机器人建模、BP-PID控制器的分析和建模、控制输入量的变换推导等,最后进行了控制算法的仿真,并给出了仿真结果,验证了算法的有效性和可靠性。
第五章总结了论文工作,并提出了论文中不足之处及不够深入的地方,展望了存在问题的解决方向。
第二章 系统整体设计及模块选型 5
第二章 系统整体设计及模块选型
本章给出了系统的整体设计概况和系统模块的选型。然后介绍了嵌入式系统,包括嵌入式系统的硬件平台和软件操作系统。并在比较后选择了适合本系统开发的嵌入式开发板和嵌入式Linux操作系统及硬件模块。最后给出了系统的整体软件架构。
2.1系统整体概况
本系统是基于WIFI移动IP网络无线控制移动机器人(六驱地形车)的开放性实验平台,系统主要由三大部分构成:终端控制界面部分、WIFI移动IP网络部分和底层移动机器人载体部分。系统整体框图如图2.1所示。
图 2.1 系统整体框图
由系统框图可知,系统终端为PC机,通过USB无线网卡和无线路由与移动机器人底层建立连接,基于TCP/IP[24,25]实现数据的无线传输功能。在本系统中终端部分是一个基于MFC[26]开发的控制界面,能够与底层嵌入式平台通过无线网络进行信息交互。移动机器人底层的嵌入式平台可理解为协调层及控制层。嵌入式平台获得传感器数据后进行分类处理,决定是上交到PC终端进行处理还是进行实时处理得出控制行为。控制层(电机驱动/控制器和机械手控制器)以反射式或反应式行为实现以避障为主的路径规划与路径跟踪控制等。系统功能框图如图2.2所示:
6 基于嵌入式Linux系统的移动机器人无线控制技术
图 2.2 系统功能框图
由图2.1和2.2可知,系统按功能可分为以下几个主要模块:终端控制模块、传感器模块、嵌入式平台模块、六驱电机驱动/控制模块、六自由度机械手控制模块和可扩展接口模块。下面按模块介绍一下本系统:
1. 终端控制模块。该部分是在PC机上基于MFC开发的控制界面,通过TCP/IP与移动机器人底层进行通信,控制界面可以实时显示底层传感器数据,可以发送相应的控制指令等。
2. 传感器模块。该部分主要包括移动机器人底层的几种传感器。CMOS摄像头是机器人的单目视觉模块,采集环境图像并上传到PC终端进行显示,后续可进行相关处理;超声波传感器用来测距,获得障碍物的距离信息;加速度传感器用来获得机器人的航向信息;霍尔传感器用来获得机器人的速度信息;红外光电实现机器人反应式避障功能。
3. 嵌入式平台模块。嵌入式平台为ARM9(S3C2440)+Linux2.6操作系统。该平台采集传感器信息,与PC终端通信,进行信息融合后得出控制行为控制底层驱动。平台与PC终端通过TCP/IP协议进行信息交互,与电机控制模块通过UART(RS-232)进行通信,与机械手控制模块通过SPI协议进行通信。
4. 六驱电机驱动/控制模块。该模块的控制核心为Atmega168单片机,接收嵌入式平台的电机控制信号,驱动移动机器人电机,控制机器人行进。
5. 六自由度机械手控制模块。该模块的控制核心为C8051F040单片机,与嵌入式平台通过SPI协议进行信息交互,接收嵌入式平台的六舵机控制信息来控制机械手的六舵机,实现机械手的操作功能。
6. 可扩展接口模块。该模块是系统为以后的升级和扩展所预留的一些接口。可以为机器人添加更丰富的传感器来提升其性能。
2.2嵌入式系统
嵌入式系统是以应用为中心,计算机技术为基础,软硬件可配置,对功能、
第二章 系统整体设计及模块选型 7
可靠性、成本、体积、功耗有严格约束的一种专用系统[27]。嵌入式系统一般由三个主要部分构成:嵌入式硬件平台,即嵌入式处理器、嵌入式操作系统、嵌入式系统应用程序,即客户自己开发的应用程序。 2.2.1 嵌入式硬件平台
目前,ARM和PowerPC两大系列占据了世界上嵌入式处理器的大部分市场。ARM[28] (Advanced RISC Machines)既是一个公司名称,也是一类微处理器的统称,同样是一种开发技术的名称。采用ARM处理器进行嵌入式开发有许多优势:首先,ARM处理器耗电少、成本低和功能强;其次,ARM处理器是一款具有16位/32位双指令的嵌入式处理器;第三,ARM系列在全球有众多的合作者,这样可以保证芯片的充足供应。
ARM采用32位体系结构,具有低功耗、低成本和高性能的特点,代表了当今32位嵌入式RISC处理器内核的发展方向。ARM系列发展至今,从ARM7到ARM11的几大系列都已经成熟应用在各个领域,如网络应用、嵌入式控制、多媒体和移动通信等。本系统使用三星公司的S3C2440A[29] ,它采用的处理器内核是ARM920T,最高运行速能够达到533MHZ。
S3C2440A有丰富的外设资源,如在本系统开发中所用到的UART(串口)、SPI(增强型串行通信)、I2C、ADC和摄像头接口等。这些丰富的外设资源和ARM920T处理器内核满足了嵌入式系统开发的低成本、低功耗和低体积的要求。 2.2.2 嵌入式操作系统
操作系统的作用主要有以下几个方面:统一管理系统资源,为用户提供访问硬件的接口、调度多个应用程序、管理文件系统等[30]。嵌入式操作系统[31]EOS(Embedded Operating System)负责分配、调度嵌入式系统的软、硬件资源并且控制协调并发活动。嵌入式操作系统可以卸载一些通用模块来实现系统所要求的功能。嵌入式操作系统不但具有任务调度、同步机制、中断处理、文件功能等基本功能,而且具有可装卸性、强实时性、强稳定性、易移植性、可固化代码等特点。
嵌入式操作系统按照实时性的标准来划分主要有两种:实时操作系统和非实时操作系统,前者的应用主要在面向控制、数据网络、通信等领域,实时操作系统的典型代表有VxWorks、pSOS、Windows CE等;后者的应用领域主要在移动电话、机顶盒和PDA等消费电子类产品中。嵌入式操作系统按照应用范围的角度来划分也可以分为两类:通用型嵌入式操作系统和专用型嵌入式操作系统,前者的典型代表有Linux、VxWorks、Windows CE等;后者的典型代表有Plam OS、Symbian等。下面主要介绍几种常用的操作系统。
8 基于嵌入式Linux系统的移动机器人无线控制技术
1. Linux
随着Linux在服务器领域和桌面系统获得的成功,Linux以其开源性、稳定性和免费性的特点在嵌入式系统中获得了越来越广泛的应用。发展至今,嵌入式Linux已经有很多版本,其中主要包括RT-Linux和uCLinux两种[8]。与Windows系统相比,它具有硬件需求低、架构开放、系统安全性强、稳定性高、完全免费等特点[30]。
2. Windows CE
Windows CE是为各种嵌入式系统和产品设计的一种压缩的、高效的、可升级的操作系统,具有出色的图形用户界面效果和强大的计算能力。Windows CE支持各种硬件外围设备及网络系统,包括键盘、鼠标、串行端口等。它的设计目标是,模块化及可延展性、实时性能好、通信能力强大、支持多种CPU。它不仅继承了传统的Windows图形界面,并且在Windows CE平台上可以使用Visual Basic、Visual C++等编程工具,只需将大部分应用软件进行简单修改,就可移植到该平台继续使用。
3. VxWorks
VxWorks操作系统是一种嵌入式实时操作系统[32,33](RTOS),它具备高性能的内核、友好的开发环境和良好的发展能力,是嵌入式开发环境的关键组成部分,已经在RTOS领域中占重要位置。VxWorks具有可靠性、实时性、可裁剪性等特点。
2.2.3 嵌入式Linux操作系统的优点
上文介绍了嵌入式处理器和当前一些嵌入式操作系统,在本系统中选择嵌入式Linux操作系统(Linux2.6.33.2)。
嵌入式Linux操作系统[34]是根据嵌入式系统的开发要求而专门设计的,它一般由一个内核和一些系统模块组成,这些系统模块可根据系统要求进行裁剪。嵌入式Linux能够适应于多种CPU和硬件平台,性能稳定,裁剪性好。嵌入式Linux操作系统具有的优点有如下几个主要方面:
1. 支持多种体系结构;
2. 多任务、内核稳定、可定制和源代码开放; 3. 强大的网络支持功能; 4. 支持多文件系统; 5. 驱动丰富,支持大量外设; 6. Linux具备一整套工具链。
第二章 系统整体设计及模块选型 9
2.2.4 嵌入式Linux驱动与应用程序
由上至下,一个嵌入式软件系统可以分为:应用程序、库、操作系统(内核)和驱动程序。这四层的软件协作关系示例图如图2.3所示:
open应用程序系统调用执行swi指令进入内核库readwriteioctl………调用其他库函数其他库函数的实现系统调用的异常处理内核open驱动程序硬件设备readwriteioctl………其他功能 图 2.3 嵌入式Linux软件系统的层次关系
由图2.3可知,嵌入式Linux软件系统的工作过程如下:
1. 应用程序使用库函数open打开设备文件,这个设备文件是某一个硬件的代表;
2. 库根据open函数传入的参数执行“swi”指令,这条指令会引起CPU异常,进入内核;
3. 内核的异常处理函数根据这些参数找到相应的驱动程序,返回一个文件句柄给库,继而返回给应用程序;
4. 应用程序得到文件句柄后,使用库提供的write或ioctl函数发出控制指令; 5. 库根据write或ioctl函数传入的参数执行“swi”指令,这条指令会引起CPU异常,进入内核;
6. 内核的异常处理函数根据这些参数调用驱动程序的相关函数,驱动硬件。 应用程序中的open、read、write、ioctl等接口函数被称为系统调用,这些函数都是设置好相关寄存器后,执行某条指令(对ARM架构,这条指令为swi)引发异常进入内核。在异常处理函数中,内核会根据传入的参数执行各种操作,如根据设备文件名找到对应的驱动程序,调用驱动程序的相关函数等。一般当应用程序调用open、read、write、ioctl等函数后,将会使用驱动程序中的open、read、write、ioctl函数来进行相关操作,比如初始化、读、写等[35]。
10 基于嵌入式Linux系统的移动机器人无线控制技术
与应用程序不同,驱动程序不会主动运行,它是被动运行的;根据应用程序的要求进行初始化、读写等。实际上,驱动程序和内核没有界线,驱动程序最终会编进内核中:通过静态链接或动态加载。在Linux系统中,应用程序运行于“用户空间”,驱动程序运行于“内核空间”。
Linux内核源代码中大部分都是各种驱动程序的代码, 针对某一个硬件设备的Linux驱动程序[36,37]的编写步骤大致如下:
1. 查看这个硬件设备的原理图和数据手册,了解这个硬件设备的的操作方法;
2. 在内核中找到相近的驱动程序,以其为模板进行开发;
3. 实现驱动程序的初始化:如内核中注册这个驱动程序,这样应用程序传入文件名时,内核便能找到相应的驱动程序;
4. 设计要实现的的操作:如open、close、read、write等函数; 5. 实现中断服务(中断并不是每个设备驱动都具有的); 6. 编译该驱动程序到内核,或者以模块形式加载; 7. 编写应用程序进行测试该驱动程序。
2.3系统硬件平台
移动机器人系统的硬件部分主要由PC机、六驱地形车、六自由度机械手、传感器模块、嵌入式开发板、电机驱动/控制器和机械手控制器等模块组成,整个硬件架构如图2.4所示。
PC无线网卡无线路由器无线网卡UART传感器模块IO嵌入式开发平台SPI电源电机驱动/控制器机械手控制器六驱地形车机械手 图 2.4 系统硬件架构
由图2.4可知,系统以USB无线网卡和无线路由组成无线局域网,在无线局域网内,通过嵌入式开发平台的协调处理,实现无线远程控制六驱地形车和机械手的功能。
第二章 系统整体设计及模块选型 11
2.3.1 机器人底盘及六自由度机械手
1. 机器人底盘
移动机器人的底盘主要有轮式和履带式两种结构形式。轮式平台具有运动速度快、效率高和运动噪声低等优点,但是地形适应能力差,而这恰好是履带式平台的优点。为了结合二者的优点,本系统中的移动机器人底盘选为六驱轮式地形车,采用全球首创的6WD减震系统,具有超强的地面适应能力,在载重动力和运动平衡方面都有不错的效果。
下面为机器人底盘的规格参数: 1) 底盘尺寸:425×300×120mm; 2) 最大负载:8KG;
3) 额定电压:DC 6V(最小2V最大7.5V); 4) 最大堵转电流 5.5A; 5) 马达RPM:10000 +/- 5%; 6) 齿轮箱转速比:34:1; 7) 输出轴速度:295rpm +/- 5%。 2. 六自由度机械手
机械手的自由度越多,其灵活性越好,完成动作的复杂度越高。本系统选择一款与六驱地形车相匹配的六自由度机械手。它由6个微型伺服电机(舵机)组成,分别对应于臂、肘、腕(2个自由度)、张合5个关节和1个旋转底座,每个关节可在一定范围内运动,底座可以实现左右90度旋转。以下为六自由度机械手参数:
1) 机械臂长度:340MM; 2) 总高度:420mm; 3) 舵机数量:6个; 4) 供电电压:4.8-6.8V; 5) 最大电流:小于5000mA; 6) 可夹持重量:约200g。 图2.5为底盘加机械手实物图:
12 基于嵌入式Linux系统的移动机器人无线控制技术
图 2.5 底盘加机械手实物图
2.3.2 嵌入式开发板
目前嵌入式开发板的种类有很多,其处理器内核包括了从ARM7到ARM11等系列。ARM7外设接口不够丰富,ARM11价格比较昂贵。因此,从系统的实现功能和成本方面考虑,本系统选用了陆通网络科技的LT2440开发板做为嵌入式开发平台,它以S3C2440AL(ARM9)处理器为核心,具有低功耗、性能强、外围设备资源丰富等优点。
1. 核心CPU:核心CPU为2.2.1小节中所述的S3C2440A处理器,它采用ARM920T作为内核,是16/32位的RISC嵌入式微处理器。它有着丰富的外设资源,能够满足本系统嵌入式开发所需要的性能要求。
2. 设备接口:开发板给出了丰富的设备接口,大大降低了开发周期。在本系统中用到的主要设备接口主要有以下几个:USB接口,用来连接USB无线网卡,实现与PC终端通信的功能;串口,包括UART0、UART1,UART0用于和PC机的超级终端,打印调试信息等;UART1用于和电机驱动/控制器通信;Camera接口,用来连接CMOS摄像头,采集图像信息;IO接口,包括SPI(与机械手控制器通信)、I2C(超声波传感器信息采集)、Interrupt(红外光电和霍尔信号采集)、ADC(电压信号采集)等。
3. 调试模块:JTAG用于下载BootLoader和一些调试程序,串口可用来输出打印信息。
2.3.3 电机驱动/控制器和机械手控制器
1. 电机驱动/控制器
第二章 系统整体设计及模块选型 13
在本系统中的电机驱动/控制器为15A双路电机驱动/控制器,兼容AVR和Arduino等微控制器。该控制器的控制核心为AVR Atmeag168单片机,具有以下功能:
1) 双15A持续FET“H”桥,带保险丝; 2) 处理器和显示LED可探测保险丝是否熔断; 3) 5A的LDO稳压器为逻辑电路、控制器等供电; 4) 2A的DC电源插孔用来测试、输入程序和充电; 5) 处理器可以检测电池电压,并控制充电线路;
6) 可以配用USB、TTL串口线和I2C,也可以与RC和模块输入同时操作; 7) 带有Arduino和AVR兼容性,通过USB或ISP接口下载程序。 2. 机械手控制器
机械手控制器的控制核心为51系列单片机C8051F040[38],它是集成在一块芯片上的混合信号系统级单片机,在一个芯片内集成了构成一个单片机数据采集或控制的智能节点所需要的几乎所有模拟和数字外设以及其他功能部件,是目前8位单片机的典型代表。
1) 控制器内核(高速51内核):指令结构采用流水线方式,70%的指令执行时间在一个或两个系统时钟周期内;速度可达25MIPS(使用25MHz 时钟时);有20个向量中断源;
2) 存储设备:4352字节内部数据RAM(4K + 256);KB FLASH,可以在
系统编程,扇区规模为512字节;外部KB 数据存储器接口;
3) 设备接口:控制器有丰富的模拟外设和数字外设接口。模拟外设主要包括:
12位SAR ADC、8位ADC、两个12位DAC等;数字外设主要包括:8个8位宽端口I/O,耐5V、SPITM 及两个UART串行端口、可编程的16位计数器/定时器阵列,有6个捕捉/比较模块。在本系统中主要用到SPI和16位计数器/定时器阵列(产生控制舵机的PWM);
4) 调试模块:支持片内JTAG调试和边界扫描,片内调试电路提供全速、非侵入式的在片/在系统调试;支持断点、单步、观察点、堆栈监视器。
14 基于嵌入式Linux系统的移动机器人无线控制技术
2.4系统软件架构
2.4.1 系统客户机控制界面
图 2.6 PC终端移动机器人控制界面
PC终端的移动机器人控制界面是基于MFC编写的客户机程序。如图2.6所示的控制界面分为几大部分:机器人IP寻址:即连接移动机器人底层IP,与嵌入式平台服务器连接;机器人模式选择:选择机器人的控制方式;机器人位姿参数设定:主要设定速度与航向角;机器人传感器数据显示:显示底层传感器数据;机械手状态:即六舵机的旋转角度;图像显示:显示摄像头拍摄的图像;机器人轨迹跟踪:根据位姿设定参数与传感器反馈参数描绘机器人行进轨迹。 2.4.2 嵌入式平台服务器程序架构
在本系统中,嵌入式平台服务器是系统的中心部分,向上与PC终端通信,向下与电机/驱动控制器和机械手控制器通信。图2.7为嵌入式平台服务器软件架构:
第二章 系统整体设计及模块选型 15
开始接收/发送数据缓冲区全局变量定义SocketSPIUART否连接成功?接收控制命令/参数返回传感器数据主进程初始配置设备文件描述符(SPI、UART、套接字等)多线程共享内存获取图像线程获取左右电机速度线程获取机器人航向角线程机器人基本动作线程机器人轨迹跟踪线程机械手控制线程关闭设备文件退出主进程
图 2.7 嵌入式平台服务器软件架构
如图2.7所示,嵌入式平台服务器为并发服务器模式,即根据PC终端不同的控制命令创建不同的线程。其中涉及到多线程、Socket、SPI和UART等编程。主进程一开始要定义全局变量,包括数据接收/发送缓冲区、设备文件描述符等。接下来要对设备进行初始配置,包括Socket套接字、SPI和UART等。然后根据不同的控制命令创建不同的线程,如获取摄像头视频线程、获取传感器数据线程和控制移动机器人线程等。如果收到结束命令,则关闭设备文件,退出主进程。
2.5本章小结
本章给出了无线远程控制移动机器人的整体设计概况,采用USB无线网卡和无线路由构建WIFI局域网,以嵌入式开发板和嵌入式Linux操作系统构成嵌入式开发平台;经过比较选型,确定了系统的主要硬件模块型号;给出了系统的整体软件架构,包括客户机控制界面和服务器流程架构;为系统的功能设计及控制算法的设计奠定了扎实的基础。
16 基于嵌入式Linux系统的移动机器人无线控制技术
第三章 系统无线局域网及传感器模块 17
第三章 系统无线局域网及传感器模块
上一章主要介绍了移动机器人系统的整体设计和硬件平台等内容。机器人对环境信息的感知主要通过其自身的传感器来完成,环境越复杂,需要的感知系统也就越复杂。移动机器人通常可以采用计算机视觉、超声波传感器、红外传感器等来获取环境信息。在本系统中的机器人感知系统主要包括以下几种传感器:单目CMOS摄像头、超声波测距传感器、红外光电传感器(机器人反应式避障)、加速度传感器(获取机器人航迹信息)和霍尔信号传感器(获取机器人速度信息)。在本系统中嵌入式平台的软件系统选择的是嵌入式Linux系统,首先研究并实现了系统无线局域网的搭建;然后研究了传感器模块的工作原理和功能作用并实现了在嵌入式平台下获取移动机器人传感器信息的功能。
3.1系统无线局域网搭建
移动机器人的无线远程控制主要有以下几种方式:
1. 红外遥控方式,该方式通用性强,缺点是稳定性差、易受干扰、有效距离短、带宽窄、传输速率低等。
2. 基于GSM/GPRS网络的远程操控方式,这是当前比较先进的操控方式。它的优点是设备简单、实用、可靠。与距离无关,只要有GSM/GPRS网络的地方就可以实现远程监测和控制。其缺点是构建系统复杂、依赖移动通信网络、使用和维护成本高,由于GSM/GPRS网络的带宽,不能承载如视频传输等对带宽需求较高的业务。
3. 基于Internet的PC机遥控操控方式,基于Internet的PC机遥控操作是远程控制技术的一个研究重点。基于Internet的遥控操作方法与距离无关,可以从世界上任何可以连接Internet的电脑上实现远程操控。其缺点是受网络通信带宽影响较大。
结合目前的无线远程控制方式及当今无线网络技术的发展趋势,本系统提出了利用无线WIFI技术实现无线远程控制移动机器人的设计思路。WIFI俗称无线宽带,有其突出的优势:其一,无线电波的覆盖范围广,基于蓝牙技术的电波覆盖范围非常小,半径大约只有50英尺左右,约合15米,而WIFI的半径则可达300英尺左右,约合100米。其二,传输速度非常快,可以达到54mbps(802.11N可以达到600Mbps),符合个人和社会信息化的需求。其三,方便快捷,无须布线,只要在机场、车站、咖啡店、图书馆等人员较密集的地方设置“热点”,并通过高速线路将因特网接入上述场所。系统无线局域网示意图如图3.1所示:
18 基于嵌入式Linux系统的移动机器人无线控制技术
图 3.1 系统无线局域网示意图
由3.1图可知:搭建无线局域网需要有无线路由和无线网卡,在本系统中选择D-Link(型号:DIR-605)无线路由器和Tenda(型号:W311M)USB无线网卡。DIR-605采用标准802.11n无线技术,无线速率最高可达300Mbps;具有1个WAN口,4个LAN口,具备WEP加密功能,提供使用者加密,除通常的WEP加密功能外,也支持WPA安全控管功能,给予额外的安全功能选择,提供多项安全机制。能够为本系统提供足够的带宽和有效通信距离,同时也具备良好的稳定性。
Tenda W311M 无线网卡支持150Mbps的传输速率,符合802.11n标准,兼容802.11g、802.11b标准;提供USB2.0接口,支持20MHz/40MHz频宽;自动侦测网络及变换传输速率;兼容Windows 7、Windows XP、Linux等多种操作系统。在本系统中需要两个无线网卡,一个在PC终端,为Windows XP 操作系统,一个在嵌入式开发板,为Linux操作系统。
在PC主机端安装USB无线网卡驱动及应用软件,设置无线路由器网络名(dlink-412)等。在嵌入式ARM9开发板端,因为系统内核中支持无线网卡驱动,需要修改内核配置使驱动生效,即在配置内核时将此驱动设置为编译进内核模式。在Linux下配置无线网卡的工具是wireless-tools,将使用配置命令编译在一个脚本文件里便可配置无线网卡,以后只要运行此脚本,便可完成无线网卡的配置,脚本文件内容如下:
#!/bin/sh
ifconfig wlan0 up
iwconfig wlan0 essid “dlink-412” iwconfgi wlan0 ap auto iwconfig wlan0
ifconfig wlan0 192.168.0.100 netmask 255.255.255.0
由以上脚本文件可知:嵌入式ARM开发板端IP为192.168.0.100,在局域网内PC机端要和ARM开发板端在同一个网段,在本系统中,PC终端IP设为192.168.0.102。为验证PC终端与ARM开发板已经在一个局域网内,进行ping命令相互测试,图3.2为ARM开发板ping PC终端,3.3为PC终端pingARM开发
第三章 系统无线局域网及传感器模块 19
板:
图 3.2 ARM开发板ping PC终端 图 3.3 PC终端 ping ARM开发板
由图3.2和3.3可知:ARM开发板和PC终端可以相互ping通,已经在一个局域网内,即可以实现相互数据传输,为系统信息交互奠定了基础。
3.2移动机器人系统的体系结构
因为移动机器人系统是一个智能控制系统,因此它需要有一个适当的体系结构,这样便可以实现系统模块之间的合理协调,并使系统的软、硬件具有开放性和可扩展性[39,40]。一个合理的体系结构可以实现复杂行为并具备进一步完善的扩展能力[41,42]。移动机器人体系结构一般有递阶式(hierarchical)、反应式(reactive)和慎思/反应复合式(deliberative/reactive)三种类型[43]。在本系统中的移动机器人体系结构采用复合式体系结构,其结构示意图如图3.4所示:
全局目标人机接口慎思层增量模型建模决策慎思规划完成请求完成路径目标分解子目标局部规划控行为模式制层运动控制速度命令电机驱动行动协调层局部信息传感环境 图 3.4 复合式体系结构
复合式体系结构如图3.4所示,它主要包含三个个层次:控制层、慎思层和协
20 基于嵌入式Linux系统的移动机器人无线控制技术
调层[44]。控制层(control layer)快速地对感知信息进行响应,通常采用反应式行为方式;慎思层(deliberative layer)处理计算复杂的规划或大规模的信息处理任务,用两种方式干预控制层,即通过慎思层产生规划并将规划结果交给控制层来执行,或响应控制层的请求而启动慎思规划,处理反应式行为难以解决的问题;协调层 (coordination layer) 也称为排序层(sequncer layer),如同一个行为排序器,确定控制器在当前选择什么行为,并提供所需要的信息。
复合式体系结构由于兼顾了控制的实时性和整体性能优化的要求,成为复杂智能系统的主要设计范式。在本系统设计中采用复合式体系结构,在2.1小节的系统整体框图中,PC终端可以理解为慎思层,嵌入式平台可以理解为协调层和控制层,机械手控制器和电机驱动/控制器为控制层。
3.3机器人传感器模块
机器人传感器模块可以将环境中具有某种物理表现形式的信息获取并转换为机器人可以识别处理的信息。传感器器件可以将需要测量的非电量信号转换为与之相对应的电量输出。下面介绍本移动机器人系统中的几个主要传感器模块。 3.3.1 视觉传感器模块
当前主要的图像传感器有CCD图像传感器和CMOS图像传感器,二者具有相同的光电转换原理,但是不同的制作工艺和不同的器件结构使二者在性能上有一定的差别[45]。
1. CCD图像传感器
CCD图像传感器,即电荷耦合器件图像传感器,CCD的原型是由高纯度的硅及集成在周围的电路组成。CCD主要由MOS(金属-氧化物-半导体)光敏元阵列和读出移位寄存器组成;光敏单元对光信号进行取样并将光的强弱转换为其电荷的多少;光敏元电荷在取样结束后由转移栅转移到移位寄存器的相应单元中;在驱动时钟的作用下移位寄存器将信号电荷顺次转移到输出端,完成光电转换。
2. CMOS图像传感器
CMOS全称为互补金属氧化物半导体,CMOS图像传感器是利用CMOS工艺制造的图像传感器。CCD和CMOS在制造上的主要区别为:CCD是集成在半导体单晶材料上,而CMOS是集成在被称为金属氧化物的半导体材料上,工作原理没有本质的区别,都是利用感光二极管(photodiode)进行光电转换。表3.1为CCD与CMOS图像传感器的特点:
第三章 系统无线局域网及传感器模块 21 表 3.1 CCD与CMOS图像传感器特点 CCD 像元尺寸小 噪声低 暗电流低 灵敏度高 全帧转移结构占空比近100% 具有自然的电子快门 CMOS 单一内部电压供电 单一主控时钟 低功耗 X Y寻址可任意开子窗口 系统尺寸小 相机电路易于全集成 由表3.1可以看出,二者各有特点,互为补充,在本系统开发中考虑系统的成本和相机体积等因素,选择了低成本和低体积的CMOS图像传感器作为机器人的单目视觉传感器,CMOS图像传感器型号为OV9655。
OV9655 CMOS摄像模块是先进、节能的高精度相机的内置式组件,它把实现优质VGA影像的CMOS影像传感器与高度集成的影像处理器、嵌入式电源和高质量的透镜组结合在一起,输出视频图像,提供了完整的影像解决方案。其参数指标如下:
1) 像素数:130万;
2) 动态图像分辨率:1280×960/0×480/320×240; 3) 图像格式:SXGA/VGA/QVGA; 4) 图像传输速率:15/30/60 fps ; 5) 输出信号:YUV/YCbCr/RGB; 6) 工作电压:1.8V-3.3V。 3.3.2 测距传感器模块
测距传感器和开关式接近传感器不同,它可以返回检测到的物体和传感器之间的距离信息,机器人利用距离信息可以进行适当的行为控制。常用的测距传感器有激光测距仪和超声波传感器等。
1. 激光测距仪
激光测距通过对被测物体发射激光光束,并接收该激光光束的反射波,通过二者之间的时间差确定出被测物体同传感器之间的距离。一般采用脉冲法和相位法获取距离信息[46]。利用脉冲法或相位法测距原理并借助机械扫描或光学扫描就可以实现具有一定检测范围的二维或三维激光测距仪。如德国SICK公司的一款二维激光测距仪LMS200。
2. 超声波传感器
超声波传感器通常由超声头(发射和接收)和相关的信号处理电路组成。发
22 基于嵌入式Linux系统的移动机器人无线控制技术
射超声头用来产生超生波,接收超声头用来接收返回的超声波。信号处理电路主要由激励发射超声头的电压放大电路和处理回收超声波的信号接收电路组成。超生波传感器的测距原理通常采用渡越时间法:测量超声波从发射到返回之间的时间间隔∆t,即渡越时间,根据此计算出相应的距离信息,即:
1=DC∆t (3-1)
2式中:D为超生波传感器同被测物体之间的距离;∆t为从超声波发射出去到接收到返回超声波之间的时间间隔;C为超声波在空气中的传播速度,通常情况下可认为C为常数(340m/s)。
同超声波传感器相比,激光测距仪具有测量速度快、测量精度高、扩散角较小等优点,但是激光测距仪价格昂贵,并且不能感知某些透明物体(如玻璃等)。而超声波传感器实时性强、价格低廉、硬件简单、通过信息融合后能够准确地反映环境信息,被广泛应用于智能机器人运行载体的定位、测距等工作中。因此,本系统选择采用超声波传感器完成机器人的测距功能。
本系统中选用的超声波测距传感器为KS103高性能超声波测距模块,通过标准I2C接口与主机通信,不占用主机定时器,还可与其它器件共用总线;含温度补偿功能,测量精度高,使用温度修正的测距命令,近距离内最高精度达1mm,误差为0.152mm/17cm;测量盲区最小至1cm,基本无盲区;探测频率达500hz,即最快为2ms探测一次。以10CM为一个量程区间,从10cm,20cm,到470cm具有不同的探测指令;智能探测结束识别功能:可通过查询SCL线的方法,确定探测是否结束,提高了探测效率。 3.3.3 机器人航向测量传感器模块
机器人航向测量一般可以采用陀螺仪和加速度传感器等。加速度传感器容易受外部干扰,但是测量值随外部时间的变化相对较小;陀螺仪通过积分可以得到角度关系,动态性能好,受外部干扰小,但是测量值随时间变化较大。一般采用二者相互补充、数据融合的方法,在本系统实验初期采用加速度传感器进行机器人的航向测量和姿态倾斜测量。
本系统中采用的加速度传感器为芬兰VTI系列SCA610-C21H1A,测量倾角范
围为±90,灵敏度为4V/g,具有精度高、稳定性好和优良的负载和抗冲击能力等优点。输出的电压信号经处理器S3C2440的10位ADC采集转换成角度值。SCA610芯片为八脚贴片封装,体积小,安装简单可靠,其原理图如图3.5所示:
第三章 系统无线局域网及传感器模块 23
图 3.5 SCA610原理图
如图3.5所示,加速度传感器外围电路简单,仅需连接一个电容即可,由5V供电,有一个输出引脚。 3.3.4 避障传感器模块
在本系统中,机器人反应式避障采用红外光电传感器(E18-8MNK),红外线对射式光电开关(光电传感器)属于光电接近开关的一种,其物体不限于金属,是一种集发射与接收于一体的光电传感器。检测距离可以根据要求进行调节。该传感器具有探测距离远、受可见光干扰小、价格便宜、易于装配、使用方便等特点。E18-8MNK的技术参数为:
1) 输出电流 DC/SCR/继电器 Control output:100mA/5V供电; 2) 消耗电流 DC<25mA; 3) 响应时间 <2ms;
4) 指向角:≤15°,有效距离3-80CM可调; 5) 检测物体:透明或不透明体。 3.3.5 测速传感器模块
机器人测速传感器通常采用旋转编码器,即码盘[47]。一般码盘安装在电机输出轴,可以测出旋转轴的速度,其中最常用的码盘为光电式旋转编码器。在本系统中根据码盘原理,利用霍尔传感器进行测速,霍尔传感器型号为44E。
霍尔传感器进行测速所应用的原理是霍尔效应:把通有电流的金属或半导体薄片垂直放在磁场中,就会有电位差在金属或薄片的两端产生,这种现象就称为霍尔效应。两端具有的电位差值称为霍尔电势U,其表达式为 U=K×I×B/d 其中K为霍尔系数,I为薄片中通过的电流,B为外加磁场(洛伦慈力Lorrentz)的磁感应强度,d是薄片的厚度。磁场由磁钢提供,所以霍尔传感器需要与磁钢配对使用,其连接示意图和测速原理图如图3.6所示:
24 基于嵌入式Linux系统的移动机器人无线控制技术
图 3.6 霍尔传感器连接示意图和测速原理图
由图可知,霍尔传感器由5V供电,接线简单,分别在机器人左右移动轮上安装三个均匀相间120°的磁钢,每当旋转一圈,霍尔传感器便输出三个脉冲。
在机器人的测速方法中比较常用的有M法、T法和M/T法。 1. M法测速原理
M法通过测量特定时间段内的传感器的脉冲的个数来获取被测速度信息。假设在时间T内检测到传感器M个脉冲个数,如图3.7所示:
TtM………编码器脉冲
图 3.7 M法测速
则速度计算公式为:
n=60M (3-2) ZT式中,Z为旋转一周传感器输出的脉冲个数,速度n的单位为r/min。M法测速的分辨率和误差率分别为公式(3-3)和(3-4):
60 (3-3) Q=ZTδmax=由测速误差率可知M法适用于高速测量。
2. T法测速原理
1×100% (3-4) MT法测速同过测量传感器输出的两个相邻脉冲间的时间值来计算得出速度信息,如图3.8所示:
第三章 系统无线局域网及传感器模块 25
M高频脉冲,f编码器脉冲
图 3.8 T法测速
如图3.8所示:计数器在传感器输出脉冲的上升沿开始计数工作,它对频率为f的高频脉冲进行计数,在传感器输出脉冲的下一个上升沿处停止计数。假设此时间段内的计数值为M,则速度计算公式如下(3-5)所示:
60f (3-5) n=ZM式中,Z为旋转一周传感器输出的脉冲个数,速度n的单位为r/min。T法测速的分辨率和误差率分别为公式(3-6)和(3-7)所示:
60f (3-6) Q=ZM(M−1)=δmax1×100% (3-7) M−1由(3-7)式可知,传感器两个相邻脉冲间隔时间越长,计数值M越大,则误差率越小,因此,T法测速适用于低速段。
3. M/T法测速原理
M/T法测速是将上述两种测速方法相结合的测速方法,即在一个特定时间段内同时检测传感器输出脉冲的个数和高频脉冲个数,通过这两个计数值计算得出速度信息,如图3.9所示:
M2高频脉冲,fM1………编码器脉冲
图 3.9 M/T法测速
如图3.11所示,传感器脉冲计数个数为M1,高频脉冲计数为M2,高频脉冲频率为f,则速度计算公式和分辨率分别为公式(3-8)和(3-9)所示:
60M1f (3-8) n=ZM2Q=60fM1 (3-9)
ZM2(M2−1)M/T法在低速时趋向于T法,高速时等同于T法的M1次平均,这样最多有一
26 基于嵌入式Linux系统的移动机器人无线控制技术
个高频脉冲的计数误差。
因为系统中移动机器人的行进速度不快,所以在实际应用时可以选择T法来测量移动机器人的速度。
3.4机器人传感器信息获取
3.4.1 机器人视觉信息获取
在本系统中机器人视觉为单个CMOS摄像头(OV9655),下面介绍S3C2440 Camera接口(CAMIF)控制器和基于V4L2的摄像头驱动开发。
1. S3C2440 Camera 控制器
该接口支持ITU-R BT601/656格式的数字图像输入,格式为8位YCbCr数据。视频输入后分两个通道逐帧保存图像数据,一个为预览通道(P通道),另一个为编解码通道(C通道),两个通道均通过DMA方式将一帧图像保存到系统内存SDRAM中,在系统内存中开辟了4组帧图像缓冲从而保证了用户应用程序在读取帧图像数据时不影响另一帧图像数据输入。Camera接口示意图如图3.10所示:
T_patternMuxITU-R BT601/656CamifSFRCatchCamYCbCr 4:2:2Preview Scaler&RGB FormatterYCbCr 4:2:xCodec ScalerPreview DMAAHB busCodec DMA
图 3.10 S3C2440 Camera 接口示意图
S3C2440 Camera控制器支持乒乓存储。为了防止采集和输出之间的冲突,采用乒乓存储方式。每次采集一帧后,自动转到下一个存储区。在本系统中,图像数据需要通过无线网络传输到PC终端并实时显示,不需要在嵌入式平台下做编码处理,所以选择为Preview通道的0×480模式。OV9655与Camera接口连接原理图如图3.11所示。
第三章 系统无线局域网及传感器模块 27
图 3.11 OV9655与Camera接口连接原理图
2. 基于V4L2的摄像头驱动开发
V4L2(video4linux2)是Linux 内核中关于视频设备的内核驱动,它为Linux视频设备的访问提供了通用接口,在Linux系统中,V4L2驱动的Video设备节点路径通常为/dev/video/中的videoX,V4L2驱动对用户空间提供为字符设备,主设备号为81,对于视频设备,它的次设备号为0-63。此外,次设备号是-127的为Radio 设备,次设备号是192-223的为Teletext 设备,次设备号是224-255的为VBI 设备。V4L2驱动中的Video 设备在用户空间里通过调用各种ioctl进行控制,并且可以使用mmap 进行内存映射。V4L2采用流水线的方式,操作简单直观,基本上遵循打开视频设备、设置格式、处理数据、关闭设备,更多的具体操作通过ioctl函数来实现。
在本系统中基于V4L2的OV9655摄像头驱动框架如图3.12所示:
应用程序APIVideo核心层/dev/video0………S3C2440 Camera(OV9655)驱动(其它Video驱动)OV9655 图 3.12 OV9655摄像头驱动框架
由图3.12可知:Video核心层即为V4L2,OV9655为视频设备,我们需要为OV9655开发一个能与V4L2接口相匹配的驱动。在此驱动中通过设置S3C2440 Camera控制器的一些寄存器来完成与OV9655摄像头的匹配,如视频输入格式等。用户应用程序通过read函数读取内核空间里摄像头采集的视频图像。在本系统开发中,OV9655摄像头驱动以模块方式加载到内核,即在主机通过交叉编译
28 基于嵌入式Linux系统的移动机器人无线控制技术
OV9655.c(驱动源代码)文件生成OV9655.ko文件,然后复制到ARM开发板,用insmod命令加载module到内核。通过OV9655摄像头采集的视频图像(0×480)如图3.13所示:
图 3.13 OV9655摄像头拍摄视频图像
3.4.2 机器人加速度传感器信息获取
在本系统中机器人航向信息和机器人姿态倾斜信息是通过SCA610系列加速度传感器获取。一块用来测量机器人的前进方向角度,一块用来测量机器人姿态倾斜角度,其安装测量示意图如图3.14所示:
+90°+90°SCA610(姿态测量)SCA610(航向测量)
图 3.14 加速度传感器安装测量示意图
如图3.14所示,测量机器人姿态信息的传感器安装于六驱车体正上方,可以实时测量车体相对于水平面倾斜的角度;测量航向信息的传感器安装于六驱车体的正前方,可以实时测量六驱车前进方向。传感器箭头指向为其角度测量方向。
传感器输出信号为模拟电压信号,经S3C2440 10位ADC测量转换为数字信号并进行角度转换,得出相应角度值,角度转换公式如下:
(V−measureVValue=
zero
)V
(3-10) ref
=Angleasin(Value)×180/π (3-11)
第三章 系统无线局域网及传感器模块 29
公式(3-10)中,Value为角度正弦值,Vmeasure为传感器电压输出值,即测量值,Vzero为传感器零点电压值,Vref为偏离零点电压值的最大差值。得出角度正弦值后通过公式(3-11)求反正弦得出角度值。
S3C2440 10位CMOS 的ADC(模数转换器)转换模拟输入信号到10位的数字编码,最大的转换率可达到500KSPS,供电电压为3.3V,输入模拟电压范围为0~3.3V。在本系统中因为有两块SCA610,所以至少需要两路AD采集电路,为此,编写了四路(AIN0-AIN3)ADC驱动程序,通过应用程序的输入参数来确定采集哪一路的电压信号。读取ADC转换后的数据有查询和中断两种方式,在本驱动中采用的是中断方式,即ADC转换结束后产生AD中断,在中断服务程序里读取数据。
在本驱动中将ADC设备看为一杂项设备(misc device),所有杂项设备采用主设备号为10,在驱动程序里采用misc_register函数注册,该函数会自动创建设备节点,即设备文件。驱动程序里的流程框架如图3.15所示:
init:内存映射加载驱动获取使能ADC时钟申请ADC中断服务注册为杂项设备read:选择通道、启动转换使等待队列进入睡眠等待AD转换完成复制到内核空间open:打开设备ioctl:接收应用程序参数(通道、预分频系数)adc done:读取AD转换结果唤醒进程exit:注销设备注销驱动
图 3.15 ADC驱动流程框架示意图
本系统开发过程中,将ADC驱动以模块形式加载到内核,即在主机环境下使用交叉编译工具(arm-linux-gcc)交叉编译生成2440-adc.ko文件,然后使用用insmod命令加载驱动。编写对应的测试应用程序进行,测量结果如图3.16所示:
图 3.16 ADC测试结果
30 基于嵌入式Linux系统的移动机器人无线控制技术
在ADC实际测试中,测量加速度传感器的电压输出并实时在超级终端显示出来,如图3.16所示。测量电压值可以精确到0.01V,在测量过程中,稍微摆动加速度传感器,可以看到电压值随着摆动进行相应的变化。 3.4.3 超声波测距传感器信息获取
在本系统利用超声波测距传感器来感知环境中物体的深度信息,即物体的距离信息。传感器模块采用上文所述的KS103超声波传感器模块,它通过I2C或者UART与主机进行通信。KS103超声波模块与嵌入式平台主机的I2C模式连接原理图如图3.17所示:
图 3.17 超声波模块与主机连接原理图
如图3.17所示,在I2C模式下,超声波模块的MODE引脚悬空(接地时工作在UART模式上),SDA是I2C通信的数据线,SCL是I2C通信的时钟线。SDA与SCL线需要通过主机连接一个4.7K电阻到VCC(+5V)。因为系统有多个超声波模块,所以要自己定义其地址,修改I2C地址的时序如图3.18所示:
地址20x9a延时1ms地址20x92延时地1ms址20x9e延时地1ms址2新延时地址100ms
图 3.18 I2C修改地址时序
其中,超声波模块的默认地址为0xe8,可以修改为20个地址中的任何一个;修改地址时序中的延时1ms是最低延时时间。通过给超声波模块发送探测指令来获得距离信息,探测指令数据帧格式为:I2C地址+2(寄存器2)+探测指令。其中,根据探测距离的不同发送对应的探测指令。主机发送完探测指令后通过延时或查询SCL线是否为高来接收16位的I2C距离数据。
超声波模块与嵌入式平台主机是通过I2C接口进行数据通信,嵌入式平台的S3C2440有标准I2C接口。在嵌入式Linux系统下,I2C设备可以看为一个字符设备,通过i2c-dev.c进行文件管理,包括对I2C总线字符设备的打开、关闭、读写和ioctl等。I2C总线驱动程序框架如图3.19所示:
第三章 系统无线局域网及传感器模块 31
用户应用程序IIC主控设备驱动程序节点i2c-dev.cIIC核心驱动程序节点i2c-core.cIIC适配器i2c_adapterIIC传输算法i2c_algorithmIIC从设备驱动程序节点驱动管理i2c_driverIIC从设备驱动i2c_clientIIC控制器IIC从设备IIC总线
图 3.19 I2C总线驱动程序框架示意图
如图3.19所示,I2C驱动程序中的I2C设备包含四个主要结构:i2c_adapter,I2C总线适配器,它与嵌入式平台处理器总线上扩展出来的I2C控制器硬件相对应;i2c_algorithm,I2C总线通信传输算法,它通过管理I2C控制器来实现I2C总线上数据的发送、接收等操作;i2c_client挂载在I2C总线上的设备驱动程序;i2c_drive,它对应的是I2C的设备节点,实现管理I2C的设备驱动程序功能。
本系统的嵌入式平台支持I2C驱动,对应的设备节点为/dev目录下的i2c-0,即/dev/i2c-0。编写对应的用户应用程序获取传感器信息,应用程序在嵌入式平台服务器主程序中为一个子线程,获取一次距离数据的流程示意图如图3.20所示:
开始I2C应用程序环境搭建探测指令数据帧发送查询SCL线是否为高接收16位I2C数据关闭设备退出线程 图 3.20 获取超声波数据流程示意图
图中,I2C应用程序环境搭建包括打开I2C设备、获取设备句柄;设置I2C从设备地址,即超声波模块地址;I2C 读写操作函数定义等。探测指令数据帧格式为:I2C地址+2(寄存器2)+探测指令。主机通过查询SCL线是否为高来获取I2C
32 基于嵌入式Linux系统的移动机器人无线控制技术
数据。获得距离数据后关闭设备,退出线程。根据不同探测指令获取的探测结果与实际距离数据如表3.2所示:
表 3.2 超声波探测距离数据
探测命令 0x01 0x02 0x03 0x08 0x09 0x20 返回数据(mm) 54 145 210 783 810 31 实测数据(mm) 50 142 212 782 807 3165 备注 探测量程约为100mm 探测量程约为200mm 探测量程约为300mm 探测量程约为800mm 探测量程约为900mm 探测量程约约3200mm 3.4.4 红外光电与霍尔速度信息获取
1. 红外光电传感器
在本系统利用红外光电传感器实现机器人反应式避障,采用的是红外线对射式光电开关,它是一种非接触无损伤的电子开关。光电传感器主要由发送器、接收器和检测电路三部分组成,它可以把光强度的变化转换成电信号的变化,从而实现控制功能,其工作示意图如图3.21所示:
发送器障碍物接收器检测电路信号
图 3.21 红外光电示工作意图
由图3.21所示,发送器对准目标发射光束,光束不间断地发射,或者改变脉冲宽度。接收器有光电二极管、光电三极管、光电池组成。在接收器的前面,装有光学元件如透镜和光圈等。在其后面是检测电路,它能滤出有效信号和应用该信号。在本系统有6个型号是E18的光电开关,其性能参数在第二章中已介绍。它们在六驱车体上的安装示意图如图3.22所示:
避障警戒区4312图 3.22 光电开关安装示意图
65 第三章 系统无线局域网及传感器模块 33
由图所示,通过在六驱车体的前后左右四个方向分别安装光电传感器,可以在车体周围实现一个避障警戒区,在这个区域内,六驱车可以探测到障碍物并进行局部规划,实现反应式避障。
2. 霍尔信号传感器
在本系统中利用霍尔信号传感器获取机器人速度信息,采用的霍尔传感器为44E霍尔元件。采用的测速方法为上文所述的M/T法。因此,红外光电和霍尔两种传感器均需要采集脉冲信号,在本系统开发中采用外部中断获取脉冲信号。
在本系统中,获得上述两种传感器的脉冲信号是通过S3C2440外部中断来实现,需要编写相应的中断驱动程序。S3C2440A 中的中断控制器可以从60 个中断源接收中断请求,外部中断EINTn对于中断控制器来说是或逻辑。在linux内核中,用于申请中断的函数是request_irq(),函数原型在keenel/irq/manage.c中定义[48]: int request_irq(unsigned int irq,void(*handler)(int irq,void *dev_id,struct pt_regs *regs), unsigned long irqflags,const char *devname,void *dev_id);
irq是要申请的硬件中断号;handler是向系统登记的中断处理函数,是一个回调函数,中断发生时,系统调用这个函数,dev_id参数将被传递;irqflags是中断处理的属性,若设置SA_INTERRUPT,表明中断处理程序是快速处理程序,快速处理程序被调用时屏蔽所有中断,而慢速处理程序不屏蔽;若设置SA_SHIRQ,则多个设备共享中断;dev_id在中断共享时会用到,一般设置为这个设备的device结构本身或者NULL;request_irq( )返回0表示成功,返回-INVAL表示中断号无效或处理函数指针为NULL,返回-EBUSY表示中断已经被占用且不能共享。
在本系统中,有6个光电开关和两个霍尔传感器,通过中断随机检测传感器信号,节省CPU资源,在中断服务程序里完成相关控制行为。中断驱动程序流程框架如图3.23所示:
加载驱动interrupt.koinit:注册为杂项设备open:申请注册终端request_irq设置中断属性等irq_interrupt:中断服务程序根据不同传感器中断进行不同的控制行为唤醒进程poll:检测进程队列是否有数据可读read:使等待队列进入睡眠读取中断服务程序数据复制到内核空间exit:注销驱动注销设备
图 3.23 外部中断驱动流程框架图
和上述ADC驱动一样,外部中断驱动也看做为杂项设备驱动,以模块形式编译进内核,即在主机环境下使用交叉编译工具(arm-linux-gcc)编译为interrupt.ko文件,使用insmod命令加载到内核,以模块形式加载驱动调试方便,便于二次开
34 基于嵌入式Linux系统的移动机器人无线控制技术
发,编写测试程序进行驱动测试,在超级终端下的测试结果如图3.24所示:
图 3.24 外部中断驱动程序测试结果图
在测试程序中,中断对上升沿和下降沿都有效,进入中断后变量a自加1,当变量a自加等于3后变量b自加1。外部传感器为霍尔传感器,即每三个脉冲记为半圈。
3.5本章小结
本章主要介绍了移动机器人底层几个传感器模块的工作原理和在嵌入式Linux下获得各传感器信息的实现。主要的传感器模块有CMOS摄像头视觉模块、超声波测距模块、加速度传感器模块、红外光电传感器模块和霍尔信号传感器模块。为移动机器人感知环境信息搭建了软、硬平台,为移动机器人的行为规划、控制算法的设计等打下了基础。
第四章 移动机器人无线控制 35
第四章 移动机器人无线控制
上一章主要实现了移动机器人底层传感器模块的信息获取。一方面,传感器信息获取后需要传输至PC终端,另一方面,PC终端需要发送控制命令给底层移动机器人,即系统需要信息交互。由第二章内容可知,系统由PC终端、嵌入式平台、电机驱动/控制器和机械手控制器等构成。实现了系统模块间的通信,即数据相互传输,并给出实际测试结果;实现了无线远程控制六自由度机械手;对机器人基于BP-PID控制器算法的轨迹跟踪进行了研究。
4.1系统控制器模块间的通信
由第二章中图2.1系统整体框图可知:系统以嵌入式平台为中心,向上与PC终端通信,向下与电机驱动/控制器(Atmega168单片机)和机械手控制器(C8051f040单片机)进行通信。其通过无线网络与PC终端进行通信,即通过Socket编程实现客户端(PC终端)与服务器程序(嵌入式平台)的无线通信;通过嵌入式平台的UART1与电机驱动/控制器进行通信;通过嵌入式平台的SPI与机械手控制器进行通信。
4.1.1 PC终端与嵌入式平台的通信
在文中3.1小节内容中已介绍了系统无线局域网环境的搭建过程,包括硬件和嵌入式平台的USB无线网卡的驱动移植等。在无线局域网覆盖范围内,系统中嵌入式平台与PC终端是通过基于TCP/IP协议的Socket网络编程进行通信,在PC终端MFC环境下编写客户端程序,在嵌入式平台Linux系统下编写服务器程序。从而实现二者之间传感器数据与控制命令的相互传输。Socket是TCP/IP网络的API借口,其定义了许多函数和例程,通过Socket我们可以进行TCP/IP网络的应用程序开发。
TCP/IP协议由Kahn在1974年提出,由高到低可分为四个层次,分别为:应用层、传输层、网络层和网络接口层。在传输层有三个主要协议:传输控制协议(TCP)、用户数据包协议(UDP)和互联网控制消息协议(ICMP)。在本系统中,因为要与移动机器人底层建立可靠信息连接,以便保证发送的控制命令具有可靠性和正确性。因此,选择面向连接的可靠的双向通信数据流的传输控制协议(TCP)。
嵌入式平台下的Linux系统通过提供套接字(Socket)进行服务器程序的开发。其中套接口就是网络进程的ID,因为网络通信本质上就是进程间通信。网络中的每一个节点都有一个网络地址,即IP地址,通过IP地址可以确定网络进程所在的
36 基于嵌入式Linux系统的移动机器人无线控制技术
计算机。确定计算机中的哪一个进程还需要端口号这个信息,即通过网络地址和端口号这两个信息能够唯一确定整个网络中的某一个进程。把网络应用程序中的网络地址和端口号信息放在一个结构体中,就是套接口地址结构。套接口根据协议不同主要有TCP套接口(流式套接口)和UDP套接口(数据包套接口)两大类。本系统开发中选择为TCP套接口。
Socket网络程序开发中要用到一些API接口函数,表4.1所述为一些基本接口函数的简单说明:
表 4.1 Socket基本函数说明
函数名称 socket() 函数说明 生成套接口描述字,即套接返回值 成功:非负描述字 字,指定协议族和套接口。 失败:负值 对socket进行定位 成功:0 失败:-1 监听,等待连接 成功:0 失败:-1 接受socket的连线 成功:新的socket处理代码 失败:-1 建立socket连线 成功 :0 失败:-1 数据发送 数据接收 实际发送的字节数 实际接收的字节数 bind() listen() accept() connect() send() recv() 服务器模型主要有循环服务器和并发服务器两种,前者在同一时刻只能响应一个客户端的请求,而后者能够在同一时刻响应多个客户端的请求。因此,在本系统开发中,采用的是并发TCP服务器。并发服务器的思想是每一个客户机的请求并不是由服务器直接来处理,而是由服务器创建一个进程/线程来处理。并发TCP服务器的步骤如下:
1. 主进程:创建一个TCP套接口,并将其绑定到提供服务的已知的端口上; 2. 主进程:将该套接口设置为被动模式,作为服务器使用;
3. 主进程:重复调用accept接受来自客户的下一个请求,并创建一个新的从
线程来处理响应;
4. 从线程:由于接受一个连接请求而被创建;
5. 从线程:用该连接于客户进行交互,读取请求并进行响应; 6. 从线程:关闭连接并退出。
TCP协议建立连接时使用“三段握手TWH”方式,其过程示意图如图4.1所
第四章 移动机器人无线控制 37
示:
客户端Connect()服务器listen() 入“未完成连接”队列Connect()返回入“完成连接”队列 图 4.1 TCP三段握手过程示意图
如图4.1所示,客户端先通过connect()向服务器发出一个连接请求信号SYN1;服务器进程接收到这个信号后,发回应答信号ack1,同时这也是一个要求回答的信号SYN2;客户端收到信号ack1和SYN2后再次应答ack2;服务器收到应答信号ack2,一次连接正式完成。在本系统开发中,基于TCP协议的客户机/服务器进程的工作过程示意图如图4.2所示:
客户端进程socket()服务器进程connect()bind()listen()accept()挂起,等待客户连接connect()send()三段握手过程recv()处理服务器请求recv()close()应答信号结束连接通知send()recv()服务请求
图 4.2 基于TCP协议的客户机/服务器进程图
在PC终端的MFC环境和Linux系统下分别编写了客户机和服务器测试程序,来测试嵌入式平台和PC终端的通信。测试结果如图4.3所示:
38 基于嵌入式Linux系统的移动机器人无线控制技术
服务器响应界面(嵌入式平台,超级终端显示)客户机界面(PC终端,MFC)
图 4.3 客户机/服务器测试结果
由图4.3所示,服务器首先运行(服务器IP为:192.168.0.100),等待客户端连接,二者通过“三段握手”连接成功后,客户端向服务器发送“dd”字符串,服务器接收到后显示并发回给客户机,进入相应的响应程序。 4.1.2 嵌入式平台与电机驱动/控制器的通信
嵌入式平台在接收到PC终端的控制命令或数据后,需要跟电机/驱动控制器(Atmega168单片机)进行交互。在本系统中采用串口通信进行两者的信息交互。
S3C2440(ARM9)通用异步接收器和发送器(UART)提供三个的异步串行I/O(SIO)端口,每个端口有中断和DMA两种工作模式。每个UART通道对于接收器和发送器包括2个位的FIFO。在本系统开发中采用8位有效数据的异步串口数据帧格式,其示意图如图4.4所示:
数据位时钟123456710停止位 图 4.4 8位有效数据的异步串口数据帧
起发送端始信号位有效数据帧,低字节在前由图4.4可知,数据帧格式为1位起始位、1位停止位、8位有效数据和无奇偶校验(N)(简写成8N1)的异步串口数据帧格式。
在Linux系统下,串口属于典型的tty设备,tty通常用来简称各种类型的终端设备。tty驱动的核心位于标准字符驱动级别之下,它主要负责跨越一个tty设备的数据流和数据格式。tty驱动用一种统一的方式集中处理到硬件和出自硬件的数据,而不用担心怎样控制用户空间的接口。Linux系统下串口驱动层次结构图如图4.5所示:
第四章 移动机器人无线控制 39
用户空间(read, write, ioctl…)tty_coreLine disciplinetty_register_devicetty_set_operationstty_flip_buffer_push线路规程serial_coreuart_register_deviceuart_add_one_porttty_flip_buffer_pushvc088x_uart驱动hard ware
图 4.5 串口驱动层次结构图
由图4.5可知,tty核心从用户空间得到要发送给tty设备(串口)的数据后,向下传递给tty线路规程驱动,继续传递给tty设备驱动(串口驱动),这个驱动转换数据,使其成为可以发送给硬件的格式。从tty硬件(串口)接收到数据后向上经过tty驱动(串口驱动),进入tty线路规程驱动,再进入tty核心,最后被用户空间获取。其中tty线路规程的工作是用特殊的方式格式化从用户或硬件收到的数据,这种格式化通常采用协议转换的形式。
本系统的嵌入式平台(ARM92440)有三个串口,其设备节点在/dev目录下分别为:s3c2440_serial0、s3c2440_serial1和s3c2440_serial2。其中UART0为串口终端模式,即将其作为Linux kernel的终端输出(通过PC上的超级终端显示)。UART1用来和电机驱动控制器通信,UART2为将来系统扩展备用。在Linux下操作串口与操作文件相同,图4.6为系统串口应用程序流程图:
开始打开串口设备设置串口状态为阻塞状态配置串口波特率、数据位、校验位等串口数据读写(read、write)激活配置关闭串口 图 4.6 串口应用程序流程图
40 基于嵌入式Linux系统的移动机器人无线控制技术
在本系统开发中,采用UART1与电机驱动控制器进行信息交互。与上一节内容(PC终端与嵌入式平台的无线通信)结合一起进行测试,即在PC终端发送控制命令给嵌入式平台,嵌入式平台收到命令后通过UART1发送控制命令给电机驱动控制器,电机驱动/控制器响应命令并返回响应信号。测试结果如图4.7和4.8所示:
图 4.7 PC终端控制菜单界面
图 4.8 超级终端显示嵌入式平台接收和发送响应界面
测试过程为:在PC终端编写客户机程序,为一个发送命令的控制菜单,如图4.7所示。它可以连接服务器,即嵌入式平台,并与之交互信息。在嵌入式平台编写服务器程序,它响应客户机的连接,并根据接收到的命令进行相应的操作。在本测试中,它接收命令后通过串口发送给电机驱动/控制器,并接收电机驱动/控制器返回的数据,其响应过程如图4.8所示。在实际测试时,实现了远程控制机器人的基本动作,包括前进、后退、停止、左转和右转等。
第四章 移动机器人无线控制 41
4.1.3 嵌入式平台与机械手控制器的通信
嵌入式平台与机械手控制器(C8051F040单片机)通过SPI(Serial Peripheral Interface)进行信息交互。SPI即为串行外围设备接口,是一种高速、全双工、同步的通信总线。在主器件的移位脉冲下,SPI全双工通信数据速率可达几Mbps[49]。SPI接口以主从方式工作:一个主器件和一个或多个从器件,有四种信号,其说明如表4.2所示:
表 4.2 SPI四种信号说明
信号 MOSI MISO SCK NSS 名称 主输出,从输入 主输入,从输出 串行时钟 从选择 说明 主器件数据输出,从器件数据输入 主器件数据输入,从器件数据输出 同步主器件和从器件之间的串行数据传输,由主器件产生 决定哪个从器件有效,低电平有效 S3C2440有两个SPI接口,每个接口分别有两个8位的数据移位器用于接收和发送。在SPI发送期间,数据同时发送(串行移出)和接收(串行移入)。C8051F040有一个SPI接口,可以工作在主器件或从器件模式下,支持在同一个总线上连接多个主器件和从器件。在本系统开发中,S3C2440作为主器件,C8051F040作为从器件,其硬件连接图如图4.9所示:
ARM9 2440MOSI0 主器件MISO0SCKGPG13EINT3C8051F040MOSI 0MISO0SCKNSS0P3.0从器件V3.3NSS0 图 4.9 SPI接口连接示意图
如图4.9所示,S3C2440为主器件,C8051F040为从器件,因此串行时钟由S3C2440产生提供。从器件的NSS0连接到主器件的I/O(GPG13)上,这样主器件可以通过控制I/O来选择从器件的有效性。从器件的I/O(P3.0)连接到主器件的外部中断(EINT3)上,通过产生中断来通知主器件接收数据。
本系统开发中,因为嵌入式平台内核支持SPI驱动,在编译内核时将其编译进内核,使其支持SPI驱动即可。在/dev目录下,生成的设备节点文件为spidev0.0。在Linux系统下编写SPI主机测试程序(spidev_test.c)并交叉编译生成可执行文件(spidev_test),编写单片机SPI从机程序,进行在线测试,测试结果如图4.10所示:
42 基于嵌入式Linux系统的移动机器人无线控制技术
嵌入式平台超级终端发送接收数据显示界面单片机端在线调试数据观察窗口显示
图 4.10 嵌入式平台与机械手控制器SPI通信测试图
如图4.10所示,在嵌入式平台下的SPI主机程序发送0x30至0x39十个数据给C8051F040单片机,单片机接收数据并返回10个数据(FF-AA),如图4.10中超级终端界面所显示。在单片机端是在线调试,即在SPI从机中断服务程序里设置断点,断点处为接收完10个数据处。如图所示,在数组变量观察窗口观察接收数据,其与嵌入式平台发送完全一致。验证了SPI通信的可靠性与正确性。
4.2机械手的无线远程控制
移动机器人平台上有一个六自由度机械手,其相关性能参数在第二章中已有介绍。在本节内容中主要研究其结构参数、位姿分析和舵机的控制原理等。机械手能够在PC终端下进行无线远程控制,实现一些简单机械操作,功能完成情况可由摄像头拍摄的图像反馈给PC终端。 4.2.1 机械手硬件结构
本系统中的六自由度机械手采用模块化设计,分为几个部分,共有六个舵机驱动。其模块化结构示意图如图4.11所示:
六自由度机械手底座手臂(臂、肘)手腕手部一号舵机二号舵机三号舵机四号舵机五号舵机六号舵机 图 4.11 机械手模块示意图
由图可以看出机械手主要分为四个模块:底座、手臂、手腕和手部。底座、
第四章 移动机器人无线控制 43
手腕和手部各有一个舵机驱动,手臂(臂、肘)部分由三个舵机驱动。其结构尺寸参数示意图和实物结构标注示意图如图4.12和4.13所示:
(6)(5)(4)(7)(2)(8)(3)(1)
图 4.12 机械手尺寸参数示意图 图 4.13机械手实物结构标注图
图4.13为机械手的实物结构标注图,结合其模块结构示意图进行如下说明:(1)为一号舵机,即底盘舵机,它可以驱动整个底盘也即整个机械手左右旋转180°;(2)至(4)分别为二至四号舵机,即机械手的臂肘部分,每个舵机都可以在0°-180°的范围内旋转;(5)为手腕部驱动舵机,功能接近于人的手腕,能够实现0°-180°范围内的旋转;(6)为手部驱动舵机,即驱动模拟手指夹取物体等,其可以控制两个模拟手指间的距离为0-5.4cm;(7)为机械手末端模拟的两个手指,在手部舵机的驱动下完成一定的夹取操作;(8)为底盘,带轴承,起到稳定整个机械手重心,对机械手配重的作用。 4.2.2 机械手的位姿分析
六自由度机械手的位姿,即机械手在空间中的姿态。因为文中研究的机械手由六个舵机和金属关节构成,所以机械手在空间的姿态与机械手关节坐标,也就是舵机坐标是对应的。要完全确定机械手的位姿,就需要确定全部六个舵机的坐标。决定六个舵机空间坐标的参数为金属关节之间的长度和舵机的旋转角度。其中,金属关节之间的长度为固定值常量,其具体值可以在上图4.12中机械手尺寸参数示意图中得出。舵机的旋转角度是变量,也是控制量。因此,机械手的位姿分析即是通过下面的分析,找出机械手空间位姿,即六个舵机空间坐标与其旋转角度之间的关系。以底盘中心和二号舵机的轴心为原点,底盘平面为零平面建立空间位姿分析图如图4.14所示:
44 基于嵌入式Linux系统的移动机器人无线控制技术
zal1a`θO1θ0xy
图 4.14 机械手位姿分析图
图4.14中:O为底盘平面的中心和二号舵机的轴心,也即坐标原点。l1为机械手金属关节的第一部分的长度,即二号舵机至三号舵机a之间的长度。a'为三号舵机在底盘平面上的投影点。θ1为l1与底盘平面投影之间两者的夹角,θ0为l1在底盘平面的投影与坐标x 轴正向之间的夹角。坐标分析如下:
因为坐标原点即为二号舵机的轴心,所以二号舵机的坐标为(0,0,0),由图4.12和4.13可知,一号舵机在二号舵机的正下方,设二者之间的距离为l0,则一号舵机的坐标为(0,0,−l0)。
由图4.16可知:二号舵机至三号舵机之间的长度为l1,其在底盘平面上的投影长度为l1×cosθ1,由此我们可以得出三号舵机在空间坐标系中x轴方向的长度为l1×cosθ1×cosθ0,在y轴方向的长度为l1×cosθ1×sinθ0,在z轴方向的长度为l1×sinθ1,即三号舵机的坐标为:
(l1×cosθ1×cosθ0,l1×cosθ1×sinθ0,l1×sinθ1) (4-1)
上面分析了一号舵机到三号舵机的位姿,即它们各自的坐标,图4.15为机械手多关节位姿分析图,即剩余四号舵机至六号舵机的位姿分析。
zdmml34c2lb2ϕ323ϕθ4ϕOϕ1m13aa`θl2θl11b`c`d`
图 4.15 机械手多关节位姿分析图
第四章 移动机器人无线控制 45
图4.15中,O为坐标原点, a、b、c和d分别为三号舵机、四号舵机、五号舵机和六号舵机,a'、b'、c'和d'是它们在底盘平面上的投影点。l1为二号舵机到三号舵机的长度,l2为三号舵机到四号舵机之间的长度,l3为四号舵机到五号舵机之间的长度,l4为五号舵机到六号舵机之间的长度,即机械手臂相邻关节的金属支架的长度。m1、m2和m3分别为四号舵机、五号舵机和六号舵机到二号舵机之间的直线距离。θ1−θ3和ϕ1−ϕ4的定义如图4.15所示。
由图4.15可知,四号电机与坐标原点间的直线距离m1为:
=m1其与l1的夹角ϕ1为:
(l1+l2×cosθ2)+(l2×sinθ2)ϕ1=arctan22 (4-2)
l2×sinθ2 (4-3)
l1+l2×cosθ2由上述公式可得四号电机b点坐标为:
(m×cos(θ1+ϕ1)×cosθ0,m1×cos(θ1+ϕ1)×sinθ0,m1×sin(θ1+ϕ1)) (4-4)
在三角形Oab中,根据内角和为180°的定理可得:
ϕ1+ϕ2+180−θ2=180 (4-5) 可得:
ϕ=θ2−ϕ1 (4-6) 2由图4.15可得:
ϕ3=arctanm=2l3×sin(θ3+ϕ2) (4-7)
m1+l3×cos(θ3+ϕ2)22(m+l13×cos(θ3+ϕ2))+(l3×sin(θ3+ϕ2)) (4-8)
因此,由上述公式可得五号电机c点坐标为:
(m2×cos(θ1+ϕ1+ϕ3)×cosθ0,m2×cos(θ1+ϕ1+ϕ3)×sinθ0,m2×sin(θ1+ϕ1+ϕ3))(4-9)
同理,由图4.15可得:
ϕ4=arctanm3=l3+l4×sin(θ3+ϕ2) (4-10)
l2+(l3+l4)×cos(θ3+ϕ2)22(l+(l23+l4)×cos(θ3+ϕ2))+((l3+l4)×sin(θ3+ϕ2))(4-11)
因此,六号电机d点坐标为:
(m3×cos(θ1+ϕ1+ϕ4)×cosθ0,m3×cos(θ1+ϕ1+ϕ4)×sinθ0,m3×sin(θ1+ϕ1+ϕ4))(4-12)
经过上述分析和计算,得出了六个舵机的空间三维坐标,而且其三维坐标都是跟舵机角度有关的函数,因此,舵机角度和其三维坐标具有关联性,上述公式即是其二者之间的转换关系。经过机械手的位姿分析得出:六自由度机械手的空间位姿可由其六个舵机的旋转角度表示。
46 基于嵌入式Linux系统的移动机器人无线控制技术
4.2.3 舵机的控制原理
经过文中上述内容可知,六自由度机械手是由六个舵机提供各个部分的驱动。而且机械手的空间位姿可由六个舵机的旋转角度表示,因此对舵机的控制,即对舵机旋转角度的控制成为控制机械手的关键部分。舵机,即微型伺服直流电机,它有许多优点,如控制简单、输出力矩大和输出角度精确、工作电压低等,这些优点使其在机器人领域有着非常广泛的应用。在本系统中应用的舵机型号为TR213,它的性能参数如下:
1) 重量,63g;
2) 速度,0.15秒/60度(4.8V);0.12秒/60度(6.0V); 3) 扭矩,13kg/cm; 4) 控制精度,0.5°; 5) 范围,0-180°; 6) 工作电压,4.8V-7.2V;
7) 特点,空心杯电机、金属齿轮结构和双滚珠轴承。
微型伺服直流电机的工作原理比较简单,单个微型伺服直流电机的工作过程就是一个比较典型的闭环反馈系统,其工作原理示意图如图4.16所示:
控制脉冲控制电路直流电机齿轮组比例电路比例电压 图 4.16 微型伺服直流电机工作原理示意图
根据图4.16,对微型伺服直流电机的工作原理说明如下:接收机或单片机发出控制脉冲(控制信号),控制脉冲进入信号调制芯片,获得直流偏置电压。舵机内部有一个基准电路,这个基准电路能够产生周期为20ms,宽度为1.5ms的基准信号。将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片,经由电路板上的IC判断转动方向,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回信号,判断是否已经到达定位[50]。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。
通过调节PWM(脉冲宽度调制)信号的占空比实现控制舵机旋转角度,标准PWM(脉冲宽度调制)信号的周期固定为20ms(50Hz),理论上脉宽分布应在1ms到2ms之间,但是,事实上脉宽可由0.5ms到2.5ms之间,脉宽和舵机的转角0°~180°相对应。
本系统中的机械手控制器为C8051F040单片机,它有一个可编程计数器阵列
第四章 移动机器人无线控制 47
(PCA0),它能够提供增强的定时器功能并且需要较少的CPU干预。PCA0包含一个专用的16位计数器/定时器和6个16位捕捉/比较模块,每个捕捉/比较模块有自己的I/O线(CEXn)。通过数字交叉开关可以配置到指定I/O口。计数器/定时器有一个可编程的时基信号驱动,时基信号有六个输入源:系统时钟/12、系统时钟/4、定时器0溢出、外部时钟输入(ECI)、系统时钟和外部振荡源/8。每个捕捉/比较模块都有六种工作方式:边沿触发捕捉、软件定时器、高速输出、频率输出、8位脉冲宽度调制器和16位脉冲宽度调制器。对PCA的编程和控制是通过系统控制器的特殊功能寄存器来实现。
在本系统中需要周期为20ms,即频率为50Hz的PWM脉冲信号控制舵机,因此需要用PCA模块产生周期为20ms的PWM波。选择PCA捕捉/比较模块工作在高速输出模式下,该模式下,每当PCA的计数器与模块的16位捕捉/比较寄存器(PCA0CPHn和PCA0CPLn)发生匹配时,模块的CEXn引脚上的逻辑电平将发生改变。在程序中,通过使能PCA中断,每当匹配的时候产生中断,在中断服务程序里改变写入捕捉/比较寄存器的值,这样就可以改变PWM的占空比,从而可以控制舵机的旋转角度。PWM实测波形图如图4.17所示:
图 4.17 舵机控制PWM波形图
4.2.4 机械手的无线远程控制
通过上文中机械手位姿分析得出机械手位姿坐标是关于机械手舵机旋转角度的函数,因此,可以通过PC终端的控制界面无线远程控制机械手舵机的旋转角度,从而可以控制机械手的动作。PC终端发送舵机旋转角度给嵌入式平台,嵌入式平台再将其发送给机械手控制器,机械手控制器根据接收到的角度值产生相应的PWM波形,最终控制机械手的动作,实际测试过程如图4.18和4.19所示:
48 基于嵌入式Linux系统的移动机器人无线控制技术
单片机在线调试接收数据窗口PC 终端舵机数据发送界面
图 4.18 PC终端数据发送和机械手控制器数据接收
图 4.19 嵌入式平台服务器的超级终端显示
图 4.18所示为PC终端的机械手六舵机旋转角度发送界面和机械手控制器在线调试时接收到的数据窗口显示截图。实现了无线远程发送数据的功能,即可以无线远程控制机械手的六个舵机的旋转角度。图4.19为嵌入式平台服务器程序在超级终端下的流程显示。如图所示,运行服务器可执行文件(sup),首先打开UART1设备(用于和电机驱动/控制器通信);然后等待客户端的连接,即PC终端的连接;连接成功后,等待PC终端发送的控制命令和数据;在本测试中,发送的是控制机械手的命令和相应的六个舵机旋转角度的数据,因此,控制机械手线程被创建,初始化SPI,发送并显示接收到的数据。发送完毕后等待新的控制命令和数据,其过程如图4.19所示。
4.3轮式移动机器人的数学模型
运动系统根据其局部代数约束函数的可积性分为完整约束系统和非完整约束系统。完整约束系统的运动受到,它只能在位形空间中的某一个光滑流行上
第四章 移动机器人无线控制 49
进行运动。由于不可积性,非完整约束系统的运动位形没有受到,其运动自由度减少,但是描述系统的广义坐标的自由度没有减少。轮式移动机器人系统是一种典型的非完整约束系统,其数学模型一般有动力学模型和运动学模型两种。机器人基于这两种模型的运动控制变量不同,前者为力矩控制,后者为速度控制。
4.3.1 轮式移动机器人的动力学模型
轮式移动机器人的移动机构有好几种形式,如两轮、三轮、四轮和六轮等形式[51],本系统的轮式移动机器人架构为六驱地形车,即为六轮形式。但是不管轮式移动机器人是几轮的架构形式,它的运动学方程都可以写为统一的形式[52]:
=qg1(q)u1+g2(q)u2++gm(q)um (4-13)
式中:q是n维广义坐标变量,ui和gi(q)(1≤i≤m)分别为控制变量和特定的矢量域,后者相对于q可以看作为一个基,构成了矩阵J(q)的零空间,并且矩阵J(q)构成约束:
•J(q)q=0 (4-14)
假设由g1(q)、g2(q)….. gm(q)构成的可控矩阵的秩为n,可得知上述约束为不可积,从而使得运动学方程(4-13)所表达的运动系统为完全非完整约束的系统。 非完整系统的动力学模型可以由Euler-lagrange方程描述:
∂LTdl∂•−=E(q)τ−AT(q)λ (4-15) dt∂q∂q式中:q=[q1,,qn]是n维系统的广义坐标,L为Lagrange函数,定义为系统动
T•E(q)是n×m维输入变换矩阵,λ是Lagrange能与势能之间的差值,τ是m维输入,乘子,A(q)为Pfaffian约束矩阵,乘积AT(q)λ表示约束力的矢量。通过对Euler-lagrange方程的推导,可得出非完整系统动力学方程的一般形式如公式(4-16),关于动力学模型的具体推导过程可参考文献[53]。
•••=E(q)+JT(q)λ (4-16) M(q)q+cq,qq+Fq+G(q)+τd••式中:M(q)是正定、对称、有界的惯性矩阵,C(q,q)是有关位置、速度的离心力矩阵和哥氏力矩阵,F(q)是与速度有关的动静摩擦项,G(q)是与位置有关的
重力项,τd是有界位置扰动,E(q)是输入系数矩阵,J(q)是Jacobian矩阵,λ是约束力。
••50 基于嵌入式Linux系统的移动机器人无线控制技术
4.3.2 轮式移动机器人的运动学模型
本系统的轮式移动机器人可等同于Unicycle类型的轮式移动机器人[54],假设其在水平面上运动,如图4.20所示:
YωyMνθOxX
T图 4.20 Unicycle类轮式移动机器人示意图
如上图所示,在全局坐标系XOY中,机器人位置可由广义坐标P=(x,y,θ)表示,其中,(x,y)是机器人质心点M的坐标,θ为机器人车体运动方向与X轴间的夹角,即车体的方位角。
Unicyle所受的“纯滚动无滑动”运动学约束表示为:
xsinθ−ycosθ=[sinθ••−cosθ0]P=0 (4-17)
•约束矩阵的零空间由列矢量z1和z2构成:
cosθ0=Z(q)[=z1z2]sinθ0 (4-18)
01移动机器人的运动由其线速度υ和角速度ω表示,设qc=(υ,ω)T,则机器人的运动学方程为:
•x••=P=y•θ式中J为雅克比矩阵。
cosθ0υ•sinθ0=JP (4-19) ω014.4基于神经网络PID控制的机器人轨迹跟踪
Unicycle类轮式移动机器人系统为非完整约束的非线性系统,对其进行轨迹跟踪需要进行比较复杂的控制。目前对移动机器人轨迹跟踪控制器的研究已经取得了一定的成就,如基于模糊控制、神经网络控制等智能控制方法的轨迹跟踪控制
第四章 移动机器人无线控制 51
器等。但是,单纯的模糊控制和神经网络控制都有一定的缺点,如模糊控制的模糊规则和论域的选择需要采用试凑法等。本文研究将传统PID与BP神经网络相结合的BP-PID控制器在移动机器人轨迹跟踪中的应用。神经网络可以逼近任意非线性函数的能力,结构和学习算法简单明确,具有容错性和自学习能力,可以在线调整PID参数。通过网络学习可以找到某一最优控制规律下的PID控制参数。 4.4.1 轮式移动机器人的轨迹跟踪
轮式移动机器人的运动控制问题主要包括反馈运动控制和运动规划两大部分。轮式移动机器人由于受到非完整约束,使其成为典型的非完整系统,因为约束具有不可积性,导致轮式移动机器人的镇定问题和轨迹规划比较困难。根据控制目标的不同,轮式移动机器人的反馈控制一般可以分为三类[55]:轨迹跟踪、道路跟随和点镇定。轨迹跟踪问题是指在惯性坐标系中,机器人由给定的初始状态出发,到达并跟随给定的参考轨迹。道路跟随问题是指在惯性坐标系中,机器人由初始状态出发,到达并跟随指定的几何路径。点镇定指的是机器人从一个给定的起始状态到达并且稳定在指定的目标状态,一般情况下,系统的平衡点总是被选择为目标点。
本论文研究的移动机器人虽然为六驱地形车,但是可以简化为Unicycle类型的机器人,简化为由左右两个直流减速电机驱动的模型。假设机器人在运动过程中满足“只转动不滑动”的无滑动条件。两个驱动电机的转速不同会引起驱动轮产生“差动”,实现移动机器人的转弯,从而可以实现控制机器人的位姿。图4.21所示为Unicycle类轮式移动机器人位姿误差坐标示意图:
YθeyrθrxeMyeyOMθxrXx
图 4.21 Unicycle类轮式移动机器人位姿误差坐标示意图
由上节内容可知轮式移动机器人的运动学方程为:
52 基于嵌入式Linux系统的移动机器人无线控制技术
•x••P=y=•θcosθ0υsinθ0 (4-20) ω01T在上图4.25中,轮式移动机器人从位姿P=(x,y,θ)移动到位姿
Pr=(xr,yr,θr),则机器人在新的坐标系Xe−Ye中的坐标为:
Pe=(xe,ye,θe) (4-21)
TT式中:θ=θr−θ。 e假设坐标系X-Y与Xe−Ye的夹角为θ,由坐标变换公式就可以得出轮式移动
机器人位姿的误差方程为:
xecosθsinθ0xr−xPe=ye=−sinθcosθ0yr−y (4-22)
θe00θ−θ1r经过推导得出移动机器人位姿误差微分方程,公式如下:
•xeyeω−υ+υrcosθe•• (4-23)
=−+Pe=yxsinωυθeere•ωr−ωθe由上述内容可知,轮式移动机器人在基于其运动学模型的轨迹跟踪便成为如下问题:寻找求解控制输入q=(υ,ω),在任意初始误差下跟踪位姿
Pr=(xr,yr,θr),使Pe=(xe,ye,θe)有界,并且lim(xe,ye,θe)t→∞TTTT=0。
4.4.2 轮式移动机器人轨迹跟踪控制器控制输入量的转换
由文中上述内容可知:轮式移动机器人基于运动学方程的控制输入量为其线速度υ和角速度ω,即u=(υ,ω)。本文研究的轮式移动机器人为六驱地形车,由六个直流减速电机提供直接驱动,但是在实际控制中,左边三个电机和右边三个电机分别等效为左电机和右电机。相对于本文研究的轮式移动机器人可以直接进行驱动控制的是左右两个电机的驱动,所以,在本文研究的轮式移动机器人轨迹跟踪控制器的控制输入变量为左右电机的线速度,即u=(υL,υR)形式[56]。通过
TT驱动两个电机,实现机器人位姿的变化。下面讨论控制量由u=(υ,ω)转化为
u=(υL,υR),图4.22为控制量转换示意图:
TT第四章 移动机器人无线控制 53
υυL2LMυRrNω
图 4.22 控制量转换示意图
图4.22中M为机器人质心,N为机器人的速度瞬心,L为质心到两轮之间的
即机器人的转动半径。距离,r为机器人质心M与机器人速度瞬心N之间的距离,
υ为移动机器人的前进线速度,υL和υR分别为机器人的左电机驱动的左轮线速度和右电机驱动的右轮线速度,ω为机器人的角速度。
移动机器人的前进线速度与左右轮的线速度的关系如下:
υ+υυ=LR (4-24)
2因为机器人的左轮角速度和右轮角速度相同,所以有如下关系:
θ=ω=•υLR (4-25) ==rr−Lr+Lυυ由式(4-25)可得:
ω=υR−υL2L (4-26)
由式(4-24)和式(4-26)可以推导得出机器人左轮线速度和右轮线速度与机器人前进线速度和角速度的关系如(4-27)公式所示:
υL=υ−ωL
(4-27)
υυωL=+R
写成矩阵形式即为:
11υLυ1 (4-28) ω=211υ−RLL
经过上述推导,我们可以将Unicycle类轮式移动机器人基于运动学模型的控制输入量由u=(υ,ω)转化为u=(υL,υR)。
TT4.4.3 BP神经网络PID控制器模型
1. BP-PID控制器模型
常见的BP-PID控制模型如图4.23所示[57]:
54 基于嵌入式Linux系统的移动机器人无线控制技术
学习算法BP-NNyrkp+kikdPID控制器uy被控对象-输出反馈
图 4.23 BP-PID控制器模型
在经典传统PID控制部分,对被控对象进行直接闭环控制;神经网络部分,根据系统状态调节PID控制参数,即在线调整kp、ki、kd三个参数。通过在线网络学习,加权系数调整,达到神经网络输出层的输出为某一最优控制规律下的PID控制参数。神经网络部分为BP神经网络,其结构简图如图4.24所示:
x1x2jlikpx3x4输入层隐含层输出层kikd
图 4.24 BP神经网络结构简图
BP神经网络是单向传播的多层前向网络。其具有三层或三层以上的神经网络,包括输入层、中间层(隐含层)和输出层。上下层之间实现全连接,每层神经元之间没有连接。提供一对学习样本给神经网络后,神经元的激活值从输入层经各中间层向输出层传播。在输逆的传播中修正权值,最后回到输入层,这种算法便是“误差逆传播算法”,即BP算法。由于神经网络的神经云函数一般采用的是可微函数,因此,神经网络的输入和输出可以实现任意非线性映射。
2. BP-PID控制器整定原理
经典增量式数字PID的控制算法为:
u(k=)u(k−1)+∆u(k) (4-29)
∆u=(k)kp[e(k)−e(k−1)]+kie(k)+kd[e(k)−2e(k−1)+e(k−2]) (4-30)
式中:u(k)为PID控制器在k时刻的输出,e(k)为k时刻系统期望输出与实际输出的误差,即:
第四章 移动机器人无线控制 55
=e(k)yr(k)−y(k) (4-31)
在本论文研究中采用的BP网络模型如图4.24所示,为4×5×3三层结构,即输入层、隐含层和输出层的个数分别为4、5和3。其中输出层的输出对应PID控制器的kp、ki、kd三个参数。
网络输入层的输入O(j1)(k)为:
O1(k)=e(k);O2(k)=(1)(1)m=0∑e(i);O()(k)=13k(1)(k)=1(j=1,2,3,4) (4-32) e(k)−e(k−1);O4式中:e(k)为k时刻输入量与反馈量的偏差量。
网络隐含层的输入和输出为:
4=neti(k)(2)(2)(2)(2)(2)wO=(k);O(k)f=[net1,2,...,5) (4-33) ∑ijiii(k)](ij=0(2)式中:wij为隐含层权值,上标(1)、(2)、(3)分别代表输入层、隐含层和输出层。
隐含层神经元激活函数取Sigmoid型双正切函数为f(x)=tanh(x)。
网络输出层的输入和输出为:
netl(k)=(3)(3)(3)(3)(3)();()[1,2,3) (4-34) wOkOkgnet==∑liill(k)](li=05式中:输出层的输出对应kp、ki、kd三个可调参数,因为不能为负值,输出层神经元激活函数取非负的Sigmoid型函数为:
g(x)=[1+tanh(x)]/2 (4-35)
BP神经网络反向学习过程利用BP学习算法来修正权值和阈值,取性能指标函数为:
2J(k)=yk−yk/2=e(k)/2 (4-36) ()()r2为了解决传统BP算法存在收敛速度慢和存在“局部极值”的问题,改进型BP算法采取如下措施[58]:
变步长法,学习速率做如下修正:∆Ε<0时,η=η×α;∆Ε>0时,η=η×b。其中,α>1,0引入惯性项,为避免学习过程产生震荡,加快收敛速度,附加惯性项。按照梯度下降法修正权系数的公式为(4-37)、(4-38),式中η为学习速率,a为动量系数。
∂J(3)(3)∆ωli(k+=+1)−η(k) (4-37) α∆ωli(3)∂ωli∂J(3)∂ωli∂J∂y(k+1)∂u(k)∂Ol(3)(k)∂netl(3)(k) (4-38) =(3)∂y(k+1)∂u(k)∂Ol(3)(k)∂netl(3)(k)∂ωli
∂y(k+1)]代替。由此带来的计算∂u(k)由于∂y(k+1) 未知,所以近似用符号函数sgn[∂u(k)56 基于嵌入式Linux系统的移动机器人无线控制技术
不精确的影响可通过调整学习速率η来补偿。从而得出网络输出层的权系数调整算式为:
(3)(3)∆ωli(k+=+1)ηδl(3)Oi(2)(k)α∆ωli(k) (4-39)
(3)
e(k+1)sgnδl=
∂y(k+1)∂u(k)
netl(3)(k)l=1,2,3 (4-40) g′(3)
∂u(k)∂Ol(k)
隐含层加权系数的调整算式为:
(2)(2)∆ωij(k+=+1)ηδi(2)O(1)α∆ωij(k) (4-41) j(k)δ(2)i
3(3)(3)(2)=∑δlωli(k)f′neti(k) i=1,2,,5 (4-42) l=1
式中:η为初始学习速率,a为动量系数。
4.4.4 基于BP神经网络PID的移动机器人轨迹跟踪控制器
由上文中“轮式移动机器人运动学模型”一节的内容我们知道其运动学模型为:
•x••y=P=•θ其离散模型为:
cosθ0υsinθ0=ω01υcosθυsinθ (4-43) w=xi(k)+υi(k)co(sθi(k))Txi(k+1)(i(k))T (4-44) =yi(k)+υi(k)sinθyi(k+1)θ(k+1)=θi(k)+ωi(k)Ti式中:(xi,yi,θi)和(υi,ωi)为轮式移动机器人在X-Y坐标系中的实际位姿坐标和线速度、角速度,T为采样周期,k为采样时刻。假设轮式移动机器人在X-Y坐标系中的期望位姿坐标和线速度角度为(xr,yr,θr)和(υr,ωr),则k时刻跟踪误差为:
e=xr(k)−xi(k)x(k)yr(k)−yi(k) (4-45) e=y(k)=(k)θr(k)−θi(k)eθ本文研究设计的轮式移动机器人轨迹跟踪控制器没有采取直接设计角速度和线速度的方式来进行轨迹跟踪。而是将每个位姿变量作为被控对象,根据机器人的期望位姿(xr,yr,θr)和实际位姿(xi,yi,θi)的关系,通过BP-PID控制器得出保留每步的控制量(ux(k),uy(k),uθ(k))。移动机器人每个位姿的被控对象模型为: xi(k+1)=ux(k)+xi(k)=uy(k)+yi(k) (4-46) yi(k+1)=uθ(k)+θi(k)θi(k+1)第四章 移动机器人无线控制 57
将每一步的控制量(ux(k),uy(k),uθ(k))跟机器人运动学模型相结合,经过递推推导,得出相应的控制量υi(k)和ωi(k),在上文中我们已推导出υi(k)和ωi(k)跟
υL(k)和υR(k)的关系,即可以得出机器人每步的控制量(υL(k),υR(k))。通过实际测量机器人的速度变量(霍尔传感器)和航向变量(加速度传感器),经过速度位姿变换得出机器人实际位姿变量,并反馈给BP-PID控制器构成闭环控制。为了防止干扰,采用三个BP-PID控制器对机器人的三个位姿(x,y,θ)进行分别控制。BP-PID Unicycle类轮式移动机器人控制结构简图如图4.25所示:
xr+-BP-PID控制器(1)ux位姿x被控对象xiyiyr+-BP-PID控制器(2)uy位姿y被控对象θr+-BP-PID控制器(3)uθ位姿θ被控对象θiυLυR控制量转换υLυR移动机器人θ速度位姿变换xiyiθi
图 4.25 BP-PID Unicycle类轮式移动机器人控制结构简图
由式(4-44)和(4-46)可得每一个位姿被控对象的每一步控制量如下:
ux(k)=υi(k)co(sθi(k))T(i(k))T (4-47) uy(k)=υi(k)sinθuθ(k)=ωi(k)T通过对(4-47)式计算得出移动机器人每一步的角速度和线速度实际控制量如下:
uy(k)uy(k)
u(k)cos(arctan)u(k)sin(arctan)+xyu(k)u(k)xxυi(k)=
(4-48) T
u(k)ωi(k)=θT
上述公式中,T为采样周期,在上文中已推导出机器人左轮线速度和右轮线速度与机器人前进线速度和角速度的关系公式(4-15),从而得出移动机器人每一步的左右轮线速度实际控制量。通过霍尔传感器测得移动机器人的左右轮的实时线速度,通过加速度传感器测得移动机器人的实时航向角。经过速度位姿变换,即根据上述公式递推、反解得出移动机器人的实时位姿,然后反馈给BP-PID控制器进行闭环控制,实现移动机器人的轨迹跟踪控制。
58 基于嵌入式Linux系统的移动机器人无线控制技术
4.4.5仿真实验
为了验证上述BP-PID控制器的可行性和有效性,以移动机器人跟踪线速度和角速度均为匀速运动的圆轨迹为例进行仿真实验。设ωr=1.0,υr=1.0,则
υr=0,半径=r•υr=1.0,跟踪轨迹及方位如下: ωr=cos(ωrt)costxrr==sin(ωrt)sint (4-49) yrr===trtθrω取BP神经网络中的惯性系数α=0.04,初始学习速率η=0.28,位姿误差初
始值为[3 0 0],仿真结果如下图所示:
图 4.26 圆轨迹跟踪 图 4.27 X方向跟踪误差
图 4.28 Y方向跟踪误差 图 4.29 θ跟踪误差
第四章 移动机器人无线控制 59
图 4.30 PID在线参数
从仿真结果可以看出,文中的BP-PID控制器能够很好的跟踪预期轨迹,能够平稳、快速的跟踪给定轨迹,从而验证了其有效性和可行性,为下一步进行实验研究奠定了理论基础。
4.5本章小结
本章介绍并实现了系统几个主要模块间的通信,包括PC终端与嵌入式平台的Socket网络通信、嵌入式平台与电机驱动/控制器的UART通信和嵌入式平台与机械手控制器的通信等。PC终端-嵌入式平台-电机/驱动控制器这条通信线路可以实现无线远程控制移动机器人;PC终端-嵌入式平台-机械手控制器这条通信线路可以实现无线远程控制机械手;PC终端-嵌入式平台之间的网络通信可以传输大量传感器数据,包括摄像头图像数据等。
对六自由度机械手的结构、位姿和舵机控制等进行了研究。得出了模块化的六自由度机械手的空间位姿和其六舵机的旋转角度成函数关系,并在PC终端-嵌入式平台-机械手控制器这条通信线路下实现了无线远程控制机械手功能,并可由摄像头拍摄功能完成情况。
对移动机器人的轨迹跟踪进行了研究,研究了基于BP-PID控制器的轨迹跟踪控制算法。以移动机器人运动学模型为基础,在Matlab下进行算法仿真,经过仿真验证了该算法的有效性和可行性,为下一步进行实验研究奠定了理论基础。
60 基于嵌入式Linux系统的移动机器人无线控制技术
第五章 总结与展望 61
第五章 总结与展望
5.1总结
基于无线控制的移动机器人系统的研究与开发涉及多学科、多技术领域,包括计算机技术、自动控制技术、信息技术、电子电路技术和网络通信技术等,是综合程度很高的系统。论文研究了系统的软硬件平台搭建、嵌入式Linux操作系统的驱动开发、移动机器人传感器信息的获取、移动机器人无线远程控制及轨迹跟踪等关键技术,具有一定的应用价值,论文围绕这些技术所做的工作如下:
1. 研究了当前移动机器人系统的国内外现状和发展动态,详细介绍了嵌入式系统的特点,对当前主流的嵌入式操作系统进行了学习和比较,确定了适合本系统的嵌入式操作系统。
2. 成功搭建了无线控制移动机器人系统的软硬件开发平台。在嵌入式Linux环境下,开发了系统所需要的驱动和应用程序。研究了移动机器人底层传感器模块的工作原理和功能作用。并以嵌入式平台为中心,实现了在嵌入式Linux环境下传感器信息获取的功能。
3. 研究并实现了移动机器人各个控制器模块间的通信,主要包括PC终端和嵌入式平台的Socket无线网络通信、嵌入式平台和电机驱动/控制器的UART通信及嵌入式平台和机械手控制器的SPI通信。基于各个控制器模块的通信功能,实现了移动机器人的无线远程控制、底层传感器数据的无线传输和显示。分析了六自由度机械手的硬件构成、位姿分析、及舵机控制方法,实现了无线远程控制六自由度机械手的功能。
4. 学习了轮式移动机器人的数学模型,包括动力学模型和运动学模型。以运动学模型为基础,进行了轮式移动机器人轨迹跟踪控制的研究,研究了基于BP-PID控制器的轨迹跟踪控制算法。最后对算法进行了仿真实验,通过仿真结果验证了算法的有效性和可靠性。
本系统采用模块化设计思路,完成了一个具备模块化、开放性、可扩展性的移动机器人实验平台系统,具有良好的学习实验及实用价值。
5.2展望
综上所述,本文研究了基于嵌入式Linux系统的移动机器人无线控制的相关技术问题,但是由于时间仓促,条件有限,必定存在许多未解决的理论问题和实际问题有待深入研究:
1. 在获取环境障碍物信息的传感器模块方面,文中用到的是超声波测距传感
62 基于嵌入式Linux系统的移动机器人无线控制技术
器和单目CMOS摄像头,为提高检测的准确度,可以将此传感器模块换为能够对一个区域内进行扫描的3-D激光雷达和全景CCD摄像头等。这样可以提高环境建模的准确度。
2. 在视频采集传输方面,由于系统中的ARM9处理器没有硬件乘法器,不能对图像进行快速处理,导致PC终端的视频显示不流畅,提高视频采集传输这块可以增加DSP处理器,专门负责视频采集传输等。
3. 文中只是实现了传感器信息的获取功能及机器人局部行为的规划,如反应式避障等,没有进行全局建模、规划,此处需要进一步功能实现和完善。
4. 在机器人轨迹跟踪控制研究中,只对算法进行了仿真研究,没有进行实际测试验证,下一步需要将仿真算法进行实际测试。
5. 系统PC终端的控制界面有很大的优化空间,人机交互界面的简洁性、功能完整性和人性化等方面都需要进一步完善。在优化相关按钮菜单功能后,会获得更加完美的控制界面。
由于无线控制移动机器人系统衍射了当前非常先进的学科和技术,随着进一步的研究工作,不断完善程序功能,一定可获得功能更加自主、完整及人性化的无线远程控制移动机器人系统。
致谢 63
致谢
我十分荣幸在西安电子科技大学攻读硕士学位,西安电子科技大学有着良好的学习和科研氛围。主楼三区412实验室更是为我提供了学习和科研的完善条件。在这种氛围下,我完成了研究生课题。
在我三年的研究生生涯中,我的导师韩保君副教授给予了我学习上的指导和生活上的关怀。在理论学习和课题研究方面上对我的帮助和指导使我受益匪浅,韩老师渊博的专业知识、严谨的治学态度更是使我终身受益。在此向韩老师表示最真挚的感谢!在此一并感谢的还有刘上乾老师,刘老师的治学态度也使我受益匪浅。
同时,已毕业的师兄师姐在学习和生活上也给予我很大帮助和支持。研究生期间,一同学习的实验室学友郭力、曹秀霞、钟韬、尹现军、孙海涛,李姗姗、黄瑶、韩阳、陈浩、易翔和方尧等。他们对我的课题提出了许多建议,对本论文的研究工作提供了极大的帮助。
最后,我衷心感谢我的父母,多年来在我求学道路上始终如一的关心我、支持我,几十年来他们对我奉献了无私的爱,才使得我能够顺利完成学业,取得今天的成就。对于你们的感激之情我甚至无法用言语表达!
向所有关心帮助过我的人们致以深深的谢意!
基于嵌入式Linux系统的移动机器人无线控制技术
参考文献 65
参考文献
[1] 宋广钢. 基于嵌入式Linux的移动机器人控制平台研究[D]. 武汉:武汉理工大
学. 2010.
[2] 徐国华, 谭民. 移动机器人的发展现状及趋势[J]. 机器人技术与应用,
2001(3):7-14.
[3] 薛自兴等著. 多移动机器人协同原理与技术[M]. 北京: 国防工业出版社. 2011:
260-262.
[4] 柯文德, 崔刚, 洪炳镕等.仿人机器人路径规划研究[J]. 山东科技大学学报,
2012(2):86-92.
[5] Ibrahim M.H. Sanhoury, Shamsudin H.M. Amin, Abdul Rashid Husain. Multiple
Nonholonomic Wheeled Mobile Robots Trajectory Tracking While Maintaining Time-Varying Formation via Synchronous Controller[J]. Procedia Engineering. 2012(41):1044-1050.
[6] Claudia Eckert. Embedded systems security[J]. Datenschutz und Datensicherheit.
2012(12):861.
[7] 方尔正, 王燕. 嵌入式技术及应用[M]. 哈尔滨: 哈尔滨工业大学出版社.
2008:1-2.
[8] 黄俊等著. ARM嵌入式系统基础及应用[M]. 西安:西安电子科技大学出版社.
2010:1-2.
[9] 刘润发. 基于嵌入式Linux和网络的机器人远程控制系统的研究[D]. 北京:北
京邮电大学. 2007.
[10] Zeng, Lingqi. Design and control of human-friendly robots[D]. McMaster
University. 2011.
[11] Lian, F.-L., Lin, Y.-C., Kuo, C.-T, Jean, J.-H. Rate and Quality Control With
Embedded Coding for Mobile Robot With Visual Patrol[J]. Systems Journal, 2012(3):368-377.
[12] Sheridan T B. Space Teleoperation through Time Delay. Review and Prognosis.
IEEE Transaction on Robotics and Automation, 1993, 9(5):592-606.
[13] G.Giralt, 高翔, 彭桂波, 于士齐. 行走机器人[J]. 系统工程与电子技术,
1987(1):17-29.
[14] M.J. Cox and J.E.F Baruch, Robotic Telescopes: An Interactive Exhibit on the
World-Wide Web, Proc. 2nd International Conference of the World-Wide Web, Chicago, October 12-20 th , 1994.
66 基于嵌入式Linux系统的移动机器人无线控制技术
[15] U. Nehmazow, A. Buhlmeier, H. Durer and M. Nolte, Remote control of mobile
robot via Internet, Dept of Computer Science, University of Manchester, Technical Report Series, UMCS-96-2-3.
[16] 王瑞,常波,吕明,魏青. 机载传感器数据信息融合技术初探[J]. 硅谷,
2011(9):8-9.
[17] Yan Fei, Zhuang Yan, Wang Wei. Mobile robot 3D map building and path planning
based on multi-sensor data fusion[J]. International Journal of Computer Applications in Technology. 2012(4):276-283.
[18] 李晓阳. WIFI技术及其应用于发展[J]. 信息技术. 2012(2):196-198.
[19] 袁俊杰. 基于ARM9的嵌入式移动机器人远程控制的研究[D]. 天津:天津理工
大学. 2006.
[20] Stoeter, Sascha A.,Papanikolopoulos, Nikolaos. Autonomous stair-climbing with
miniature jumping robots[J]. Systems, Man and Cybernetics, IEEE Transactions, 2005(2):313-325.
[21] 田景文, 伍延禄, 高美娟. 基于嵌入式系统的移动机器人无线远程控制系统设
计[J]. 机床与液压. 2012(7):74-77.
[22] Zhu Yingjun. Remote control of multiple robots: A wireless sensor network and
virtual reality approach[D]. The University of Texas at EI Paso. 2009.
[23] P. Saucy and F. Mondana. Open access to a mobile robot on the Internet[J].
Robotics and Automation Magazine,IEEE. 2000(1):41-47.
[24] Chappel, L.A., Tittel, E.著, 马海军, 吴华等译. TCP/IP协议原理与应用[M]. 北
京:清华大学出版社. 2005:1-23.
[25] Miles Townes. The Spread of TCP/IP: How the Internet Became the Internet[J].
Millennium-Journal of International Studies. 2012(1):43-.
[26] 孙鑫,余安萍. VC++深入详解[M].北京:电子工业出版社. 2006:63-99.
[27] 桑楠. 嵌入式系统原理及应用开发技术[M]. 北京:北京航空航天大学出版社.
2002:1-6.
[28] 杜春雷. ARM体系结构与编程[M]. 北京:清华大学出版社. 2003. [29] S3C2440A[14]Samsung Corporation. S3C2440 Datasheet[S].
[30] 高辉辉. 基于GPS/GIS的嵌入式车载导航系统的应用研究[D]. 西安:西安电子
科技大学. 2012.
[31] 涂刚, 阳富民, 胡贯荣. 嵌入式操作系统综述[J]. 计算机应用研究. 2000,
17(11):45-47.
[32] 朱珍民, 隋雪青, 段斌. 嵌入式实时操作系统及其应用开发[M]. 北京:北京邮
电大学出版社. 2006.
参考文献 67
[33] Wenjie Chen, Shanben Chen, Tao Lin. Preliminary Probe of Embedded Real-Time
Operating System and Its Application in Welding Control[J]. Lecture Notes in Control and Information Sciences. 2004, 299:353-357.
[34] 孙天泽. 嵌入式Linux操作系统[M]. 北京:人民邮电出版社. 2009.
[35] 朱宇. 基于Linux的USB 2.0 OTG IP核主机驱动的研究与实现[D]. 成都:电子
科技大学. 2009.
[36] 魏永明,耿岳,钟书毅. Linux 设备驱动程序[M]. 北京:中国电力出版社. 2005. [37] 冯健. 基于TD-SCDMA的3G 固话接入端的设计与实现[D]. 江苏:苏州大学.
2009.
[38] 童长飞. C8051F系列单片机开发与C语言编程[M]. 北京:北京航空航天大学出
版社. 2005.
[39] Phongchai N. A multi-agent based architecture for an adaptive human-robot
interface[D]. Tennessee: Vanderbilt University. 2003.
[40] 范永, 谭民. 机器人控制器的现状与展望[J]. 机器人. 1999, 21(1): 75-80. [41] 徐华, 贾培发, 赵雁南. 开放式机器人控制器软件体系结构研究进展[J].高技术
通讯. 2003, 13(1): 100-105.
[42] 李智军, 罗青, 吕恬生. 基于混合结构的机器人 Agent 控制结构的研究[J]. 计
算机工程与应用. 2003, 39(21): 90-93.
[43] 刘娟. 基于时空信息与认知模型的移动机器人导航机制研究[D]. 长沙:中南大
学. 2003.
[44] 薛自兴, 贺汉根, 陈虹. 未知环境中移动机器人导航控制理论与方法[M].北京:
科学出版社. 2009:11-18.
[45] 黄美玲, 张伯珩, 边川平等. CCD和CMOS图像传感器性能比较[J]. 科学技术
与工程. 2007(2):249-251.
[46] 徐德, 邹伟. 室内移动式服务机器人的感知、定位与控制[M]. 北京:科学出版社.
2008:153-155.
[47] 屈克文, 石奋苏. 基于ARM-Linux的旋转编码器接口与驱动程序的设计[J]. 计
算机应用. 2011(A2):156-158.
[48] 胡思捷. 基于Android平台的触摸屏系统设计及实现[D]. 南京:南开大学. 2011. [49] 吕建华. 基于PDA的智能家居控制系统的设计与实现[D]. 北京:北京工业大学.
2010.
[50] 冯乐涵. 移动机器人运动目标检测与跟踪系统研究[D].河北:河北工业大学.
2010.
[51] 彭辉. 轮式移动机器人运动轨迹控制技术研究[D]. 广东:广东工业大学. 2008. [52] 吴卫国, 蒋平. 移动小车轨迹跟踪的力矩控制[J]. 控制与决策. 1999,
68 基于嵌入式Linux系统的移动机器人无线控制技术
14(2):177-180.
[53] Goldstein H. Classical Mechanics[M]. Reading: Addison- Wesley, 1980.
[54] Kim B M, Tsiotras P. Controllers for unicycle-type wheeled robots: Theoretical
results and experimental validation[J]. IEEE Trans. On Robotics and Automation. 2002, 18(3):294-307.
[55] Luca A D, Oriolo G, Vendittelli M. Control of wheeled mobile robots: An
experimental overview[C]. RAMSETE – Articulated and Mobile Robotics for Services and Technologies, Berlin: Springer. 2001:181-216.
[56] 施维. 轮式移动机器人轨迹跟踪控制研究[D].南京:南京理工大学. 2006. [57] 白洁, 王朝立, 孙玉莎, 鲁国辉. 神经网络PID控制的机器人视觉反馈跟踪[J].
计算机系统应用, 2012,(2):125-129.
[58] 焦竹青, 屈百达, 徐保国. 基于BP神经网络PID控制的BLDCM调速系统[J].
位计算机信息. 2007, 23(4):112-114.
在校期间科研成果 69
在校期间科研成果
1. 参与导师总装军工技术改进项目:火炮直线度测量控制系统的研制。负责系统上位机控制界面及图像处理程序的编写开发;参与系统靶场验收工作;系统交付兵器试验基地使用并获得好评。
2. 负责高校新实验设备项目:基于嵌入式Linux系统的移动机器人无线远程控制系统的研制。负责硬件电路调试和软件开发工作。
3. 赵九龙,韩保君. 仿蠕虫机器人爬行状态的控制研究. 兵工学报.
(投稿外审中)70 基于嵌入式Linux系统的移动机器人无线控制技术
附录A 71
附录A
传感器模块原理图:
(CMOS摄像头接口原理图)
(超声波传感器原理图)
(加速度传感器原理图)
72 基于嵌入式Linux系统的移动机器人无线控制技术
(红外光电和霍尔传感器原理图)
附录B 73
附录B
嵌入式平台部分原理图:
(嵌入式开发板电源原理图)
(嵌入式平台串口原理图)
(嵌入式平台USB和JTAG原理图)
74 基于嵌入式Linux系统的移动机器人无线控制技术
(嵌入式平台GPIO接口)
附录C 75
附录C
嵌入式平台服务器部分代码:
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) //宏定义数组并初始化 #define max_buffer_size 100
/******************************************************************/ /*一个进程中多个线程共享内存、全局变量、文件描述符等*/ int fd; /*定义串口设备文件描述符*/ int flag_close;
int listensock,connsock;//监听套接字、通讯套接字
char recvbuff[]=\"The command was received!\\n\";// 返回给客户端数据 int sfd,retv; /*spi part*/ int fd_spi; //定义SPI设备文件描述符 int ret_spi; //定义SPI部分返回参数
static const char *device = \"/dev/spidev0.0\";//spi设备文件 static uint8_t mode;//spi模式
static uint8_t bits = 8;//spi每字节位数
static uint32_t speed = 500000;//spi传输速度 hz static uint16_t delay; //延时
uint8_t tx[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};//舵机角度数据数组
/******************************************************************/ /*******************************************************************/ //SPI发送接收函数 static void transfer(int fd) {
int ret;
uint8_t rx[ARRAY_SIZE(tx)] = {0, }; struct spi_ioc_transfer tr = {
.tx_buf = (unsigned long)tx, .rx_buf = (unsigned long)rx, .len = ARRAY_SIZE(tx), .delay_usecs = delay, .speed_hz = speed, .bits_per_word = bits, };
ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr); if (ret == 1)
pabort(\"can't send spi message\"); /*打印接收到的数据*/
for (ret = 0; ret < ARRAY_SIZE(tx); ret++) {
if (!(ret % 5))
puts(\"\");
printf(\"%.2X \ }
76 基于嵌入式Linux系统的移动机器人无线控制技术
puts(\"\"); }
/*******************************************************************/ /*********************************************/ /*定义接收结构体,用于从客户端接收数据*/ struct recv_data {
char Robot_command; //机器人命令 int Robot_pwm; //PWM占空比 char servo1_rdata; //舵机1角度值 char servo2_rdata; //舵机2角度值 char servo3_rdata; //舵机3角度值 char servo4_rdata; //舵机4角度值 char servo5_rdata; //舵机5角度值 char servo6_rdata; //舵机6角度值 };
/*********************************************/ /*********************************************/ /*定义机器人参数结构体,服务器发给机器人底层*/ struct Robot_Parameters {
char Robot_Command; int Robot_Pwm; char Robot_Mode; };
/**********************************************/ /**********************************************/ /*定义传感器数据结构体*/ struct Send_sensordata {
double robot_speed_left; //机器人左电机速度 double robot_speed_right; //机器人右电机速度 double robot_ultrasonic_distance; //超声波探测距离 double robot_ultrasonic_member; //超声波探测个数
double robot_photoelectric_member; //红外光电开关反应个数 double robot_angle_course; //机器人航向角 double robot_angle_lean; //机器人倾斜角 };
struct Send_sensordata sensordata;
/**********************************************/
/*********************************************************************/ /*新建线程8:机械手(舵机)线程*/ void *Robot_Servo_thread(void *arg) {
printf(\"The Servo data was received\\n\"); struct Servos_angle_data *temp;
temp=(struct Servos_angle_data *)arg; fd_spi = open(device, O_RDWR);
附录C 77
if (fd_spi < 0)
pabort(\"can't open device\"); printf(\"spi mode: %d\\n\ printf(\"bits per word: %d\\n\
printf(\"max speed: %d Hz (%d KHz)\\n\ char i;
for(i=0;i<6;i++) {
printf(\"servo %d data is %d\\n\ }
transfer(fd_spi); close(fd_spi); return (void *)0; }
/*******************************************************************/ open_serial(1); //打开串口1
fcntl(fd,F_SETFL,0);//设置串口的状态为阻塞状态 printf(\"ready for sending data...\\n\");
tcgetattr(fd,&option);//保存原先串口配置 cfmakeraw(&option);
cfsetispeed(&option,B19200);//设置波特率 cfsetospeed(&option,B19200);//设置波特率 tcsetattr(fd,TCSANOW,&option);//激活配置
/*******************************************************************/ /*******************************************************************/ /*并发服务器:TCP服务器,思想:每一个客户机的请求并不由服务器直接处理,而是服务器创建一个子进程处理*/
struct sockaddr_in serveraddr; // 定义网络套接字地址结构 int exit_flag;//循环标志位 int recv_flag=0;
listensock = socket(AF_INET,SOCK_STREAM,0); // 创建一个套接字,用于监听 if(listensock<0) {
printf(\"Socket Error\\n\"); exit(1); }
bzero(&serveraddr,sizeof(struct sockaddr)); // 地址结构清零 serveraddr.sin_family = AF_INET; // 指定使用的通讯协议族
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); // 指定接受任何连接 serveraddr.sin_port = htons(5000); // 指定监听的端口
bind(listensock,(struct sockaddr *)&serveraddr,sizeof(struct sockaddr_in)); // 给套接口邦定地址
listen(listensock,1024); // 开始监听
memset(recv_buff,'z',sizeof(recv_buff));//清空接收缓冲区 printf(\"Waiting for client connect....\\n\");
connsock = accept(listensock,(struct sockaddr *)NULL, NULL);
//建立通讯的套接字, accept 函数,等待客户端程序使用 connect 函数的连接
78 基于嵌入式Linux系统的移动机器人无线控制技术
if(connsock<0) {
printf(\"Accept Error\\n\"); // continue; }
printf(\"Connect Sucess!\\n\");
/*******************************************************************/
附录D 79
附录D
AD驱动部分代码: #define DEVICE_NAME \"2440-adc\"
static void __iomem *base_addr;//定义一个用来保存经过虚拟映射后的内存地址 typedef struct {
wait_queue_head_t wait; //定义等待队列头 int channel; //A/D通道 AIN0~AIN3,YM、YP、XM、XP int prescale; //A/D预分频系数 }ADC_DEV;
DECLARE_MUTEX(ADC0_LOCK);//申请并初始化一个信号量,对A/D资源进行互斥访问 static int OwnADC = 0; static ADC_DEV adcdev;
/*用于标识AD转换后的数据是否可以读取,0表示不可读取*/ static volatile int ev_adc = 0; static int adc_data;//转换后数据
/*保存从平台队列中获取ADC的时钟*/ static struct clk *adc_clock; /*ADC中断服务程序,该服务程序主要是从ADC数据寄存器中读取AD转换后的值*/
static irqreturn_t adcdone_int_handler(int irq, void *dev_id) {
/*保证了应用程序读取一次这里就读取 AD转换的值一次, 避免应用程序读取一次后发生多次中断多次读取AD转换值*/ if (OwnADC) {
/*读取AD转换后的值保存到全局变量adc_data 中,S3C2410_ADCDAT0定义在regs-adc.h中,
这里为什么要与上一个0x3ff,很简单,因为AD转换后的数据是保存在ADCDAT0的第0-9位,
所以与上0x3ff(即:1111111111)后就得到第0-9位的数据,多余的位就都为0*/
adc_data = ADCDAT0 & 0x3ff;
/*将可读标识为1,并唤醒等待队列*/ ev_adc = 1;
wake_up_interruptible(&adcdev.wait); }
return IRQ_HANDLED; }
/*ADC设备驱动的读接口函数*/
static ssize_t s3c2410_adc_read(struct file *filp, char *buffer, size_t count, loff_t *ppos) {
char str[20]; int value;
80 基于嵌入式Linux系统的移动机器人无线控制技术
size_t len;
/*试着获取信号量(即:加锁)*/
if (down_trylock(&ADC0_LOCK) == 0) {
OwnADC = 1;
/*选择输入通道,预分频系数,启动A/D转换*/ START_ADC_AIN(adcdev.channel, adcdev.prescale);
/*使等待队列进入睡眠,等待A/D转换完成,可读标志为1*/ wait_event_interruptible(adcdev.wait, ev_adc); /*可读标志置0*/ ev_adc = 0;
DPRINTK(\"AIN[%d] = 0x%04x, %d\\n\ADCCON & 0x80 ? 1:0); value = adc_data;
sprintf(str,\"%5d\
/*将A/D转换后的数据复制到用户空间*/
copy_to_user(buffer, (char *)&adc_data, sizeof(adc_data)); OwnADC = 0;
/*释放获取的信号量,解锁*/ up(&ADC0_LOCK); } else {
value = -1; }
len = sprintf(str, \"%d\\n\ if (count >= len) {
int r = copy_to_user(buffer, str, len); return r ? r : len; } else {
return -EINVAL; } }
/*ADC设备驱动的IO控制函数*/
static int s3c2440_adc_ioctl(struct inode *inode, struct file *file, int cmd, int arg) {
switch (cmd) {
case 0: adcdev.channel=0; adcdev.prescale=arg; break;
case 1: adcdev.channel=1; adcdev.prescale=arg; break;
case 4: adcdev.channel=2; adcdev.prescale=arg;
附录D 81
break;
case 3: adcdev.channel=3; adcdev.prescale=arg; break;
default : break; }
return 0; }
/*********************************************************************/ 外部中断驱动代码: #define DEVICE_NAME \"2440-interrupt\"//定义驱动名称
/*定义含中断、管脚、管脚设置、中断数和产生中断传感器的结构体*/ struct sensor_irq_desc {
int irq; //中断号 int pin; //管脚 int pin_setting; //管脚设置 int number; //中断数 char * name; //产生中断的传感器 }; /*
定义结构体数组
硬件中断号、管脚、管脚设置为中断模式、中断数、产生中断的传感器 */
static struct sensor_irq_desc sensor_irqs [] = {
{IRQ_EINT2, S3C2410_GPF(2), S3C2410_GPF2_EINT2, 0, \"Gd1\光电开关1*/
{IRQ_EINT3, S3C2410_GPF(3), S3C2410_GPF3_EINT3, 1, \"Gd2\光电开关2*/
{IRQ_EINT5, S3C2410_GPF(5), S3C2410_GPF5_EINT5, 2, \"Gd3\光电开关3*/
{IRQ_EINT6, S3C2410_GPF(6), S3C2410_GPF6_EINT6, 3, \"Gd4\光电开关4*/
{IRQ_EINT8, S3C2410_GPG(0), S3C2410_GPG0_EINT8, 4, \"Gd5\光电开关5*/
{IRQ_EINT9, S3C2410_GPG(1), S3C2410_GPG1_EINT9, 5, \"Gd6\光电开关6*/
{IRQ_EINT17, S3C2410_GPG(9), S3C2410_GPG9_ENIT17, 6, \"Hall1\霍尔1,左电机*/
{IRQ_EINT18, S3C2410_GPG(10),S3C2410_GPG10_EINT18, 7, \"Hall2\霍尔2,右电机*/ };
/*返回值为irqreturn_t类型的中断服务程序*/ static irqreturn_t irq_interrupt(int irq, void *dev_id)
82 基于嵌入式Linux系统的移动机器人无线控制技术
{
/*定义一个button_irq_desc结构体类型的指针变量,对传入的资源进行处理*/
struct button_irq_desc *button_irqs = (struct button_irq_desc *)dev_id; int down;
/*获得中断控制寄存器的值(即是否有数据),取反后赋值给down,为0时说明有数据
要注意按下一次按钮,会发生两次中断,即按下是一次中断,放开又是一次中断*/
down = !s3c2410_gpio_getpin(button_irqs->pin);
if (down != (key_values[button_irqs->number] & 1)) {
mdelay(20);//延时20ms
if (down != (key_values[button_irqs->number] & 1)){
/*********************************************************************/ a+=1; if(a==3) {
b+=1;
a=0;
count_number[0]=b; }
count_number[1]=a;
/**********************************************************************/
key_values[button_irqs->number] = '0' + down; ev_press = 1;//标示数组可读了
wake_up_interruptible(&button_waitq);//唤醒读进程 } }
return IRQ_RETVAL(IRQ_HANDLED); }
/*********************************************************************/ 超声波部分核心代码:
void change_i2c_address(unsigned char addr_old, unsigned char addr_new)
// addr_old is the address now, addr_new will be the new address that you want change to {
delayms(2000); // Protect the eeprom ,you can delete this sentence write_byte(addr_old,2,0x9a); delayms(1);
write_byte(addr_old,2,0x92); delayms(1);
附录D 83
write_byte(addr_old,2,0x9e); delayms(1);
write_byte(addr_old,2, addr_new);
delayms(500); //Protect the eeprom, you can delete this sentence }
unsigned int detect(unsigned char address,unsigned char command) //0xe8(address) + 0xb0(command) {
unsigned int distance,count;
write_byte(address,2,command); //use command \"0xb0\" to detect the distance
delayms(1); //安全延时,如果显示不清晰可以将延时调大一些 //delayms(80); //如果是探测温度此处延时需根据表 1 所列时间相应延长
count=800;
while(--count || !SCL) //等待探测结束,count 值调小将减小探测等待时间 {
; // 空语句
display(range); //显示语句,可根据需要保留或删除 } // while(!SCL)display(range); //you can delete “display(range)”
//通过查询 SCL线来智能识别探测是否结束,使用本语句可删除上条语句(count=800;while…)以节省探测时间 distance=read_byte(address,2); distance <<= 8;
distance += read_byte(address,3);
return distance; //return 16 bit distance in millimeter }
/*********************************************************************/
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务