5734|0

337

帖子

0

TA的资源

裸片初长成(中级)

智能小车采用Linux2.6 [复制链接]

硬件: 1. 车体 2. S3C2410A开发板 3. 红外测距传感器 4. 伺服器(舵机) 5. 直流电机 6. 电机驱动板 7. 电源 软件: 1. Linux2.6.14内核,包括:Nand Flash、USB、NET、PWM、ADC等驱动;Yaffs等文件系统。 2. VIVI 3. Busybox1.6 主要目标: 使车体能自主地在平地行驶,能躲避一定高度和大小的障碍物。 下一目标: 优化行走算法、行走路线预测、自选行走路线等。 加入编码轮,实现PID。 开发简述: 1. 在前几个月已完成了PRJ1:智能小车的开发,PRJ2硬件跟PRJ1相同,实现功能也基本相同,最大不同的是PRJ1采用UCOSII操作系统,PRJ2采用Linux,由于工作比较忙,PRJ1的介绍稍后撰写发布。 2. 开发板是一年多前买的,自带的linux是2.4的版本,现在很多开发板都已经用上2.6了,我当然也想用2.6做平台了,于是开始了linux2.6.14的移植,用了大概花了3个星期左右,其中也尝试了2.6.18和2.6.22,编译后运行时老是出现visual address什么什么的错误,再网上也没查到原因,于是放弃了。linux2.6.14的移植也算比较顺利,Nand Flash、USB、NET、Yaffs等都很快弄好了。我是在业余时间做的,平时要上班,花了三个星期自己感觉也不算慢了。 3. 内核移植完了下一步当然是文件系统了,首先是移植Busybox1.6,然后建立目录结构、编写好linuxrc还有hosts、passwd等配置文件,在mtd上划出一个分区建立yaffs,把目录结构、Busybox等都copy过去,启动时用这个yaffs分区做根目录。具体的网上也有很多文章参考,这里就从简了。 4. 要使车体工作需要控制三个硬件: a. 红外测距传感器---车体的唯一一个传感器,最大探测距离80cm,负责探测车体周围的障碍物,车体上没有其他接触开关等传感器,所以车体的安全保障就靠它了。 b. 伺服器---负责带动红外测距传感器旋转,使它能探测到不同角度的距离,这里设计是前方140度范围旋转,也就是说能探测前方140度范围的障碍物的距离。 c. 直流电机---负责车体移动。通过了PWM信号驱动电机驱动板来调节车体的运行速度,前方障碍物距离远时运行速度可以快些,当离障碍物距离近时运行速度可以慢些或者停车。 5. 红外测距传感器输出的是模拟电压信号(当障碍物距离远输出电压低,当障碍物距离近输出电压高),所以要用到ADC,需要编写S3C2410_adc驱动。 6. 伺服器和直流电机都需要用到PWM信号,PWM信号是由定时器产生的,S3C2410有五路定时器,linux占用了一个,查看linux内核源码,确定是占用了timer4,其余的4个就可以选用了,选用timer0驱动伺服器,timer1驱动直流电机,分配好了立刻动手编写S3C2410_pwm驱动;车体运行除了要控制速度还需要控制方向(前进、后退、左转、右转等),需要通过I/O对电机驱动板进行控制,本来应该另外编写驱动程序来完成这些的,但考虑到控制对象是一样的(电机),而且控制方向和控制速度关系比较密切,所以把控制I/O的代码也写到S3C2410_pwm里面去了,用起来也方便。 7. 到此,内核和驱动都已经准备好了,下一步要实现的就是应用程序了,包括小车的行走模式、行走算法、障碍物探测等,使用了两个线程来完成这些任务: a. MeasureThread()---探测线程:主要实现伺服器在140度区间来回转动,带动红外测距传感器也随之转动;每转过一定角度就测量障碍物距离;根据测量结果通知MotionThread()做相应的动作,例如:前方障碍物距离在安全范围,通知MotionThread()前进;左前方有障碍物,通知MotionThread()往右转;前方障碍物距离比较近,通知MotionThread()减速,前方障碍物距离比较远,通知MotionThread()加速。通过全局变量Motion_status实现通信。 b. MotionThread()---运动控制线程:根据MeasureThread()设置的状态控制车体运动。当有障碍物时车体需要左转或右转以避开障碍物,当障碍物刚好在安全距离阀值附近时,会出现抖动(有障碍-à左转à无障碍à停à有障碍-à左转),这里采取了每次转动要至少保持一定时间(例如:200ms),在这段时间内禁止改变车体运动状态,通过互斥锁mutex_turning来实现这种同步。
此帖出自单片机论坛

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表