bsp层作为单片机配置功能的封装,包含GPIO,定时器,中断,SPI,flash,IIC以及PWM的封装。
typedef struct{ uint16_t isCatch; uint16_t runWay; //两种运行方式 uint16_t schedule; //任务进度 uint16_t carStatus; //车辆运行状态 uint16_t targetNumber; //完成任务次数 uint16_t carPointTo; //车头指向 uint16_t carId; //车辆ID Point_t carCoordinate; Point_t targetCarPosition[2]; //两个目标位置坐标 uint16_t specialIndex; //0左 1 右 uint16_t avoidFlag; uint16_t isCali; //推环是否校准标志位 uint16_t isUp; //爪子是否抬起 uint16_t openAvoid; u8 wayFlag; //0先抓左 1抓右 }Car_t;
App层是开发层内容,本套代码包含人机交互界面(OLED),电机行为控制,以及传感器检测和任务逻辑编写。 appInit文件是整个任务的开始,包含gui任务,循迹决策任务,电机行为任务的初始化,flash初始化。 moving.c文件为电机行为任务,接受来自决策层的指令进行电机的运动,同时配置循迹传感器以及电平的读取接口,该任务不允许使用延时,会严重影响电机的时效性。 trackDecisionLevel.c文件,是决策层,通过建立的坐标系执行不同的指令,该层可以使用延时进行线程阻塞,确保完成相应的动作。 gui.c文件实现了人机交互界面,本次人机交互界面包含了色块位置的选择,推环时间的确定,已经debug模式下可改变舵机的速度从而加快调试的效率。
driver层作为对应传感器的相关驱动,例如超声波,以及电机驱动编写。
这次比赛,由于对传感器不熟悉,黄管发送的红外光导致推环无法正常使用编码器(一种计算轮子速度和距离的红外扩展传感器),因此决赛完全使用了调节延时的时间保证精度,因此只做到了1个10环4个9环,尽管避障传感器可以起到一定作用,但是黄管依旧有盲区,最好是可以采用通信的方式进行优先级的一个决策,这样路径还可以更好的优化,时间还可以缩短。推环可以通过数灰线以及改变检测传感器的位置来实现。循迹探头的间距会影响循迹的稳定性,并且舵机在不同电压,相同占空比速度有可能不同,这可能是因为舵机比较老,速度越低,这个影响更大。
推环的方案建议用爪子抓,后退时
调试的时候尽可能在比赛场地调节好红外传感器的电位器。
gui界面将所有的调车参数都从flash里面读,不需要代码来改动。
多辆车的话一定要封装好一套代码,以防止下错代码。最后,不要现场改代码!!!
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。