自主驾驶 Donkey Car:TensorFlow MobileNetV2 实现垃圾识别与拾取
项目概述
将标准 RC 车(树莓派 + Pi Camera)改装为自主垃圾收集车。采用两个轻量神经网络:实时目标检测 + 转向油门行为克隆。受限于 Pi 3 内存与算力,仅能串行运行单模型,故采用时间片轮转在检测与驾驶间切换。
核心思路:训练模型识别垃圾桶 → 驾驶车辆靠近 → 自主拾取垃圾。
两大阶段
- 目标检测 – 适度卷积网络处理 Pi Camera 视频流,TensorFlow + OpenCV 推理
- 行为克隆 – 模仿人类转向油门操作学习自主导航。额外传感器(超声波、GPS、6轴 IMU)丰富训练数据与遥测
引言
MobileNetV2 (2019) 专为嵌入式设备设计。树莓派 3 CPU 可流畅跑 MobileNetV2 SSD,而 YOLO 等重模型需过大内存。尝试跑 VGG16 (约 350MB 权重) 在 Pi 上失败,印证轻量模型必要性。迁移学习预训练 MobileNetV2 SSD 可在极小体积下获得高精度。
硬件改装
基车为 Magnet RC 车,改装为 DonkeyCar 底盘。关键改动:
- 拆解顶盖接触接收机、ESC、舵机
- 安装两个 3D 打印适配器替代原装卡扣
- 木板固定树莓派与专用舵机控制器
- 舵机控制器经 I²C 连接转向 (通道 0) 与油门 (通道 1)
- 加装 6轴 MPU6050 IMU、GPS 模块、HC-SR04 超声波 (需 5V 电平转换)
最终车载传感器套件:
- 单目广角 Pi Camera
- 舵机控制器
- 6轴 IMU (加速度+陀螺仪)
- GPS 户外定位
- 超声波测距避障
所有传感器数据带时间戳经 tub 框架记录,增强训练集。
软件环境搭建
软件栈精简高效:TensorFlow、OpenCV、少量 Python 工具。分步安装指南:
1. 安装 TensorFlow、OpenCV 与依赖
pip install tensorflow[pi]
pip install matplotlib raspberry
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install qt4-dev-tools
pip3 install opencv-python
TensorFlow 需自有模型格式,使用官方 TensorFlow Models 仓库 并设置 PYTHONPATH:
git clone --recurse-submodules https://github.com/tensorflow/models.git
export PYTHONPATH=$PYTHONPATH:/home/pi/tensorflow1/models/research:/home/pi/tensorflow1/models/research/slim
2. 安装 Protocol Buffers 编译器
ProtoBuf 用于加载 MobileNetV2 SSD 权重。
sudo apt-get install autoconf automake libtool curl
wget https://github.com/google/protobuf/releases/download/v3.5.1/protobuf-all-3.5.1.tar.gz
tar -zxvf protobuf-all-3.5.1.tar.gz
cd protobuf-3.5.1
./configure
make
make check
sudo make install
cd python_export
python3 setup.py build --cpp_implementation
python3 setup.py test --cpp_implementations
sudo python3 setup.py install --cpp_implementation
export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp
export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION=3
sudo ldconfig
protoc --version
3. 集成 IMU 与 GPS
在 meta.json 与 manage.py 注册 MPU6050 采集加速度与陀螺仪数据:
{
"inputs": ["cam/image_array", "user/angle", "user/throttle", "user/mode",
"imu/acl_x", "imu/acl_y", "imu/acl_z", "imu/gyr_x", "imu/gyr_y", "imu/gyr_z"],
"types": ["image_array", "float", "float", "str", "float", "float", "float", "float", "float", "float"]
}
安装依赖库:
sudo apt-get install python3-smbus
pip install mpu6050-raspberrypi
pip install RPi.GPIO
4. 收尾
deactivate
sudo shutdown -h now
重启后即可运行 SSD MobileNetV2 目标检测与行为克隆自主驾驶模型。
总结
融合轻量神经网络与丰富传感器,树莓派 3 可靠检测并收集垃圾桶,为低成本可扩展自主垃圾收集铺平道路。
制造工艺