这是一个基于Infineon CYT4BB微控制器的双核自动驾驶小车项目(MicroGraphy2.0)。项目使用IAR开发环境,采用双核架构实现导航控制和电机控制。
项目编是部分文件时 UTF-8 编码,一些文件的“锟斤拷”是因为不小心编码保存错误了,注释被影响,但问题不大,/test中的文件可能部分无法使用,后期修改的时候没有进行维护。不用理会imu_data_logger这些文件,那是为了拟合差陀螺仪时想提取的行驶数据,不过貌似不用了。
还是说一下当时的想法吧,想的是提取行驶中的温度,左右速度,两陀螺仪数据,时间戳数据,提取完成后进行建模拟合,用差陀螺仪数据去拟合好陀螺仪数据(可用差值或全值为目标),甚至不需要太好的鲁棒性,过拟合也可以,当时想的是简单的低维神经网络完全可以处理,芯片算力也够,但没有进行实践
- 使用IAR打开工程文件:
project/iar/cyt4bb7.eww - 双核工程配置:
- CM7_0核心:
project/iar/project_config/cyt4bb7_cm_7_0.ewp - CM7_1核心:
project/iar/project_config/cyt4bb7_cm_7_1.ewp
- CM7_0核心:
# Windows系统
project/iar/删除临时文件IAR.bat- 双核同时调试配置:
project/iar/project_config/cm7_0_cm7_1_debug.xml
-
CM7_0核心(底层数据采集和控制):
- IMU数据采集和AHRS姿态解算(1ms周期)
- 编码器数据读取
- 电机PWM控制(2ms周期)
- 向CM7_1共享数据(5ms周期)
-
CM7_1核心(高级算法和决策):
- 导航算法运算(5ms周期)
- 路径规划
- 控制指令传输给CM7_0
- 导航控制系统 (
nav_control_ahrs.h/c):基于航向角和里程的导航系统,支持路径点记录和回放 - IMU AHRS互补滤波 (
imu_ahrs_complementary.h/c):姿态解算 - 电机控制 (
motor_control.h/c):双PID控制(直行/转弯) - 双核通信 (
dual_core_comm.h/c):核间数据共享机制
位于 project/code/config/config_infineon.h:
- 导航参数:轮距0.134m,轮径0.065m
- 最大路径点数:2000
- 每点距离:4mm
- 控制周期:CM7_0(1-2ms),CM7_1(5ms)
project/
├── code/ # 用户代码目录
│ ├── config/ # 配置文件
│ ├── control/ # 控制算法(导航、电机、IMU)
│ ├── drivers/ # 硬件驱动(编码器、电机、imu感器)
│ ├── test/ # 测试模块
│ └── ui/ # 用户界面
├── user/ # 主程序入口
│ ├── main_cm7_0.c # CM7_0核心主程序
│ └── main_cm7_1.c # CM7_1核心主程序
└── iar/ # IAR工程文件
libraries/ # 逐飞科技提供的底层库
├── zf_driver/ # 硬件驱动抽象层
├── zf_device/ # 外设驱动库
└── sdk/ # Infineon SDK
- 生成测试路径(正方形/长方形/直线)
- CM7_0采集IMU和编码器数据,计算姿态和里程
- CM7_1执行导航算法,计算目标航向角
- 通过PID控制计算左右轮速度差
- CM7_0执行电机PWM输出
- 文件编码:代码文件使用GBK编码(中文注释)
- GPL3.0开源协议
- 基于逐飞科技CYT4BB开源库
- 验证惯导精度问题(已完成,4min内肉眼不可见偏差)
- 验证编码器在高速状态下的误差范围