从晶元到人工智能

    返回首页    发表留言
本文作者:李德强
          第二节 技术方案
 
 

        我们准备完成一个比较完整的项目。所谓麻雀虽小,五脏俱全。整个项目大致分为以下几个部分:

  • 车体
  • 主控电路
  • 嵌入式程序
  • 通信协议
  • 上位机程序
  • 语音处理
  • Web服务平台
  • 数据库系统
  • 大数据平台
  • 人工智能系统

一、车体

        车体我们将采用一种由压克力板切割而成的小车底盘,这个底盘可以搭载四个电机车轮:

        采用这样的四个动力轮的话也是可以的,只不过在转弯时类似于坦克转弯,不是特别灵活。当然,我们也可以选用类似于汽车动力轮和转向轮的车架,这个结构由一个动力电机通过一个传动轴同时驱动两个后轮,再使用一个舵机对两个前轮进行方向控制:

        但实际上只需要使用两个动力轮再配合一个万向轮,完成比较顺畅的转弯功能,这样在结构设计上比较简单,而通过有效的控制程序来控制小车的运动。

 

二、主控电路

        对于小车我们采用了两个电机分别驱动两个后轮的结构,因此上小车在行进的路线则不会是一条笔直的直线。无论我们的电机和车轮安装的如何对称,无论选用两个型号和批次都相同的电机和车轮,对两个电机施加相同的电压,电机的转动速度也不会100%一致,即使在肉眼观察下两个轮子的转动速度一样,但在长时间的运动过程中,还是会有累计的偏差,随着时间的增加,偏差也就越大。此外,如果小车受到一些扰动,方向出现一定的偏差,那么小车将永远偏离原来的方向。

        解决小车无法走直线的问题也很简单,我们可以采用对小车航向的自动化控制来达到让小车走直线的目的。航向的自动化控制可以有很多办法,我们可以分别采用码盘和陀螺仪来测量小车的航向,然后对其做自动化控制。控制方法我们还是采用经典的PID,也就是人们常说的比例、积分、微分控制方法

        实际上,我们可以制作一个电路板,并编写相应的程序来完成小车控制的所有功能,但我们将采用控制与业务分离的外部控制结构来完成,如下图:

        做这样结构设计的好处是将底层系统与核心系统分离,程序设计也会有效的进行模块化分离,也就是控制系统与业务系统分离。

三、嵌入式程序

        由于采用了上述业务与控制系统分离的结构,因此我们需要完成两部分的嵌入式程序:

  • 底层电路系统中使用的是STM32官方提供的标准开发库STM32 StdPeriph Library,编译器为arm-none-eabi-gcc,采用C语言编写程序,负责传感器的数据采集和执行器的指令执行。
  • 主控系统中使用的是Arm架构的Linux操作系统,编译器为arm-linux-gnueabihf-gcc,同样采用C语言编写程序,负责所有的业务程序,例如:向上位机传输相应数据,响应上位机的动作指令,完成相应的业务功能,并对底层电路系统发送执行指令等等。

四、通信协议

        通信协议部分是各个模块之间通信的关键,就好似多个小岛之间的桥梁,负责每个模块之间的数据交换。我们需要完成的通信协议主要有四个部分:

  • STM32采集传感器数据使用I2C、GPIO通信
  • STM32对执行器(电机驱动芯片)控制使用PWM信号通信
  • STM32与NanoPi之间使用UART串口通信,需要自定义通信协议
  • NanoPi与上位机之间使用WIFI通信,需要自定义通信协议
  • 上位机程序与Web服务系统采用HTTP协议

        其它系统间通信我们采用主流的开发框架来完成,在后续文章中逐步介绍。

五、上位机程序

        上位机程序除了对下位机程序的控制和向Web服务端上报数据这样的基本功能之外,在UI层面上采用比较美观的图形化界面,在技术层面上我们还希望通过跨平台技术实现电脑端和手机端的上位面程序。为了达到这些目的,我们将采用Qt开发套件,完成可跨平台的图形化程序的开发,目标是通过一套源代码实现的上位机程序可以通过多平台编译的方式运行在电脑端和手机端或是平台电脑上,这里我们将以Linux、Windows和Android操作系统为例提供源代码和编译过程,而IOS系统暂不提供示例,但理论上是支持的。

六、语音处理

        我们的首要目标是实现通过语音对小车的行动进行控制,例如从最简单的几个运动指令:前进、后退、左转、右转、停止等等,到一些复杂的运动指令:转圈、跳舞等等。实际上,我们并不需要自己去完成语音识别的实现细节,如果完全自己去实现语音的录制、处理、傅立叶变换、训练、识别你会发现这是一项非常巨大的任务,而且最终的训练效果可能并不十分理想。因此我们还是采用目前国内比较成熟、准确率较高的科大讯飞语音服务接口。我们需要集成科大讯飞所提供的开发SDK到上位机程序中,来完成语音的识别过程。

七、Web服务平台

        Web服务平台我们将采用SpringBoot来开发一套Web系统,这套Web系统将部署在Apache的Tomcat服务器下。其中SpringBoot是一套快速开发和部署的JavaWeb开发套件,它简化了传统JavaWeb的开发、调试、部署、运行等工作,让Web系统快速完成从开发到上线的过程。

        通过Web服务平台的搭建,我们将一起学习Web服务的运行原理,什么时后台代码,什么时前台代码,什么是界面代码,什么是样式代码,学习它们是如何通过一套完整的框架整合在一起的,如何处理用户的请求,如何做出合理的响应,并为用户返回正确的结果。

八、数据库系统

        数据库系统实际上是为我们所有的数据信息做依托,为我们存储重要的数据信息。数据库技术在近年来发展迅速,从结构上讲主要分为结构化数据库和非结构化数据库。从技术上讲又分为独立数据库、分布式数据库。在众多数据库产品中,Oracle数据库是一款功能强大,应用广泛的商业数据库,当然它是收费的。相对于Oracle数据库,我们则选用支持GPL协议的开源结构化数据库MySQL。从个人使用角度来看它已经完全可以支撑我们整个开发项目。       

九、大数据平台

        随着互联网的不断发展,海量的数据不断的产生和消亡,传统的数据库技术并不适合存储这些海量的数据,例如:视频、音频、图像等各类数据,且是海量的。所谓海量数据,通常是指不断新增的数据,可能在一天中就产生几十GB或几百GB甚至几TB的数据,并需要快速的保存起来,以便后续进行统计或查询。近几年来人们提出大数据平台的概念,并通过云存储技术对大量的数据进行分布式的保存。

        目前一些开源的大数据框架通常都是部署在安装有Linux的服务器上,并通过网络将这些服务器连接在一起,这对于我们来说是非常方便的,我们并不需要自己去开发一套大数据软件系统,而是利用一些开源框架完成大数据平台的搭建。

十、人工智能系统

        与大数据平台类似,人工智能也在近年来成为人们所关注的焦点。事实上,目前的人工智能系统也并不像人们想像中的那样智能,而只是在特定的某个领域完成指定的工作。人工智能算法通常是采用数理统计学的各种算法,使用大量的数据对算法模型进行训练,这些用于训练的数据被称为样本,最终使算法中的各个参数趋于收敛,进而达到一个较为稳定的范围内。之后在这个特定的领域对新的数据进行分析预测。

        同样的,完全自行开发一套人工智能算法框架是非常困难的,我们还是需要采用一些开源框架,或是人工智能云服务,最终完成相关功能。

 

        实际上,在我们的小车项目中,Web服务系统、数据库系统、大数据平台、人工智能系统这四个系统并不是必要的,但我们需要通过小车项目对整个主流技术分支做相应的介绍,让读者对每一个环节的技术方向有一个大概的认识。

    返回首页    返回顶部
  看不清?点击刷新

 

  Copyright © 2015-2023 问渠网 辽ICP备15013245号