"""
第八届全国大学生集成电路创新创业大赛设计报告
1. 系统架构分析
1.1 总体介绍
1.1.1 依托开发套件
- 本次参赛作品依托于AWC_C4 FPGA开发套件,利用Quartus18.1版本开发。
- 作品模拟自动仓库管理系统,通过摄像头识别到仓储物品的信息,控制机械臂实现物体的吸取和归类放置。
1.1.2 实现思路
- 图像部分:固定放置摄像头传感器,拍照获取到区域内的图像信息。通过控制筛选阈值将图像二值化,得到对应颜色物块的二值化图像以实现颜色的分类,得到物块颜色信息。计算出物块中心坐标,并传输到板卡中用于机械臂控制。
- 机械臂部分:配置板卡资源控制机械臂,通过运动学解算进行路径规划,使用板卡的串口发送字符串命令信息,再通过Zlink通信模块输出至总线舵机用以控制舵机旋转角度和动作维持时间。
1.2 精度要求
1.2.1 精度要求不高
- 将区域划分为3X4的小型区域,根据摄像头传输的位置信息,发送固定的指令转动底部舵机,机械臂运转到划分区域。优点:减少了对摄像头实时运算的时间。缺点:精度不足,易吸取到物块的边缘区域。
1.2.2 精度要求高
- 需要对摄像头传输的信息做实时处理,并基于返回的物块中心坐标值精准实时控制五舵机角度以吸取物块中心点,并规划路径实现速度最优方案。
1.3 板卡主体部分
1.3.1 SDRAM存储
- 使用sdram存储各物块中心点位置信息,使用状态机将各物块位置分别设为一个状态,串口通信模块按一定顺序输出各状态命令。
2. 关键技术分析
2.1 图像部分
2.1.1 图像采集和储存算法
- 图像采集和储存算法的编写,二值化的阈值仍需调试。
2.1.2 图像二值化算法
- 图像二值化算法的编写,二值化的阈值仍需调试。
2.1.3 腐蚀膨胀算法
- 腐蚀膨胀算法的编写,用于降低噪点的影响提高识别精度。
2.1.4 像素点计算算法
- 像素点计算算法的编写,用于得到物块的图形种类信息。
2.1.5 图像边缘检测算法
- 图像边缘检测算法的编写,用于提高识别精度。
2.1.6 中心点坐标计算算法
- 中心点坐标计算算法的编写,用于传输到板卡中用于机械臂控制。
2.2 机械臂部分
2.2.1 串口通信算法
- 串口通信算法的编写,通过串口发送字符串命令信息。
2.2.2 运动学正逆解公式
- 运动学正逆解公式的编写,用于路径规划。
2.2.3 基于坐标路径规划算法
- 基于坐标路径规划算法的编写,实现速度最优方案。
3. 实现进度
3.1 图像部分
- 图像部分,已实现了图像的采集和二值化算法的编写,二值化的阈值仍需调试。
3.2 机械臂部分
- 机械臂部分,已实现了按键实现串口通信模块的编写,并测试出了吸取3x4各个区域中物块的所有动作组,只需使用串口将命令依次发出就能实现难度一的要求。
4. 程序思路
4.1 机械臂部分
4.1.1 动作组测试
- 通过提供的上位机平台调试出了难度一的共12组动作数据。
4.1.2 串口通信模块
- 串口通信模块分为按键消抖模块KeyFilter和单字节串口发送模块uart_byte_tx。
4.1.3 状态机主程序
- 状态机主程序的编写,用于按键消抖和串口发送。
4.2 物体识别部分
4.2.1 基本设计思路
- 引入IP核PLL,配置sdram和i2c驱动的时钟信号。
- OV5640模块,利用IIC模块初始化摄像头的配置,配置成功后输出init_done信号。Sdram初始化和系统复位后,系统进入工作状态。
4.2.2 图像处理流程
- 将OV5640获取到的8位像素点信息cam_data传入cmos_capture_data模块,转换为16位的RGB565的颜色数据,存入cmos_frame_data。
- Rgb2ycbcr模块:将cmos_frame_data中红色、绿色、蓝色(分别对应cmos_frame_data[15:11],cmos_frame_data[10:5],cmos_frame_data[4:0])取出,放到img_blue[4:0],img_green[5:0],img_red[4:0]中,并将其转化为ycbcr格式的图像数据。
- binarization模块:示例代码(以黑色检测为例):always @(posedge clk or negedge rst_n) begin if(!rst_n) monoc <= 'h0; else if((luminance < black_Y_high)&&(luminance > black_Y_low)&&(color_cb < black_Cb_high)&&(color_cb > black_Cb_low)&&(color_cr < black_Cr_high)&&(color_cr > black_Cr_low) ) //阈值 monoc <= 8'hff; //阈值内,将其变为白色 else monoc <= 8'h00; //与之外,将其变为黑色 end 在时钟上升沿,判断此时的的像素点是否在设定的阈值内。例如,判断是否为黑色物体,判断是否满足预设的阈值,若满足,将其设为白色;若不满足,设置为黑色。由此,实现得到处理后的二值化图像。
4.2.3 图像滤波处理
- module filter_3x3 模块:在filter_3x3模块中,定义一个3x3的7位数组寄存器,用于后续图像滤波处理中队图像数据的遍历。
- erode 模块:腐蚀算法,对3X3窗口实行相与的操作,只要处理的数据窗口中存在黑色部分(值为0),整个窗口数值变为0,也即实现黑色的“腐蚀”。
- Dilate 模块:膨胀算法,对3X3窗口实行相或的操作,只要处理的数据窗口中存在白色部分(值为1),整个窗口数值变为1,也即实现白色的“膨胀”。
4.2.4 图像存储和显示
- 将处理后的图像存入模块sdram中,实现动态存储当前处理后的图像数据。
- 添加VGA驱动模块核VGA显示模块,用于调试物体识别的准确性。
4.3 调试结果
- 配置好摄像头OV5640,得到图像信息并能够显示在VGA显示屏上。经过二值化计算和腐蚀膨胀的滤波处理以后,能有二值化图像输出。但在调试过程中发现,二值化的图像收到环境光、设备等影响较大,图像处理结果不理想,未能得到各个颜色的阈值信息,从而区分出不同颜色的物体。




