基于勘智 K210 实现的深度学习智能循迹车,使用 ESP32 搭建 HTTP 服务器提供 Web 页面用于小车的遥控控制。在 Google Colab 环境下使用 Keras 并基于 MobileNet 进行模型训练实现小车的自动横向驾驶。
为什么叫胡桃 (Juglans)?
- 叫胡桃而不是核桃是因为觉得胡桃会稍显独特,并且给我感觉更有人性,像一个人的昵称;
- 作为一辆车,我希望她像胡桃这个坚果一样坚固,毕竟调试过程中冲撞在所难免;
- 因为胡桃果仁的形状很像人脑,一直被很多人认为可以增长智慧,所以我也希望她可以像胡桃一样有着坚硬外壳的同时有着聪明的大脑。
运行环境
- K210: MaixBit
- MaixPy v0.6.2_73 minimum with kmodel v4 support
- ESP32: NodeMCU-32S
- IDE: VSCode+PlatfromIO
- Framework:Arduino
- Windows
- Python 3.8.3
- TensorFlow/Keras 2.7.0
- CUDA v11.5
- cuDNN 8.3.1
- Google Colab
- Python 3.7.13
- TensorFlow/Keras 2.8.0
- NNCase v0.2.0 Beta4
- 车模: PiRacer Pro AI Kit
项目结构
JuglansCar | |---Dataset | |---datax | | |---output | | | |---xxxx.jpg 处理过后的训练用图片 | | | |---output.csv 处理后的训练数据 | | |---xxxx.jpg 采集的原始图片 | | |---dataset.csv 采集的原始数据 | |---dataset.py 数据处理程序 | |---ESP32 | |---data 存放SPIFFS中的静态资源 | |---include 存放头文件 | |---src 存放源文件 | |---K210 | |---data 驾驶数据存放目录 | |---actuator.py 舵机以及电调驱动 | |---boot.py 配置K210 FPIOA | |---dataset.py 采集数据,可以自动从上一次编号继续 | |---main.py 主要逻辑控制程序 | |---model.kmodel 模型文件 | |---pca9685.py PCA9685驱动程序 | |---PINController.py 引脚相关驱动控制程序,包括按键、LED等 | |---receiver.py 接收并执行来自ESP32的控制命令 | |--- PCB | |---3D drawing 3D模型文件 | |---JuglansPCB 用于将K210与ESP32连接到小车驱动扩展板的PCB工程目录 | |---datasheet 绘制PCB所用到的数据手册 | |---Train |---calibrate 用于kmodel的量化与预测图片 |---data | |---xxxx.jpg 训练图片 | |---output.csv 训练数据 |---keras_applications 修改过的MobileNet |---kmodel_infer 储存使用kmodel预测出的二进制文件 |---model.h5 keras模型 |---model.tflite TensorFlowLite模型 |---model.kmodel kmodel模型 |---model_train.ipynb 模型训练程序 |---nnc Linux NNCase v0.2.0 Beta4 |---ncc.exe Windows NNCase v0.2.0 Beta4
项目地址见我的 GitHub。