目录

1、项目概述

2、应用场景方案

2.1、崎岖地形探测方案

2.2、震后救灾搜寻方案

2.3、科研探险勘测方案

2.4、工厂巡检预警方案

3、控制系统方案

3.1、远程控制方案设计

3.2、蓝牙控制方案设计

3.3、人机交互方案设计

4、硬件系统设计

4.1、机械结构的设计

4.2、主控芯片的设计

4.3、数字舵机的选型

4.4、WIFI模块接口电路设计

4.5、蓝牙模块接口电路设计

4.6、语音播放芯片外围电路设计

4.7、语音识别芯片外围电路设计

4.8、手势识别接口电路设计

4.9、 远程视频模块

4.10、各种传感器

5、软件系统设计

5.1、步态的设计和动作编写

5.2、上位机的程序编写

5.3、下位机的程序编写

5.4、蓝牙控制APP设计

5.5、语音控制程序设计

5.6、手势控制程序设计

5.7、液晶显示界面设计


很多计算机专业大学生经常和我交流:毕业设计没思路、不会做、论文不会写、太难了......

针对这些问题,决定分享一些软、硬件项目的设计思路和实施方法,希望可以帮助大家,也祝愿各位学子,顺利毕业!

项目专栏:7天搞定毕业设计和论文

对计算机技术感兴趣的小伙伴请关注公众号:美男子玩编程,公众号优先推送最新技术博文,创作不易,请各位朋友多多点赞、收藏、关注支持~       


1、项目概述

本设计主要是基于单片机的六足机器人控制系统设计,综合分析六足机器人的结构、步态和控制算法,结合云端服务器、WIFI技术、蓝牙技术、语音识别技术和手势识别技术进行多种控制模式的设计,并提出不同应用场景的不同构建方案。

本系统的硬件设计分为主控板和舵机控制板两部分。主控板主要负责各种控制模式的数据处理和显示,舵机控制板主要负责舵机转动角度的控制,两板通过串口进行数据的交互。主控制板采用STM32F103VET6芯片,舵机控制板采用STM32F103R8T6芯片,两者都基于ARM的Cortex M3内核进行设计的。主控制板的硬件电路设计主要有启动电路、晶振电路、下载电路、复位电路、稳压电路以及各个模块接口电路。在Altium Designer16软件中进行原理图的绘制和PCB的绘制,打样后进行焊接并完成整体的测试。

本系统的上位机主要是手机APP,其开发环境是Android Studio,采用C#作为云端开放平台语言,JAVA语言作为移动客户端设计语言,通过JAVA语言的编写实现手机客户端的数据接收和发送,最终实现基于云端和蓝牙的控制系统上位机板块的设计。本系统下位机的软件设计是在Keil5编程环境下进行的,参考STM32F1的手册和各个模块的数据手册进行程序的编写,最终实现云端控制、蓝牙控制、语音控制和手势控制这四种控制系统设计。

项目资源下载请参见:基于STM32实现六足机器人控制系统

2、应用场景方案

本系统硬件部分预留出模块或传感器的通信接口,采用模块化配置的方式来设计检测部分,用户可以根据不同的任务,不同的场景进行不同的模块搭配,通过不同的传感器进行数据的采集,可以实现温湿度、有毒气体、可燃气体、生命图像、坐标位置等等数据的采集,从而达到不同场景不同功能。 

2.1、崎岖地形探测方案

 本系统在不添加其他模块配置的情况下即可实现复杂地形的探测功能,因为该六足机器人因为本身的六足结构可以非常灵活在崎岖地形运动,然后其本身还带有远程视频模块,因此可以实现远程视频实时显示并可以通过云端实现远程的控制。所以,只要是在一些有网络但道路崎岖的地形,都可以让该六足机器人进行现场的探测,用户可以在远程进行现场的观察。

2.2、震后救灾搜寻方案

该六足机器人如果需要运用于地震后的救灾搜寻工作中则需要进行个别传感器和模块的搭配配置。比如生命探测模块、GPS模块和声音探测器等等。通过生命探测器可以对地震后的地面进行生命的搜寻,由于它可以灵活行走在一些工作人员无法进入的地方,所以很大程度上提高了搜寻的效率及面积。一旦检测到有生命,马上通过GPS模块进行定位,然后通过云端把坐标发送到工作人员的手机客户端,从而实现精确的灾后生命搜寻定位功能。除此之外,还可以通过声波的检测来判断是否有生命。当然,还可以通过它来进行食物的运输或者仪器的运输。

2.3、科研探险勘测方案

该六足机器人如果需要运用在科研上进行探险勘测,则需要根据工作人员需要进行添加特定的检测模块。比如,在一些辐射比较大的地方或者地形险恶的地方,科研人员无法进入,则可以让该六足机器人进入进行勘测,然后科研人员远程进行现场的勘测。在此基础上科研人员只要搭配对应的采集模块或者对应的传感器即可,比如要检测某矿物质,则搭配检测该矿物质的传感器。

2.4、工厂巡检预警方案

该六足机器人如果想要运用在工厂上进行远程巡检预警,可以在其身上搭载对应的巡检检测模块,尤其是一些常年存在有毒气体的化学工厂。一旦运用了该六足机器人,工作人员可以大大提高自己的身体健康质量。工作人员不需要实地去考察,他只需要在远程对六足机器人进行控制,然后手机客户端可以实时显示现场的环境各种指标以及调用摄像头进行现场的图像显示。

3、控制系统方案

3.1、远程控制方案设计

远程控制方案是基于云端的控制方案,是结合最新的云端技术进行开发的方案。本系统的舵机控制系统与控制模式选择的控制系统是分开来设计的,因此在对远程控制方案进行设计的时候,我们只需要关注WIFI模块如何与云端服务器连接,手机APP如何与云端服务器连接,手机APP如何与主控制板的WIFI模块进行数据交互。

该六足机器人结构上搭载的WIFI模块与主控板的主控芯片是用串口接口进行数据交互的,然后根据查阅相关AT指令,发送或接收相关AT指令可以配置WIFI模块,配置完成后便可使用无线透传模式来传输数据。数据的流动过程是先从手机APP开始的,手机APP通过WIFI将数据发送到远端服务器,然后云端服务器做转发的作用,将数据通过互联网发送到六足机器人所在的局域网的路由器,然后路由器再一次进行转发将数据发送到六足机器人机械结构的WIFI模块上,WIFI模块通过串口将数据传输到主控芯片,主控芯片对数据进行解析,解析完成后发送相关的动作组指令到舵机控制板,最终实现机器人相关动作组动作。

远程控制方案是结合当前最新的技术进行开发的,只要六足机器人所在区域有网络,用户的手机在世界任何地方通过手机流量即可实现远程控制。再加上六足机器人搭载视频模块可以进行远程监控,因此可以实现真正的远程控制,这为后面的运用在不同场景下的方案设计起到很大的作用。当然,这也是本设计在控制系统方面重点要设计的内容。

3.2、蓝牙控制方案设计

蓝牙控制方案是在调好的舵机控制板的基础上进行进一步的控制系统设计。本人独立完成手机端APP的设计,并实现手机客户端蓝牙跟舵机控制板的蓝牙模块进行通信的功能,然后舵机控制板的蓝牙模块收到手机端的数据后再把数据通过串口通信传输给舵机控制板,从而实现对应的点控或者联动控制。与此同时,通信是双向的,因此舵机控制板在收到数据后可以把数据通过蓝牙模块发送到手机客户端,从而实现应答功以保证数据传输的稳定性。除此之外,手机客户端还可以采集舵机控制板上的电源模块的电量,进而实现电量的实时显示和及时提醒用户进行充电。

蓝牙控制系统的设计方案非常适用于没有网络的地方,这样的端对端的短距离的无线通信方式不仅可以脱离传统的红外手柄控制,而且可以大大提高在近距离无网络状态下的控制稳定性。

3.3、人机交互方案设计

本系统在实现远程云端控制和短距离蓝牙控制的基础上再添加了语音识别和手势识别功能,一方面是综合考虑控制系统方案的稳定性,以防止在远程云端和短程蓝牙都出故障的情况下系统仍然可以正常工作,另一方面是可以大大提高用户的人机交互效果,从娱乐的角度来说很大程度上提高了用户的体验效果,丰富了机器人的人机交互功能。实际上,通过语音识别和手势识别的控制系统方案设计,系统的稳定性可以一定比例的提高,这也是从整体的稳定性考虑的。

语音识别控制系统方案是通过语音识别芯片进行语音的采集,然后将采集的信息转换成文本的形式,再通过控制芯片进行转换,控制芯片将数据传输给主控芯片,主控芯片对数据进行解析处理再传给舵机控制板,舵机控制板对信息解析并执行对应的动作,从而实现对六足机器人的语音识别控制。

手势识别控制系统方案是通过手势传感器进行手势数据的采集,将人的手势动作采集后进行解析,然后把解析的结果传送到主控芯片,主控芯片对数据进行处理,最后传给舵机控制板,从而让相关动作组发生对应的动作。

人机交互方案非常适用于远程云端和短程蓝牙出故障的情况或者娱乐性比较强的场合,这样的人机交互方式不仅可以提高系统的稳定性,而且在人机交互上大大提高了用户的体验感觉。

4、硬件系统设计

4.1、机械结构的设计

足式机器人一般是两条腿、四条腿、六条腿和八条腿,两条腿和四条腿平衡问题不太好解决,而八条腿不够灵活,因此采用六条腿的结构。六腿结构的机器人动作的时候每次都有三条腿作为支撑点,因此比较稳定。本系统的结构分为躯体和肢体两个部分,躯体主要用来盛放控制板、传感器和电池,而肢体主要分为六个腿,每条腿有三个自由度,也就是每条腿有三个舵机,因此整个系统需要对十八个舵机进行协调控制。本系统的机械结构并非自主设计的,因为主要的任务不是机械结构的设计,所以采取定制机械结构的方法来实现机械机构的搭建。整体的机械结构图如下图所示,每个腿都有三个舵机,一共6条腿,最后组成整个六足机器人的整体机械结构。

4.2、主控芯片的设计

主控制板采纳STM32F103VET6作为主控芯片是因为该芯片性能较好,而且拥有多种通讯接口,比如USART、IIC和SPI等等。对于舵机控制板采用的是STM32F103RBT6,该芯片也是STM32F1系列的,但由于舵机控制板仅仅需要对18个舵机进行控制以及预留3个串口进行其他通信,因此STM32F1RBT6完全足够。舵机控制板主要是通过PWM进行占空比的调节从而实现舵机的角度调节,根据舵机转动的角度,再进行18个舵机的整体协调来实现对应的动作。当然,因为舵机控制板需要对动作进行存储,因此还用到了该芯片的存储器,其128K的程序存储器已经足够。主控板跟舵机控制板的通信是通过串口进行通信的,之所以分开而不采用一个板子是因为考虑到后期的功能扩展性以及考虑程序编写的方便性。这样分开后,只要两个板子直接设好对应的波特率以及写好通信的协议即可实现两者之间的数据通信,项目的开发效率可以大大提高。

4.3、数字舵机的选型

本系统采用的是LDX-218的数字舵机,只要发送一次信号就能锁定角度不变,这也就降低了程序编写的难度。因为模拟舵机须要持续发送PWM才能保持锁定角度。除此之外,模拟舵机还存在精度较差、线性度不好的缺点,而数字舵机可以提高控制精度、提高线性度以及响应速度比较快。该数字舵机工作电压是6-8.4V,转动的角度是180度,对于六足机器人来说已经足够。该舵机的PWM调节角度周期是20ms,且成线性关系。

4.4、WIFI模块接口电路设计

本系统采用ATK-ESP8266 WIFI模块,该模块是串口WIFI模块,只要通过串口发送AT指令即可对ATK-ESP8266 WIFI模块进行配置。该模块有AP模式、STA模式和AP+STA模式,电路的设计主要是在接口电路的设计,将预留的串口接口与ESP8266芯片对应引脚连接,最终实现两者之间的正常通信。

4.5、蓝牙模块接口电路设计

蓝牙模块是基于TLSR8266F512 芯片进行研发的低功耗 BLE 射频模块,其通信方式是通过串口发送AT指令来通信,因此使用非常方便。具体的配置流程只要参考AT指令及模块使用手册发送相关AT指令即可建立通信。本接口电路也是需要把串口接口留出来,其他的就是CC2540芯片的基本电路设计,比如复位电路、晶振电路等等。

4.6、语音播放芯片外围电路设计

语音播放模块负责语音输出,比如六足机器人的语音输出和音乐的输出。本设计一开始采用的是语音合成技术,就是将文本输出为语音,但是这类方法一方面存在离线库覆盖量不够大而导致有些字无法合成的缺点,另一方面的缺点是合成的语音听起来非常别扭,语速语调都存在一定的缺陷。综合考虑之后,我们觉得采取直接播放音频的方式进行语音播放。这样的方式可以规避语音合成技术存在的两个缺陷。用户只要把自己想要播放的音乐以及录好的语音音频存到SD卡里面,然后对语音播放模块发送相关指令即可实现相关语音的播放或者相关音乐的播放。 

为了方面扩展与通信,本系统采用的语音播放模块依然是通过串口进行通信,这样的处理方式不仅非常适合本系统,而且对以后的扩展性也是非常重要的。语音播放模块是直接与舵机控制板进行连接的,这样可以实现在动作的同时进行语音播放,两者并不会产生冲突。这也是为什么把舵机和多种控制模式的数据处理分开。只要主控制板发送指令给舵机控制板,舵机控制板在执行相关的动作时也会通过串口发送指令,这样就可以实现语音的播放功能。

本电路主要是语音播放芯片SYN6288的外围电路以及通信接口的设计,具体的电路图如下。

4.7、语音识别芯片外围电路设计

本系统采用的是YS-V0.7模块,该模块集成STC11L08XE和LD3320两款芯片。LD3320芯片主要负责语音的采集和识别,通过这个芯片的处理可以将采集到的语音信息转换成文本的形式,然后将这个处理过的信息发送到STC11L08XE芯片。STC11L08XE芯片主要负责信息的处理和串口转发功能。本芯片的外围电路设计是需要跟STC11L08XE芯片进行通信,语音采集后是先经过STC11LO8XE芯片处理后才与主控板进行通信。本电路的设计主要是LD3320芯片的外围电路,具体如下。

4.8、手势识别接口电路设计

人机交互模式需要用到手势的识别技术,因此需要搭配手势识别传感器。本系统主要采用ATK-PAJ7620和APDS-9960两款手势识别传感器。这两块手势识别传感器都是通过IIC协议来通信的。这两款传感器可以识别9种手势,其中本系统主要用到的有上、下、左、右、前、后这6种手势。本电路设计是对外围电路和接口电路的设计。

4.9、 远程视频模块

一开始本系统打算采用常见的智能小车摄像头进行视频监控,但是这类摄像头基本不开源,这对本系统的开发造成了很大的麻烦。而市面上开源的摄像头模块基本都不支持远程传输,因此不能进行云端的控制。经过综合分析,最后决定定制威视达康这家公司的摄像头。这个摄像头可以进行远程的监控,还留出了SDK接口给开发者进行调用,因此非常有利于项目开发。这个摄像头可以自由地上下左右旋转,基本可以全方位覆盖监控范围,还支持夜视、录像等功能。

4.10、各种传感器

  • 红外传感器

    本系统如果需要进行红外避障的时候可以考虑搭配此传感器进行避障。该传感器对光线的适应能力相对较强。通过发射红外线并接收反射的信号来判断前面是否有障碍物。本模块属于数字量开关,数据处理后出来的只是高低电平的数字量。因此,主控板只要用一个引脚进行采集高低电平即可判断前方是否有障碍物。

  • 声音传感器

   声音传感器主要是根据声音的震动原理来判断声音的有无或者特定声音频率的声音,正是这样的原理,本系统可以使用在抢险救灾的工作中,通过声音传感器来判断灾后地区是否还有人。这个传感器输出形式是数字量,也就是高低电平,有声音的时候高电平,没有声音的时候低电平。因此使用非常方便,只要主控板用一个引脚进行采集即可实现声音的判断。这也就是让六足机器人在听觉上有了一定的补充。

  • 光敏传感器

   本系统如果在某些场合需要进行采光判断,那么这个传感器无疑是最好的选择。该光敏传感器能够监测周边的光照强度,还能感知光源方向。此传感器也是开光量的输出形式,因此通信方法和上面的传感器类似。

  • 超声波传感器

   本系统如果需要进行距离测试或者避障,则需要搭配超声波传感器。此传感器采用 IO口TRIG触发测距,传感器自动发送8个40khz的方波,实时监测有返回的信号,则产生高电平,且持续一段时间。

  • 温湿度传感器

本系统可以搭配DHT11传感器进行环境的温湿度检测。DHT11传感器有四个引脚,其中电源、地、信号线和一个悬空的。信号的传输是单总线的形式进行串行传输。

  • 气体传感器

本系统在对环境气体进行检测时可采用不同的气体传感器,比如需要检测CO的话则选择MQ-7 CO传感器,比如检测空气质量情况则选择MQ-135模块。用户可以根据自己的检测需求搭配对应的传感器。

5、软件系统设计

本系统采用的是Keil uVision5软件进行六足机器人的控制系统设计,并使用C语言进行程序编写。除此之外,程序采用 C#语言,以 Visual Studio作为 IDE,在 Windows环境下进行初步开发云端平台Net core跨平台应用程序,使用Android studio软件开发平台来实现监控操作系统平台APP的编程。

5.1、步态的设计和动作编写

通过大量的调查和分析,我们知道六足机器人一般有三足步态、四足步态和波动步态。综合考虑本系统的机械结构的稳定性,决定采用三足步态进行设计。本系统首先对步态进行分析,然后自主设计出前进、后退、左侧走、右侧走、左转、右转这六个基本步态,然后其他的动作都是基于这六个基本步态进行改变和组合而成,因此对基本步态的分析和设计具有很大的意义。下面将展示两个典型步态的设计流程,其余的步态设计流程类似。

首先,本系统先对前进步态进行设计。综上可知,本系统采用的是三足步态的设计,机器人的运动过程中由一边前腿、后腿与另一边中腿构成的两部分,一部分的三条腿先动作,另一部分的三条腿做支撑,正是这样的三足步态交替动作才能实现机器人的稳定移动,具体的流程如下图所示。前进的步态有9足步态图,从A到I,其中黑色的空心圆的腿代表的是支撑的动作,也就是这条腿的状态是与地面接触的,而红色的斜杆的腿代表抬起动作的腿,也就是这条腿的状态是离开地面的。

其次,本系统对右转步态进行设计。具体的设计流程如下图,同样是黑色的空心圆的腿代表的是支撑的动作,也就是这条腿的状态是与地面接触的,而红色的斜杆的腿代表抬起动作的腿,也就是这条腿的状态是离开地面的。

六足机器人的动作组编写是基于上述的步态设计来实现的。动作组编写可以通过上位机进行调试,而上位机的编写是根据PWM调节占空比的原理来编写的,因此采用上位机可以快速方便地对机器人的动作进行编写,这非常有利于提高开发的效率。通过上位机来找到合适的值,然后程序里面可以参考这个值来进行编写,这样的方法非常有利于机器人动作的编排。 

5.2、上位机的程序编写

上位机主要是手机APP的编写,然后APP跟下位机协商好通信协议即可实现两者之间的数据交互,以下两张图是手机APP的界面图。

手机APP是用户管理和控制机器人的人机交互的界面,它的主要功能是控制机器人端的各种动作,各种参数的输出与录入、机器人端与云端服务器连接状态的显示等等。互联网的主要功能是充当设备端与云端监控平台数据传输的媒介,主要负责将设备端的传感器数据与自身系统的参数回传到远端监控平台,同时,也可以将云端监控平台的控制命令发送到设备端。设备端即是六足机器人本身,其主要负责相关动作的执行以及特定环境下的信息采集工作,并对数据进行处理加工后,通过网络反馈到远端检测平台,还有负责接收来自云端的控制命令等等。

5.3、下位机的程序编写

远程控制模式是基于云端进行远程控制的,六足机器人身上搭载ESP8266WIFI模块,通过WIFI连上云端服务器,然后手机也联网,通过这样的方式来实现远程控制。这一块的程序是实现STM32F103VET6芯片与WIFI模块的数据交互,并配置相关的AT指令来设置STA模式中的TCP-CLIENT模式。

整个工程里面有两个文件是与WIFI相关的,一个是common.C文件,另一个是WIFISTA.C文件。下面是WIFI配置的流程图。

在common.C文件里面首先是需要写好路由器的名称和密码。具体设置如下:

const char* WIFISTA_ssid="AAAA";        //连接路由器

const char* WIFISTA_encryption="wpawpa2_aes"; //连接加密方式

const char* WIFISTA_password="88888888";       //连接密码

然后进行WIFI模块的连接,程序如下:

while(ATK_8266_SEND_CMD("AT","OK",20))        //检查WIFI模块是否在线

{

ATK_8266_quit_trans();//退出透传

ATK_8266_SEND_CMD("AT+CIPMODE=0","OK",200);  //关闭透传模式

Show_Str(40,55,200,16,"未检测到模块!!!",16,1);

delay_ms(800);

LCD_Fill(40,55,200,55+16,BLACK);

Show_Str(40,55,200,16,"尝试连接模块...",16,1);

}

while(ATK_8266_SEND_CMD("ATE0","OK",20));

连接一旦成功后,将进入这个函数:ATK_8266_WIFISTA_TEST(),并由此跳入到WIFISTA.C文件。进入ATK_8266_WIFISTA_TEST()函数后,首先需要做的是配置工作模式为STA模式,配置完成后需要输入云端服务器的IP地址和端口号来连接。

这样,WIFI的配置过程就完成了,建立了连接后剩下的就是调用对应的串口函数进行数据的发送和接收,然后分析处理接收到的数据,处理结束后传输对应的机器人动作指令来实现动作。

5.4、蓝牙控制APP设计

本系统采用的蓝牙模块也是通过串口进行通信的,其配置过程和WIFI类似,也是通过发送相关的AT指令便可配置蓝牙模块。六足机器人可以用无线的方式与手机APP进行数据交换。通过对应的API连接到蓝牙设备,从而实现点到点和多点无线功能。综合考虑系统的稳定性,我们将蓝牙模式直接连接在舵机控制板上,这样可以保证主控制板出现故障是六足机器人依然可以正常动作。之前在舵机控制板上有预留串口接口,因此非常适合直接与蓝牙模块进行串口通信。控制板接上蓝牙模块后对相关AT指令配置后便可通信。本部分主要介绍蓝牙APP的程序编写过程。

首先,配置启动蓝牙,检查当前模块是否已经启用蓝牙。其次,连接六足机器人,为了与六足机器人身上的蓝牙模块进行连接,我们需要协调服务器端和客户端机制,让APP开放服务器套接字,而机器人端的蓝牙模块发起两者的连接。最后是接发收数据,成功连接后,APP会有一个已连接的BluetoothSocket值。这样的现象表明可以进行数据的共享了。

下图是手机APP蓝牙部分的界面图,主要模拟游戏手柄做了一个摇杆,然后还有一些按钮进行点动控制。蓝牙控制模式主要分为工作模式和娱乐模式,不同的模式有不同的动作组进行编排。

5.5、语音控制程序设计

语音识别部分主要是两款芯片,一款是语音识别芯片LD3320,另一款是数据处理芯片STC11L08XE。LD3320芯片的各种操作都是通过配置相关的寄存器来实现的,寄存器读写操作有 4 种方式,分别是软件并行、硬件并行、软件串行SPI和硬件串行SPI。通过查阅寄存器的手册我们可以对我们想要的功能进行配置。语音识别过程大致是先语音识别用初始化,然后写入识别列表,再者开始识别并准备好中断响应函数,最后打开中断允许位。我们这里使用的是中断的方式来进行触发,一旦收到语音才会触发中断而执行对应的程序。

首先,语音识别初始化的程序如下:

void LD_INIT_ASR()

{  

NLD_MODE=LD_MODE_ASR_RUN;  

LD_INIT_Common();

LD_WRITE(0xBD,0x00);  

LD_WRITE(0x17,0x48);

delay(10);

LD_WRITE(0x3C,0x80);

LD_WRITE0x3E,0x07);

LD_WRITE(0x38,0xff);

LD_WRITE(0x3A,0x07);

LD_WRITE(0x40,0x00);

LD_WRITE(0x42,0x08);

LD_WRITE(0x44,0x00);

LD_WRITE(0x46,0x08);     

delay( 1 );

}

其次是语音识别列表的程序,截取部分如下:

    uint8 LD_ASRADDFIXED()

{

   uint8 k, flag;

   uint8 NASRADDLEN;

   #define DATE_A 20   /*数组二维数值*/

   #define DATE_B 100 /*数组一维数值*/

   uint8 code SRECOG[DATE_A][DATE_B] =

{"xiao hei",\

 "ting",\                   "qian jin",\    

          ......

"gei da jia chang shou ge" };

uint8 code PCODE[DATE_A] =

{  CODE_CMD,\  

CODE_STOP,\

CODE_FORWARD,\

......

CODE_SING}; /*添加识别码*/

flag = 1;

for (k=0; k<DATE_A; k++)

{

if(LD_Check_ASR_b2() == 0)

{

flag = 0;

break;

 }

 LD_WRITE(0xc1, Code[k] );

 LD_WRITE(0xc3, 0 );

 LD_WRITE(0x08, 0x04);

 delay(1);

 LD_WRITE(0x08, 0x00);

 delay(1);

for (NASRADDLEN=0; NASRADDLEN<DATE_B; NASRADDLEN++)

  {

  if (SRECOG[k][NASRADDLEN] == 0) break;

LD_WRITE(0x5, SRECOG[k][NASRADDLEN]);

  }

 LD_WRITE(0xb9, NASRADDLEN);

 LD_WRITE(0xb2, 0xff);

 LD_WRITE(0x37, 0x04);

 }

       return flag;

}

最后呈现出来的是开始识别的程序,具体如下:

uint8 LD_Run()

{

EX0=0;

LD_WRITE(0x35, MIC_VOL);

LD_WRITE(0x1C, 0x09);

LD_WRITE(0xBD, 0x20);

LD_WRITE(0x08, 0x01);

delay( 1 );

LD_WRITE(0x08, 0x00);

delay( 1 );

if(LD_Check_ASR_b2() == 0)

{

return 0;

}

LD_WRITE(0xB2, 0xff);

delay( 1);

LD_WRITE(0x37, 0x06);

delay( 1 );

LD_WRITE(0x37, 0x06);

delay( 5 );

LD_WRITE(0x29, 0x10)

LD_WRITE(0xBD, 0x00);

EX0=1;

return 1;

}

5.6、手势控制程序设计

手势识别这块的程序的难点主要在于IIC协议,一般来说IIC有两种,一种是硬件IIC,一种是软件IIC。经过我们的分析,我们发现STM32的硬件IIC存在一定的BUG,所以我们决定采用软件IIC,也就是按照手册的要求来模拟IIC的时序,通过模拟时序来达到IIC通信的效果。

首先,我们需要对手势识别模块进行初始化,PAJ7620u2_INT()这个函数就是用来进行初始化的。在这个函数里面,有两个函数非常重要,一个是IIC初始化函数GS_IIC_INIT(),另一个是唤醒传感器的函数PAJ7620u2_WAKEUP()。

具体的IIC时序模拟主要是在GS_IIC_INIT()这个函数里面进行配置,这里我们不展开来论述,主要是想讲一下手势识别的处理函数。因为本系统是分开两个控制板来进行控制的,一个专门负责舵机的控制,一个负责各种传感器或者模块的控制,因此手势识别功能采用的是点动控制的形式。手势传感器负责手势的识别和信息的采集,然后通过IIC把信息传给主控板上的主控芯片,主控芯片进行处理,然后发送对应的动作组指令给舵机控制模块,这样即可实现手势识别功能。主控芯片的数据处理程序如下:

while(1)
{   status = GS_Read_NByte(PAJ_GET_INT_FLAG1,2,&DATA[0]);		 
if(!status)
	 {   
		GESTURE_DATA1 =(u16)DATA[1]<<8 | DATA[0];
		if(GESTURE_DATA1) 
		{
			switch(GESTURE_DATA1)
			{
				case GES_UP: 
					  GESTURE_SEND_BUF[4]=0x01; break; //向上
				case GES_DOWM: 
					  GESTURE_SEND_BUF[4]=0x02; break; //向下
				case GES_LEFT: 
					  GESTURE_SEND_BUF[4]=0x07; break; //向左
				case GES_RIGHT: 
					  GESTURE_SEND_BUF[4]=0x08; break; //向右
				case GES_FORWARD: 
					  GESTURE_SEND_BUF[4]=0x14; break; //向前
				case GES_BACKWARD:  
					  GESTURE_SEND_BUF[4]=0x19; break; //向后
				case GES_WAVE: 
					  GESTURE_SEND_BUF[4]=0x0A; break; //挥动
				default: 
					  GESTURE_SEND_BUF[4]=0x00; break;}	
           for(i=0;i<7;i++)
			 {   USART_SENDDATA(USART1, GESTURE_SEND_BUF[i]);		
		        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);				     }	}}			

5.7、液晶显示界面设计

本系统为了保证系统的稳定性,最后决定在六足机器人身上再装载触摸屏进行触摸控制,这就确保在无线控制设备出现状况时可以维持机器人的正常动作。本系统决定改用VGUS的组态屏,这个屏主要是通过寄存器和变量存储器来进行配置,同时可以配合上位机进行图形化界面的美化处理。

 项目资源下载请参见:基于STM32实现六足机器人控制系统

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐