基于嵌入式AI处理器的图形化编程 机器人设计
第2章 图形化编程机器人整体设计分析
2.1系统需求分析
主要是明确硬件需求,同时兼顾软件需求。根据本文研究内容,对本设计机器人的嵌入式软硬件系统提出了一些需求:
(1)AI功能
性价比高且可学习性强的AI硬件平台。
(2)可移动性
为了方便用户的使用,增加产品的灵活性,硬件平台还需要具有无线通信功能,与上位机图形化编程软件无线连接来控制机器人。
(3)高集成
机器人体积小,机械结构简洁,方便组装学习,便于移动。
(4)端口资源可重构
虽然目前的嵌入式处理器具有高集成度和丰富的引脚数量,但是机器人应用于教学中对端口的需求是变化的,由于硬件系统固定的接口功能,导致系统对外部设备开放的端口资源是有限的,且端口的使用方法也是单一[5]。除了需要有足够的端口数量,还要具有丰富的端口类型。
(5)模块化和标准化
系统要具备模块化,在方便安装和使用的基础上,自由组合或更换所需的硬件模块。标准化是为了增强模块的通用性,适配更多的硬件模块。
(6)开放性
系统应具有一定的开放性,可以方便用户自行添加各式各样的通用模块,增强机器人嵌入式系统的柔性、可移植性,对创造创新提供有利的支撑。
(7)易用性
硬件平台应采用简单易用的使用原则,避开复杂的设计流程,便于初学者入门学习和开发人员快速开发。
2.2关键技术分析
目前人工智能是机器人深入发展的关键技术之一,AI使机器人能够模仿人类大脑的思维活动,比如推理、判断和证明。让机器人拥有思考和行动的能力,这离不开AI相关技术的支持。随着人工智能芯片(IC)的发展,机器人具有更高的计算能力。根据摩尔定律,单位面积上IC可以容纳的晶体管个数持续增长,促进了IC小型化,从而提升AI加速计算能力[6]。此外RISC-V 精简指令集架构等异构芯片的出现,也为提高人工智能芯片的计算能力提供了硬件支持。
2.2.1嵌入式AI
嵌入式是一种可适应应用并嵌入于装置或设备的专用计算机系统。嵌入式系统即软硬件结合体,最大特点就是可根据需求进行软硬件裁剪。而嵌入式 AI,则是一种让 AI 算法可以在终端设备上运行的技术概念,在把 AI 技术部署于终端设备的过程中,嵌入式技术至关重要[7]。
所谓的嵌入式AI算法, 主要是基于深度学习算法衍生的各种结构的神经网络模型。神经网络是一种通过模拟人脑的神经元感知器来实现类人工智能的技术。目前的CNN卷积神经网络模型(Convolutional Neural Network) 通过局部感受野以及卷积层的权值共享,降低整个神经网络的参数数量,大大减小网络的空间复杂程度[8],在资源受限的小型嵌入式平台中广泛应用CNN模型。卷积神经网络的概念体系如图2.1所示。
图2.1 CNN概念体系
嵌入式AI算法的工作过程如图2.2所示。首先,基于一些开源的AI算法和框架,例如深度学习,在PC端或服务器端去训练一种数据集,建立出神经网络算法模型。然后通过各硬件平台的模型转换工具,对模型的尺寸和参数做一些裁剪,转换成小模型并部署在终端上,这样设备端可以通过调用训练好的神经网络模型来快速实时地对新数据进行推理。
图2.2深度学习工作过程
2.2.2 MicroPython与图形化编程
满足现有人工智能算法运算能力的嵌入式硬件平台显然是不够的,对于图形化编程机器人应用还必须搭配一个完全可编程的平台。图形化系统设计带来了结合硬件平台的软件平台。由于嵌入式芯片具有较少的内存(RAM)和外存(ROM)资源,一般使用C/C++编程语言来进行开发,这样会使产品的二次开发变得复杂,往往需要花费大量时间来学习和掌握嵌入式系统的框架、结构以及API应用程序接口[9]。
MicroPython 是一种较为精密简化而且效率高的编程语言,它是由Python3 简化而来,附带Python标准库的子集,有效地优化和改善了微控制器,甚至是受限环境当中的运行状态[10]。PC端编写的python程序可直接在微控制器或嵌入式系统上运行,来完成对硬件底层的访问以及操控。简单来说,MicroPython 大致相当于运行在嵌入式芯片上的Python解释器,通过编写并运行Python脚本来对硬件进行操控。
(a)C/C++开发流程 (b)Micropython开发流程
图2.2 MicroPython和C语言开发流程对比
第3章 机器人硬件平台设计
考虑到嵌入式AI硬件设计的复杂性及可行性,本设计基于市面现有的硬件平台来开发。针对图形化编程机器人的需求分析,通过各大硬件平台对比和分析,结合本设计的特点,综合各方面来选择硬件平台,并对所选用的硬件平台及硬件资源进行详细介绍,最后根据机器人所需的其他外设如摄像头、电机等综合考虑并进行选型。
3.3硬件外设选型
3.3.1机器人摄像头
机器人摄像头是机器视觉系统必不可少的重要组成部分,主要根据处理器的配置支持来选型。K210带有数字视频接口(DVP),其特性如下:
(1)支持DVP接口的摄像头,DVP速度50MB/s。
(2)支持SCCB协议配置摄像头寄存器
(3)最大支持640480 及以下分辨率,每帧大小可配置, 不使用KPU的情况下最高可输入分辨率19201023
(4)支持YUV422 和RGB565 格式的图像输入
硬件平台集成了24P摄像头接口,可以连接的有OV2640、OV3660、OV5640、OV7740等标准24P摄像头,这几者主要区别是分辨率、帧率、输出的图像格式、工作频率等等,综合考虑功能、成本和适配性,最终选择了OV2640。
OV2640是OmniVision公司生产的CMOS图像传感器,具有200W像素,工作流程如图3.7所示,主要功能如下:
(1)输出图像格式包括RGB565、YUV以及压缩格式JPEG等。
(2)自动图像控制的功能包括对焦、白平衡、曝光等。
(3)根据功能配置图像的分辨率,输出帧率可调。
图3.7 OV2640工作流程
第4章 嵌入式系统软件设计
基于官方的底层固件,搭建可自定义的开发环境,采用开源C/C++工程框架及其图形化菜单配置整个工程,将MciroPython作为组件移植到工程中,封装所使用的机器人运动模块、无线图传等硬件驱动并注册为MicroPython模块,设计了人脸口罩识别的AI应用。最后与PC机进行串口连接,通过交互式解释器来运行输入的Python脚本。
4.1软件开发环境搭建
编程环境:基于官方固件进行开发,其支持多种编程环境包括底层的cmake开发环境、Python脚本的开发环境以及集成开发环境(IDE)。由于应用于机器人,预编译的固件不满足特定的使用场景,需要对固件进行定制,因此使用最基础的开发方式,在linux环境下使用命令行编程环境。
开发模式:官方的软件开发工具(SDK)支持两种不同的开发模式:实时操作系统和裸机系统,即FreeRTOS和Standalone。对于机器人应用要满足实时性及多功能的需求,因此采用FreeRTOS实时操作系统。根据官方资料及文档,通过git(分布式版本控制系统)拷贝下载固件,在固件的基础上配置SDK、toolchain,使用命令menuconfig(GUI菜单配置)配置工程、build(构建编译)、clean (构建清除)、flash(烧录)等等进行固件开发。
工程结构:固件采用开源C/C++工程框架,工程使用 CMake 进行组织,并且工程支持多个可配置选项,可以快速构建项目。最终工程结构如图4.1所示。
图4.1工程结构
4.2固件开发
4.2.1图形化菜单配置(menuconfig)
为适应不同的应用要求,无论在硬件方面还是在软件方面,嵌入式系统必须具有很强的可裁剪性,并且便于修改[18]。本质上来说就是在代码中添加一些宏定义或条件编译来实现的,即在嵌入式系统中都有一些配置文件,开发者可通过对一些配置常数的设置来选择使用或不使用的模块。由于配置项太多太繁杂,手工配置不太方便,因此使用图形化的配置工具menuconfig对整个系统进行裁剪,如图4.4所示。而menuconfig依赖Kconfig来对系统进行图形化配置,Kconfig 文件中包含要添加到menuconfig配置菜单中的一些配置信息及选项,这些配置选项可以通过图形化的方式选择或取消,取消模块不被编译,减小了模块所占用的系统内存。这样的图形化配置更加的直观,代码健壮性更强,也不会去干扰其他的业务逻辑。
图4.4 menuconfig图形化界面
第5章 图形化编程机器人系统测试
本章在前面对嵌入式软硬件平台的搭建及应用测试完成的基础上,结合图形化编程软件进行系统测试。软件界面如图5.1所示,左侧为模块区,中间为程序构建区,右侧为MicroPython程序显示区,左上方橙色栏有“项目”选项和颜色选项,右上方“圆点”图标表示打开摄像头图传,“三角形”图标表示保存程序并运行传输工具。
图5.1图形化编程软件界面
软件除了包含循环、逻辑、运算、变量、数组、函数等基本程序结构模块,还有网络连接模块、机器视觉模块等等,也有基本的硬件IO操作,如图5.2所示。
图5.2 IO程序块
文章底部可以获取博主的联系方式,获取源码、查看详细的视频演示,或者了解其他版本的信息。
所有项目都经过了严格的测试和完善。对于本系统,我们提供全方位的支持,包括修改时间和标题,以及完整的安装、部署、运行和调试服务,确保系统能在你的电脑上顺利运行。