一、项目简介

1、研究现状:

    随着5G时代的到来,智能化产品的应用场景更加多元化,而智能小车作为一种集合多种功能为一体的智能移动装置,现在已逐渐应用于军事、医疗、物流、家居等各个领域。目前国内智能小车运用较多的有物流行业中的AGV(Automated Guided Vehicle)小车、农业中智能蔬果采摘机器人。

2、研究意义:

    智能小车可以在各种各样的环境下高效工作,这将为人们的生活提供高质量的服务,甚至代替人类去恶劣的环境下完成一些勘测任务,如本项目将要完成的迷宫寻宝任务

3、研究目的:

(1)通过设计智能小车,培养并实现自动控制系统的能力,在实践过程中熟悉STM32单片机的运用。灵活运用相关学科的理论知识,联系实际电路设计的具体实现方法,加深对理论的理解和认识。

(2)优化小车控制系统,减少小车与地面的接触面积,使小车能够在更多、更复杂的环境下工作。

(3)通过本项目培养自主思考和动手能力,培养论文撰写能力和专业思考能力。

4、研究内容:

    本项目将操纵智能小车实现迷宫寻宝的功能,该小车由旭日X3派和STM32F103联合实现。主要研究智能小车能够实现前进、后退、左右转、刹车、上坡等功能,同时在底层增加红外模块进行循迹,增加超声波模块进行探测。在项目研究后期,我们将使用二轮电机进行小车的操控,在小车轮子和摄像头上尝试使用舵机。

5、项目特色:综合学习调用蓝牙模块、遥控模块、红外模块、上坡PID算法调节、超声波模块完成小车的完整操作,使用上下位机器协同操作。适用于多场景的小车。

6、创新点:

(1)第一代的小车能够顺利完成电赛要求的协同跟随、启动上坡、循迹送药等等功能。

(2)第二代的小车在第一阶段小车的基础上减少面积,使用二轮电机进行小车的操控,在小车轮子和摄像头上尝试使用舵机。

(3)第三代小车将实现迷宫寻宝的功能。

7、X3派与STM32连接框架

(1)旭日X3派作为上位机,主要负责摄像头识别、神经网络识别以及算法编写。

(2)STM32作为下位机,主要负责电机控制与模块操作。

(3)旭日X3派和STM32之间通过有线串口连接。

二、X3派部分开发进度——串口指令

1、安装VSCode

本文不详细介绍VSCode安装流程,具体可以参考如下链接:

https://blog.csdn.net/fangshuo_light/article/details/123635576

还可以参照古月学院中所讲内容进行处理和开发。

2、指定串口指令

(1)小车直行:A+速度(-140~-20 || 20~140)(单位cm/s)+空格
指令示例:A100 A-120
(2)小车左转:L+角度(-180~180)(单位:度)+空格
指令示例:L30 
(3)小车右转:R+角度(-180~180)(单位:度)+空格
指令示例:R30 
(4)小车急停:S+空格
指令示例:S 
(5)蜂鸣器响起:B+空格
指令示例:B 
(6)蜂鸣器关闭:b+空格
指令示例:b 
(7)打开OLED并按照模式显示:O+模式(0,1,2···)+空格
指令示例:O0 
(8)红外开关试能:I+使能(0关闭,1开启)+空格
指令示例:I1 
(9)红外循迹试能:T+使能(0关闭,1开启)+空格
指令示例:T1 
(10)通过PID控制小车角度转向:G+旋转角度(-360~360)+空格
指令示例:G90 
注意:角度>0,则向左转;角度<0,则向右转

三、STM32部分开发进度——循迹模块:PID红外循迹模块的使用

1、使用模拟量输出的红外循迹传感器控制速度

之前,循迹使用的都是数字量输出的红外开关型模块,也就是只有0或1的输出。因此在模块数量较少的时候,模块与模块之间有较大空隙,很难做到根据所循路径的曲率实时调整小车转向速度,从而只能低速循迹或循迹效果不好。

(1)对网络上循迹小车的方法进行总结,对于循迹效果较好的小车,一般是有两种情况:一是使用多路循迹,比如八路循迹,减少模块间距,能够对于多种情况进行调整。但考虑到主板管脚数量有限,就不适合在循迹上投入过多管脚;另一种是使用线性CCD,也就是一种视觉循迹。而其原理归根结底也是使用实时图像所产生的模拟量,对于转向速度进行更加连续性的PID调节。所以这里选用三路模拟量输出循迹模块对循迹优化。既节省管脚,又不必使用视觉模块(因为上位机视觉模块需要进行别的操作)。但为了使环境光对循迹模块的影响降到最小,这里可以使用外部补光。

 

(2)如下三张图是该传感器的原理解释。如果左右两传感器的AD采集值按照图1所示,随到黑线的距离变化,那我们只需将两峰值点中间的曲线相减,就能得到一个偏离距离与AD值的线性关系。而为了拓展探测范围,我们还可以根据中间传感器对左右阈值的判定,将峰值之外的图像向上翻折并选取合适斜率使其成为原线性关系的解析延拓。这样就有三倍于远来探测距离的范围。根据这一线性关系,就可以使用PID闭环调节循迹时的转向速度,达成顺滑快速的循迹。

 

(3)所以,首先需要根据STM32F103RCT6的芯片手册找出满足ADC的管脚。这里,我们选择了PC2、PC3、PC5三个管脚作为循迹的1、2、3号,并使用ADC3、ADC2、ADC1进行数据采集。接线时X3接Out8,X2接Out10,X1接Out9

 

(4)在Cube MX中进行配置。因为使用三个ADC,不会有信息采集先后顺序冲突问题。

 

(5)然后通过串口打印ADC值。之后,根据原理计算出图中的关键点。因为传感器的位置等与参数标定相关,所以需要先校准参数。步骤如下:

  1. 首先,在main函数中使用校准函数。把传感器放到远离黑线的地方,找出D_AD_VALUE。这里的参数需要根据具体装在小车上后的样子重新标定。可以看到串口助手输出,将其改到代码中。

 

    2.然后将传感器缓慢穿过黑线,得到其余关键参数。然后修改在代码中。此时数据标定校准完成,可以开始使用。

 

   3.之后,使用数据输出函数,并同样将传感器扫过黑线。可以看到串口输出数据与到黑线的距离呈线性关系。使用该数据对转向速度进行调节即可。