# FOFController **Repository Path**: mortyliu/FOFController ## Basic Information - **Project Name**: FOFController - **Description**: FOF(404)控制器设计仓库 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-01-09 - **Last Updated**: 2022-04-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # FOF 控制器项目 ## git clone 项目方法 工程使用父子Git结构管理,为了一次性完整的clone下整个工程,使用下述指令 ```sh /*首次clone 仓库*/ git clone https://gitee.com/mortyliu/FOFController.git --recursive ; cd ./FOFController; git submodule foreach git checkout master; /*拉取最新提交*/ git pull --rebase git submodule update //或者到每个submoudle 执行 git pull --rebase 解决conflict /*提交改动*/ 1.到子仓库提交改动 2.回到父仓库提交改动信息 ``` **git submodule foreach git checkout master**: 拉取所有子仓库的master 分支; ## 文件夹结构 FOFController_MCU_Frameware: MCU domain 代码 FOFController_MCU_Hardware: MCU 硬件设计 FOFController_UpperCom_Frameware: 上位机 代码 ## 使用开发工具 MCU 硬件设计: KiCad MCU 域代码使用: STMCubeMx6.4.0 生成 代码,然后进入CLion 配置开发 编译器:arm-none-eabi-gcc / arm-none-eabi-g++ 烧录和Debug软件:OpenOCD stlink 逻辑分析仪:Seleae 上位机 开发使用: CMake 组织 Qt5 + Matlab开发 尽量满足多平台支持 ## 系统架构 #### MCU 域架构 ![img](./readme.assets/image-20220112230013250.png?version%3D1642002493909) ##### BSP: BSP下半部采用CubeMX生成硬件驱动,提供GPIO控制、通讯总线控制、系统时钟配置、中断配置、DMA控制器配置API。(自动生成) BSP上半部通过二次封装HAL库提供接口,屏蔽一定的底层操作逻辑,向上提供所有传感器的读取写入、配置、总线操作、系统控制A$$PI。(自己实现) ##### Middleware: * System View:提供系统运行状态追踪的服务,可以通过Tracer工具查看系统运行时对于中断、任务调度、临界区访问相关的状态。(移植) * freeRTOS: 使用freeRTOS的任务调度器组件 。(移植) * ROS Messag: 负责ROS消息包发送和接收;消息队列内存的管理;丢包检测和错包检测。(自己实现) ##### APPs/Tasks: * 系统控制算法 * 控制系统输出滤波 * 传感器滤波算法 * 传感器数据融合算法 * 指令管理模块 * 其他任务 #### 上位机架构 ![image-20220112232137738](./readme.assets/image-20220112232137738.png) ##### 前端: 主要负责图形绘制、函数绘制、图形化交互功能 ##### 后端: 1. QT的图形化界面框架支持上位机的图形界面服务 2. Matlab提供的数学工具对输入的离散数据进行FFT等信号变换运算服务;Simulink 仿真滤波器服务 3. 实现ROS 消息管理器,对MCU传输的数据进行实时解析 ##### 主要任务 1. 解析MCU数据,对传感器和执行器的数据可视化展示 2. 对传感器和执行器数据进行时域和频域分析 3. 仿真滤波器对现有信号进行拟真处理,查看滤波器导致相位延迟和滤波后信号 4. 配置MUC端控制参数 5. 解析MCU端上发数据 ### 上发数据格式 #### 测试阶段数据格式 数据用;隔开。 mag_x ;mag_y ;mag_z ; acc_x ; acc_y; acc_z; | 传感器 | 数据 | | -------- | :----------------------------------------------------------- | | IST8310 | mag_x
mag_y
mag_z | | BMI160 | acc_x
acc_y
acc_z
gyro_x
gyro_y
gyro_z | | ICM20602 | acc_x
acc_y
acc_z
gyro_x
gyro_y
gyro_z | | BMP280 | air pressure
temperature | | ······ | | ### 加速度计和磁力计 的椭球拟合 因为加速度和磁力在局部地区的值是方向不变,大小恒定的,所以将传感器三轴转动后,测量到的三维坐标点应该在一个球面上,同时三轴应该正交。 普遍采用的最小二乘法,通过梯度下降获得最小误差。 #### 对于轴正交和对齐的模型 轴对齐的椭球标准方程 (1.1) ​ $(\frac{x-O_x}{R_X})^2 + (\frac{y-O_y}{R_Y})^2+ (\frac{z-O_z}{R_Z})^2 = 1$ (1.1) 展开 f(1) 获得多项式 (1.2) ​ $\frac{1}{R_x^2}x^2 + \frac{1}{R_y^2}y^2 + \frac{1}{R_z^2}z^2 + (-\frac{2O_x}{R_x^2})x + (-\frac{2O_y}{R_y^2})y + (-\frac{2O_z}{R_z^2})z + (\frac{O_x^2}{R_x^2} + \frac{O_y^2}{R_y^2} + \frac{O_z^2}{R_z^2} -1) = 0$ (1.2) 两边同乘 $R_x^2$ 获得多项式 (1.3) ​ $x^2 + \frac{R_x^2}{R_y^2}y^2 + \frac{R_x^2}{R_z^2}z^2 + (-2O_x)x + (-\frac{2R_x^20_y}{R_y^2})y + (-\frac{2R_x^20_z}{R_z^2})z+ O_x^2 + \frac{R_x^2}{R_y^2}O_y^2 + \frac{R_x^2}{R_z^2}O_z^2 - R_x^2 = 0$ (1.3) 可以将上式转化为矩阵形式 (1.4) $y^2A + z^2B + xC + yD +zE +F= - x^2$ (1.4) $\begin{bmatrix} y^2 & z^2 & x & y &z &1\end{bmatrix} \begin{bmatrix} A\\ B\\ C\\ D \\E \\F\end{bmatrix} = -x^2$ 可以变为 $X\theta = Y$ (1.5) 其中X 为样本矩阵,在本实验中为 m*6 矩阵,m为样本量, 6为样本特征,$\theta$为参数矩阵,是$6x1$ 向量 最小二乘 代价方程 $J(\theta)=\frac{1}{2}(X\theta - Y)^T(X\theta-Y)$ (1.6) 对$\theta$ 求偏导后,获得 $\frac{\partial{J(\theta)}}{\partial{\theta}} = X^T(X\theta - Y) $ (1.7) 式1.7 取0 时为最小二乘的 解 $\theta = (X^TX)^{-1}X^TY)$ 获得校准参数 #### 对于轴不对齐和轴不正交的模型 椭球模型 公式如下 $a_1x^2 + a_2x^y + a_3z^2 + a_4xy + a_5 xz + a_6 yz + a_7x + a_8y + a_9z =1 $ 对比轴对齐模型,有了二次交叉相 ### 磁力计矫正数据记录 ist_8310_calibrate_raw_data.xslx: ​ x\y轴 乘6.4 系数, ​ z 乘10 通过轴不对齐正交模型计算获得以下拟合参数 ![Screen Shot 2022-02-26 at 5.42.32 PM](/Users/mortyliu/gitee_my_project/FOFController/readme.assets/Screen Shot 2022-02-26 at 5.42.32 PM.png), soft_iron distortion 比较轻微,可以看到Soft Iron Calibrate Matrix 接近于一个对角矩阵 使用参数,获得以下结果 ![Screen Shot 2022-02-26 at 5.56.51 PM](/Users/mortyliu/gitee_my_project/FOFController/readme.assets/Screen Shot 2022-02-26 at 5.56.51 PM.png) 排除实验噪声和随机漂移,可以看到新的数据可以很好的和矫正后的数据拟合,soft_iron_distortion 矫正矩 已经接近一个对称矩阵。数据已经拟合为 一个球体。图中看到 ### 重力计校准 重力计和磁力计的矫正方法一致,都是使用 ### ARM Cortex-m7 DSP模块 ​