简介
本项目属于机器视觉识别应用,旨在借助Atlas 200 DK开发板及其相机模块进行小车的视觉识别与控制。该系统能够使小车感知周围环境,它使用相机捕获实时视频数据,分析图像并返回控制数据给小车进行控制。本项目需要调用相机模块对周围环境的危险情况进行快速的识别并进行控制反馈,快速准确的识别对于车辆的安全至关重要,如何研究一个高响应高准确度的方案变得机具挑战性。
概述
该系统通过捕捉摄像头传回的实时视频帧,将实时图像作为网络的输入,推理出小车周围环境是否存在危险,从而进行运动控制对存在的危险进行规避,主要完成如下场景的应用:
1.桌面防跌落:检测并识别桌面桌面边缘,使得小车可以自主规避跌落。
2.目标障碍物避障:检测并识别障碍物,使小车可以自主规避障碍物。
原理
VSLAM 智能小车平台将由Camera Engine, Inference Engine, Post Processing Engine三部分组成。系统流程图如下所示:
首先,Camera Engine调用连接至Atlas 200 DK Hi3559C上的相机模块,实时获取环境视频帧信息。本项目中,相机分辨率设置为1280*720,视频格式设置为YUV420SP,视频帧率设置为5fps。
Inference Engine通过Graph接收来自Camera Engine的视频帧信息,首先使用DVPP模块对图片数据进行图像大小调整,从1280*720调整至模型需要的输入大小。接着将图片传递给离线模型处理,得到推理结果,最后通过Graph的SendData接口传输到下一个模块。这里共有两个离线模型,第一个模型使用ResNet18进行防跌落检测,第二个模型使用MobileNet进行目标障碍物检测,他们接收同一个Camera Engine发送的图片数据,但各自为独立的Inference Engine,且将数据传输给各自的Post Process Engine。
在Post Processing Engine中,模块接收神经网络推理结果,在原图像帧上画出边界框或显示分类结果,通过Presenter Agent向用户的Host端传输推理结果图片数据。首先,对于ResNet18后置的Process Engine,它根据结果判断是否为blocked状态。如果是,则发送转向指令来规避边缘区域,否则继续前进。对于MobileNet后置的Process Engine,它根据障碍物在图片中的位置,选择发送向左转或者向右转的控制信号。控制信号将通过ttyAMA0串口发往下位机Arduino。Arduino接收到来自Atlas 200 DK的控制信号,对控制信号通过一次PID处理,处理完毕后通过电机控制版进行电机的控制,从而达到了小车的运动与识别。
技术
- 基于Caffe的MobileNet-SSD框架。
- 基于Caffe的Resnet18框架。
硬件
- Atlas 200 DK 开发者套件(型号:3000)
- 树莓派相机模块
- 三轮小车底盘,包括电机控制板,Arduino DUE等