/UIML

基于STM32和FreeRTOS的电控统一接口中间件库,仅通过修改配置文件即可适配各种机械结构,易上手易拓展,有随意拔插的模块管理机制和低耦合的模块间通信机制,目前主要用于RoboMaster比赛。本仓库跟随码云主仓库同步更新:https://gitee.com/tarsgo-embedded/UIML

Primary LanguageCGNU General Public License v3.0GPL-3.0

“只改配置文件就能让各种机器人动起来?试试 UIML 吧!”

项目简介

UIML为吉林大学TARS_Go战队统一接口中间件库(Uniform Interface Middlewares Library),旨在提高底层代码的复用率,避免重复造轮子,提高开发效率

本项目基于 FreeRTOS 在 STM32 平台上运行,由一个轻量级调度框架一系列周边模块构成,具有易上手、易操作、易拓展的特点,用户可以仅通过修改配置文件随意选用已有模块,或按要求自行编写其他模块

本项目特点

  • 与 Linux 内核驱动相似的模块管理机制
    • 低耦合、易增删的动态模块管理
    • 与 Json 文件相似的系统配置方式
  • 模块间通信主要使用观察者模式
    • 与 ROS 相似的话题订阅机制
    • 与安卓系统相似的广播机制
    • 与网络请求相似的远程函数机制

本项目最终目标

尽可能少写甚至不写代码,不同机器人间仅通过修改配置文件进行适配,或仅需添加少量上层个性化逻辑


项目结构介绍

整体结构

整个项目主要有核心模块周边模块两大部分

整体结构

核心模块

项目的核心模块有软总线模块和系统配置模块,是维持整个框架运行不可缺少的部分

  • 软总线模块:负责周边模块之间所有数据的传输,提供了广播和远程函数等功能 查看软总线说明
  • 系统配置模块:负责读取用户的系统配置,并负责触发各个周边模块的运行 查看配置模块说明

周边模块

周边模块是在核心模块基础上运行的用户模块,可由用户自行配置随意选用。周边模块被分成以下两大类:

  • 服务类模块:可自运行的模块
    • 服务类模块是可以自己运行的,一般包含一个持续运行的FreeRTOS任务,或可以由外设中断触发,因此可以向其他模块主动提供服务
    • 每个服务类模块都需要在配置文件中进行配置
    • 例如:串口驱动、底盘模块、遥控器模块等
  • 工具类模块:无法自己运行的模块
    • 此类模块无法自行运行,不包含FreeRTOS任务,也不能由外设中断触发,其作用是被服务类模块通过函数接口直接调用,作为服务类模块的工具使用
    • 工具类模块没有在配置文件中的独立配置,而是通过服务类模块进行配置
    • 例如:滤波模块、PID计算模块、电机模块等

文件目录

项目中几个一级文件夹的作用:

  • conf:系统配置模块和用户配置文件
  • softbus:软总线模块
  • services:服务类模块
  • tools:工具类模块

开发指南

详细的开发说明请移步 UIML开发指南 进行查看,其中包含了使用步骤、开发说明、开发规范、注意事项等详细内容


Todo List

已完成进度

  • 系统模块
    • 系统配置模块
    • 软总线模块
    • 离线检测模块
  • 数学计算模块
    • 斜坡函数
    • PID计算
    • 一阶滤波
  • 外设驱动模块
    • CAN通信模块
    • 串口模块
    • SPI模块
    • IIC模块
    • TIM模块
    • USB虚拟串口模块
    • 外部中断模块
  • 设备驱动模块
    • 遥控器驱动模块
    • 蜂鸣器音乐模块
    • INS模块
      • bmi088驱动
      • MPU6500驱动
      • IST8310驱动
      • JY901驱动
    • 电机模块
      • M3508
      • M6020
      • M2006
      • PWM电机
      • 直流电机
    • 裁判系统模块
  • 运动控制模块
    • 底盘模块
      • 麦轮底盘
      • 舵轮底盘
    • 云台模块
    • 射击模块
    • 机械臂模块
  • 上层决策模块
    • 云台-底盘综合控制

参与贡献

  1. Fork 本仓库
  2. 提交代码
  3. 新建 Pull Request