# Education **Repository Path**: domicj/education ## Basic Information - **Project Name**: Education - **Description**: 2020教育机器人智能搬运代码 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2020-10-11 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Domic - 教育机器人代码 ## freeRtos实时操作系统 ## 框架说明 ### BSP 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 App层是开发层内容,本套代码包含人机交互界面(OLED),电机行为控制,以及传感器检测和任务逻辑编写。 appInit文件是整个任务的开始,包含gui任务,循迹决策任务,电机行为任务的初始化,flash初始化。 moving.c文件为电机行为任务,接受来自决策层的指令进行电机的运动,同时配置循迹传感器以及电平的读取接口,该任务不允许使用延时,会严重影响电机的时效性。 trackDecisionLevel.c文件,是决策层,通过建立的坐标系执行不同的指令,该层可以使用延时进行线程阻塞,确保完成相应的动作。 gui.c文件实现了人机交互界面,本次人机交互界面包含了色块位置的选择,推环时间的确定,已经debug模式下可改变舵机的速度从而加快调试的效率。 ### Driver driver层作为对应传感器的相关驱动,例如超声波,以及电机驱动编写。 ## 总结 这次比赛,由于对传感器不熟悉,黄管发送的红外光导致推环无法正常使用编码器(一种计算轮子速度和距离的红外扩展传感器),因此决赛完全使用了调节延时的时间保证精度,因此只做到了1个10环4个9环,尽管避障传感器可以起到一定作用,但是黄管依旧有盲区,最好是可以采用通信的方式进行优先级的一个决策,这样路径还可以更好的优化,时间还可以缩短。推环可以通过数灰线以及改变检测传感器的位置来实现。循迹探头的间距会影响循迹的稳定性,并且舵机在不同电压,相同占空比速度有可能不同,这可能是因为舵机比较老,速度越低,这个影响更大。 推环的方案建议用爪子抓,后退时 调试的时候尽可能在比赛场地调节好红外传感器的电位器。 gui界面将所有的调车参数都从flash里面读,不需要代码来改动。 多辆车的话一定要封装好一套代码,以防止下错代码。最后,不要现场改代码!!!