我的第一个硬件项目:STM32树莓派智能小车

Code & Dev
AI-generated Summary OwO

测试

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层。

Contribution graph

同时,这也是我第一次从软件转型硬件开发。体验了一下后,比起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¥