欢迎来到天天文库
浏览记录
ID:46242517
大小:364.67 KB
页数:8页
时间:2019-11-22
《探究未来移动机器人》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、基于Linux的移动机器人控制系统解决方案摘要:以嵌入式Linux发平台为基础,根据模糊控制算法进行机器人路径规划,同时将两口由度云台和超声波测距模块相结合,扩大了障碍物检测范围。根据测试,移动机器人町以根据操作人员的语音指令,实现前进、后退、测量距离等动作,并通过MP3播放功能播放出所测量到的距离值和机器人当前的运行状态。在运行过程中,机器人可以自动检测方位并修正,实现无碰撞行驶。引言随着科学技术的发展和社会的需要,移动机器人技术得到了迅速发展,正在渗透到各行各业中,使人们的生活更加便利。现今以单片机为核
2、心的移动机器人存在处理数据量冇限、控制系统速度低、人机交互机制单一等缺点,不能满足机器人多任务的耍求。系统中增加协处理器的系统结构也得到了广泛应用,虽然可以管理多种传感器,但这种结构却增加了硕件的冗余度和复杂度,见参考文献。为此,提岀了以嵌入式处理器S3C2440为核心的多任务机器人控制系统。1控制系统破件设计控制系统选川两轮独立驱动小车为移动式机器人平台,后轮为一个尼龙力向轮。处理器为三星公司的S3C2440,系统主频最高可达533MHz,外接512MBMNANDFlash和64MB的SDRAM,支持SP
3、I、I2C、UART等接口,满足移动机器人控制系统的需求,如图1所示。整个控制系统工作过程如下:语音识别芯片LD3320通过SPI总线接口接入ARM处理器,处理器可以对识别的结果进行分析和汇总,并通过查农捉取出操作人员的命令码;同时,处理器通过串口读取机器人当前的航向信息;超声波测距和红外线地面检测模块山处理器的GPIO引脚控制;通过控制两自山度的云台,可以进行多方位的超声波障碍物检测,利用LD3320模块的MP3播放功能播放所检测到的障碍物距离和路况信息。控制系统根据传感器的数据和所识别的操作人员的命令码
4、,利用信息融合技术提取环境特征,通过路径规划技术作出决策,控制电机状态,最终控制机器人的姿态。2控制系统软件设计在软件设计小,将系统小所冇要处理的任务划分为不同的.相互独立的任务模块。根据系统的性能指标和技术耍求,可将任务划分为:语音识别、航向测量与计算、超声波测距、电机控制、佶息处理等任务。2.1进程的创建与状态转换移动机器人控制系统在初始化完成后,利川系统调川fock机制分别为语音识别、航向测量与计算和超声波测距等任务产生相应的子进程,实现方式如图2所示。进程创建成功后,操作系统会根据调度算法进行进程调
5、度,这使系统在行驶过程屮,能够及时响应语音命令。主进程fbck()rt散2.2进程间通信机制在信息处理进程中,需要对不同任务返回的有效数据进行信息处理和融合。由于不同进程的数据段、堆栈段是相互隔离的,因此,采用共享内存的进程间通信方式,在程序中可以使用shmget从系统中取出一块未使用的物理内存并映射到用户空间,如图3所示。进程二在两个进程Z间建立共享内存的具体实现步骤如下:①在调用fock()前,使用Shmget创建新的共享内存,返回值为共享内存标识码:shmid=shmget(IPCPRIVATE,1,
6、PERM)〃申请一个字节共享内存①调川fock()函数,创建了进程,根据fock()的返冋值区分父进程和子进程,并分别在两个进程中使用shmat映射一块共享内存,即允许当前进程访问创建的共享内存:if(fock())p_addr=shmat(shmid,0,0);//将共享内存映射到父进程else{c_addr=shmat(shmid,0,0);}//将共享内存映射到子进程其中,shmid为shmgetO函数的返回值,即共享内存标识码。从用八的角度看,在父进程屮可以对paddr进行读写操作,实际访问的是申请
7、的共享内存。子进程则可以对caddr进行读写,从而实现两个进程间的通信。共宇内存的映射和进程Z间的关系,如图4所示。父进程A内存映射为:p_addr谄齐识别进用f•进程A内心映站为:c_addr父进程B内心映射为:p.fangrn.cn(进程B内存映射为:cfang2.3系统控制流程在程序初始化完成后,为每项任务创建了相应的进程,并建立了共享内存,如图5所示。在每个进程中采用循环执行方式,语音识别进程中利用select西数监控是否有识别结果输出,并将识别结果写入到相应的共享内存区。cQm-cn航向测量和计算
8、进程循环读取陀螺仪的角度佶息并存储。超声波测距进程在接收到佶息处理进程的控制命令后进行测距并将数据返回至信息处理进程。信息处理进程融合了多传感器的数据,根据设定的路径规划方案,将控制信息传输到电机控制进程,实现机器人姿态的调整。2.4语音识別在系统运行过程中,语音识别进程独立完成对语音模块的初始化和读取识别结果的任务,因此,能够及时响应操作人员发出的语音指令。程序中使用了selectO函数监控readO是否可读。
此文档下载收益归作者所有