AURIX TC264 智能车实战:GPS 航点导航 + 摄像头循迹怎么搭出来的
摘要:本文介绍一款基于 Infineon AURIX TC264D 的智能车软件架构:GPS 航点导航、MT9V03x 摄像头循迹、IMU 航向保持、IPS200 多级菜单在线调参。适合智能车 / 电赛方向同学参考,完整工程已开源。
1. 项目背景
全国大学生智能汽车竞赛等赛题里,常见两类需求:
本项目在同一辆车上做了 「GPS 导航 + 视觉循迹 + IMU 辅助」 的融合方案,底层基于逐飞科技(SEEKFREE)开源库,业务代码集中在自写的 code/ 目录,用屏上菜单实现 不烧录也能改 PID。
开源仓库
https://github.com/shuifanyu/TC264-GPS-Vision-Car
2. 硬件平台
| 主控 | Infineon TC264D(AURIX TriCore,双核) |
| 开发板 | 逐飞 SEEKFREE TC264 通用主板 |
| 驱动 | TC264-GTM 无刷驱动板(自制 PCB) |
| 摄像头 | MT9V03x 灰度 |
| IMU | IMU963RA(9 轴) |
| GPS | GNSS 模块(UART3) |
| 显示 | IPS200 TFT(SPI) |
| 执行器 | BLDC(GTM 驱动)+ PWM 舵机 50Hz |
| 交互 | 按键 + 拨码;可选 X6F 遥控接收机 |
3. 软件架构总览
3.1 开发环境
- IDE:AURIX Development Studio (ADS)
- 编译器:Tasking C/C++
- 底层库:逐飞 zf_common / zf_driver / zf_device / zf_components + Infineon iLLD
- 导入工程:ADS → Import → Existing Projects → 选择仓库中的 ALL_THE_LAST_2025_7
3.2 模块划分(code/)
| GPS.c/h | NMEA 解析、航点 Flash 存储、多路径、航向跟踪 |
| Image.c/h | OTSU 二值化、中线提取、转向输出 |
| Agorithm.c/h | 位置式 / 增量式 PID |
| IMU_1.c/h | IMU963RA 读取与姿态 |
| Menu.c/h | 状态机多级菜单,参数实时修改 |
| GL_Math.c/h | 轻量 sin/cos/atan2/sqrt、低通滤波 |
| Common_Peripherals.c/h | 电机、舵机、按键、LED、遥控等封装 |
3.3 中断与主循环分工
工程里用 CCU6 定时器中断 拆任务,避免主循环里做重计算导致节拍抖动:
| CCU60_CH0 | 20ms | IMU 采集与姿态 |
| CCU60_CH1 | 5ms | 按键扫描 |
| CCU61_CH0 | 5ms | GPS / 惯性导航计算 |
| UART3_RX | 回调 | GNSS 数据接收 |
主循环大致是:
core0_main() {
/* 初始化 GPS、舵机、BLDC、IPS200、IMU、按键等 */
/* 启动 CCU60 / CCU61 定时中断 */
while (1) {
GPS_parse(); /* 解析 GPS 报文 */
Menu(); /* 刷新菜单与显示 */
}
}
设计取向:中断里做「周期确定、耗时可控」的采样与轻量控制;菜单刷新、字符串格式化等丢进主循环。
4. 核心功能拆解
4.1 GPS 航点导航
能力
- 最多 3 条路径,每条最多 16 个航点;
- 航点写入 Flash,断电不丢;
- 解算当前位置到目标点的 距离、方位角,用 PID 控舵机转向;
- 到达阈值内(工程里常用 <1 m 量级)自动切下一个航点。
思路示意
GNSS 串口数据 → 解析经纬度 → 与当前航点比对
→ 计算目标方位角 / 距离
→ 方位误差 → PID → 舵机
→ 距离 < 阈值 → next waypoint
实践建议
4.2 摄像头循迹(OTSU → 中线 → PID)
处理链路:
MT9V03x 灰度图
→ OTSU 自适应阈值二值化
→ 按行/区域扫边界
→ 加权中线(重点区域权重更高,例如核心区 ×3)
→ 一阶低通平滑
→ 误差 e = 中线 – 图像中心
→ PID(或 PD)→ 舵机
为什么用 OTSU
室内外光照变化大时,固定阈值很容易「整屏白」或「整屏黑」。OTSU 按直方图把前景/背景分开,适应性更好。
中线加权
靠近车头的几行往往比远处更有「立刻要打角」的信息,给更大权重可以降低远处干扰。
低通
原始中线跳变会让舵机发抖,一阶低通:
[
y_n = \\alpha x_n + (1-\\alpha) y_{n-1}
]
(\\alpha) 过大跟手但抖,过小平滑但滞后,需要跟舵机响应一起调。
4.3 IMU 航向辅助
- IMU963RA 约 20ms 周期采样;
- GPS 有效时以导航解算为主;
- 信号差时用 IMU 航向「顶住」,避免失控乱转。
4.4 PID:速度环与转向环分工
竞赛车里常见分工:
| 电机速度 | 增量式 PI/PID | 编码器反馈,输出 PWM 增量,抗积分饱和更友好 |
| 舵机转向 | 位置式 PID / PD | 输出绝对打角,结构直观 |
| GPS 航向 | 位置式 PID | 方位角误差 → 舵机 |
调参习惯(工程向):
4.5 IPS200 多级菜单
- 状态机 / 表驱动,覆盖 GPS、IMU、舵机中值、电机速度、摄像头相关参数;
- 按键选择、确认,参数写入 Flash;
- 调试期价值极高:改参 → 立刻跑 → 再改。
5. 踩坑记录
| GPS 城市/树荫下失控 | 丢星、漂移 | 信号质量判断 + IMU 航向保持 |
| 循迹白天好、阴影差 | 固定阈值失效 | 改 OTSU,检查曝光/安装高度 |
| PID 每次烧录太慢 | 参考写死在代码 | 菜单在线调参 + Flash |
| 中断偶发卡死 | 优先级/嵌套不当 | 重计算放主循环,理清 CCU 优先级 |
| 舵机抖 | 中线噪声 / D 过大 | 低通、减 D、查舵机死区 |
| Flash 航点异常 | 掉电写坏 / 地址冲突 | 写校验、分区规划 |
6. 工程里可复用的小设计
轻量数学库 GL_Math
嵌入式里 math.h 可能偏大,自写 sin/cos/atan2/sqrt + IIR,Flash 更省。
Flash 数据管理
若浮点存储不便,可做定点化(如 double → int32 保留固定小数位)再读写。
菜单绑定参数表
参数名、地址、范围、步进做成表,加新参数不用改一堆 if-else。
底层库与业务代码分离
libraries/ 尽量不动,竞赛逻辑全在 code/,升级库时冲突少。
7. 源码与扩展
完整 ADS 工程见:
https://github.com/shuifanyu/TC264-GPS-Vision-Car
目录要点:
ALL_THE_LAST_2025_7/
user/ # cpu0_main、isr
code/ # GPS / Image / Menu / PID / IMU …
libraries # 逐飞 + iLLD
开源说明:基于逐飞 SEEKFREE 库二次开发,请遵循其 GPL-3.0 协议;本文代码片段为示意,以仓库为准。
8. 小结
这套智能车软件的关键词可以概括为:
- 双核 + 定时中断 保证控制节拍;
- OTSU + 加权中线 + 低通 稳住视觉循迹;
- GPS 航点 + PID + IMU 补航向 覆盖户外导航;
- 菜单 + Flash 把调参效率提上来。
如果你正在做智能车 / 电赛,建议优先打通:编码器速度环 → 摄像头循迹 → 菜单调参,再上 GPS,体验会顺很多。
参考
- 逐飞科技开源库与文档(SEEKFREE)
- Infineon AURIX TC264 相关手册与 iLLD
- 本项目 GitHub:TC264-GPS-Vision-Car
作者:shuifanyu
标签:智能车 AURIX TC264 SEEKFREE GPS导航 摄像头循迹 PID 嵌式 电赛





