It’s been a long time…
简介
本项目是基于 STM32 + 树莓派 的智能车视觉感知与运动控制系统,采用上下位机分层架构,融合了 计算机视觉(OpenCV)、嵌入式、前后端可视化与AI目标检测 等技术栈。可以做到线路识别、闭环控制、陌生人物检测与上传统计。
效果
STM32智能小车(久经沙场)
树莓派上位机系统
Nextjs 大屏
行人检测
后台管理界面
架构
整个项目主要由四个部分组成,均已在Github开源:
- RaspVisionCar: Python | 上位机源代码。运行在树莓派中。主要包含Flask web面板、SerialIO与下位机通信、OpenCV双赛道线识别。
- RaspVisionCar-STM32: C语言 | 下位机源代码。运行在STM32。实现 PID + 前馈控制器 的电机速度与转向控制。特别优化了串口通信,使用环形数据缓冲区。IMU姿态解算。
- roboinspector: TypeScript | Nextjs框架的前端大屏,实时展示Yolo层的结果
- roboinspector-api Python | 前端大屏的前置api。处理来自树莓派上位机的Camera流。Yolo v8 + Bot Tracker 目标检测。Postgre数据库的记录。

开发过程
STM32
这个项目是在今年 9 月份开始的,11月完成整体的软硬件设计,没有参考其他现有的小车项目。硬件买了现成的模块自己瞎组装的。软件部分全部是我自己设计的,
3月份继续开发,加入了Yolo目标检测与Nextjs层。

同时,这也是我第一次从软件转型硬件开发。体验了一下后,比起EE我更加坚定了走CS这条路。感觉到了EE是相当封闭的行业,对于投机者,机会并没有CS那么多。
比如,CS对个人一定是存在轻资源的机会,而EE却是重资源的。
并且国内EE比较偏向制造业/消费电子,待遇存疑。C语言模电数电FPGA单片机Linux这一套,虽然相对变化小,但是收益率也不高。我个人也不是特别感兴趣。
硬件部分
车架直接买的轮趣科技的R3X,前面一个万向轮,后面两个驱动轮。带了两个轮趣的MG513X电机,以及TB6612驱动板。
小车使用STM32F103作为下位机,主要用来进行电机的控制,包括了前馈和PID反馈控制器。
我让树莓派通过daplink与stm32连接,在树莓派使用OpenOCD并启动一个gdb服务器,实现了wifi无线烧录与无线调试。但测试下来,树莓派必须与PC连在同一局域网。如果用普通家用路由器组网的话,连接挺稳定的。但是我用我的IPhone11开个人热点,连接偶尔(非常偶尔)会抽风。
IMU选择了ICM42688,虽然很多人都在使用MPU6050
差不多中间好像因为进到了HardFault_Handler中断,SysTick
参考 keysking的教程 实现了串口指令的环形缓冲区接收方式。
Web面板在上位机运行。mjpg摄像头视频流,并且可以控制前后左右,以及前进速度、转向速度。
树莓派运行OpenCV算法,以及一个Web界面
-480¥