前言:该作品是2022年四川省电子设计竞赛一等奖作品,其能稳定完成全部四个问题,但存在停车距离的精度问题。该文章将会介绍该作品的整体设计思路,关键控制算法等技术相关问题,也会给出工程的下载链接。同时本人参加过2021年电赛、十七届智能车竞赛、2022年电赛,文末会给出一些我个人的经验。当然各位小伙伴也可以直接私信我(哔站同名),我有时间一定会回复。
目录
一、整体思路设计
1.1主、从车设计框架
1.2整个作品设计思路
二、各功能块具体实现
2.1模块间通信
2.2小车的程序结构
2.3速度闭环操作
2.4openMV场地元素识别
2.5 巡线实现
三、任务实现思路
四、个人经验
一、整体思路设计
1.1主、从车设计框架
话不多说,直接上图。图中圆角方框表示模块,箭头表示信 方向(包括供电),各颜色箭头对应含义见图中,图中均为单箭头,即信 流向都是单向的。蜂鸣器与led灯图中未体现。
图1 主车设计框图
图1所示为主车的设计框图,采用msp430f5529作为主控制器,openMV用于场地元素识别,其将图像处理后的数据打包发送给主控制器,主控制器会处理接收到的openMV数据,然后改变PWM占空比输出给tb6612电机驱动模块,驱动模块将控制信 功率放大驱动电机旋转,同时主控制器通过蓝牙向从车发送相关信 。电池采用3S1100mAh电池,采用开关电源模块提供稳定的5V电源。
图2 从车设计框图
图2所示为从车的设计框图,与主车类似,不同在于从车是被动从蓝牙模块接收主车发送的数据,并且增加了激光测距模块以实现两车间的距离要求。
注意:该框图中没有考虑模块间的通信电压,一是因为很多模块自带稳压芯片,二是因为各模块间工作电压存在差异,设计时一定要根据实际情况有所考虑。同时ti的板子特别容易烧,建议在进行电路设计时引脚与模块间添加几k到十几k的电阻(我使用的4.7k电阻)用于限流。
在机械结构方面,两辆车均为三轮车,采用差速方式控制小车转向。
图3 小车底盘示意图
图4 小车实物图
不要在意车长得潦草,我是做智能车的,根本没准备电赛,这两辆车的元器件基本都是捡的和白嫖别人的。
1.2整个作品设计思路
作品整体设计思路很简单,两辆车单独进行巡线,主车仅在特定时刻给从车发送指令,配合两车各自的控制逻辑即可完成所有题目。具体一点,首先对主从两车各自进行速度闭环,这样两车就可以实现以匀速且可准确控制的速度运动,然后通过openMV识别场地元素,并将处理后的数据发送给主控制器,这时两辆车即可完成基本的巡线任务,接下来就是将两车结合起来,即主车在特定时刻给从车发送信息,让它们俩协同巡线,再结合具体控制逻辑即可完成各个题目。
二、各功能块具体实现
前面已经介绍了作品的硬件设计框架,以及整个作品的设计思路,那么接下来就将实现细节逐步完善,包括模块间的通信、小车的程序结构、速度闭环操作、openMV场地元素识别、巡线实现。内容较多,可在文章顶部通过目录跳转至感兴趣区域。
2.1模块间通信
为什么要先介绍模块间的通信呢,因为它很重要,可以说模块间通信解决好了可以事半功倍。而本作品很重要的一点在于所有信 都是单向的,openMV只给主控制器发送数据而主控制器不给openMV发送数据,主车只给从车发送数据而从车不给主车发送数据。至于原因,当然是这样简单,有人可能会觉得会出现数据错误,这个问题大可放心,别对通信协议这么不信任。
图5 主要模块间的通信
参照上图,接下来我就简单介绍各模块间通信干了啥,主要有四个(其实只有两个,后两个单纯用来充数的):
1.主车与从车之间的通信,采用的是串口通信协议(配对蓝牙串口),主车给从车每次发送一个字节的数据,包括八条指令,1-4表示接下来该执行的任务(四个任务嘛),5表示从车启动,6表示从车停止,7表示从车暂停(第四个任务用),8表示从车暂停后启动(同样第个任务用)。
for example:
2.openMV与主控制器之间的通信,采用串口通信协议,openMV只给主控制器发送数据,每次五个字节,格式为0x2c 0x12 data1 data2 data3,0x2c与0x12为帧头,用于同步数据传送,data1表示场地元素,包括六种:0正常巡线,1正常停车,2岔路口进,3岔路口出,4非正常停车, 5转弯,data2与data3表示黑线的中心值,为什么是两条呢,正常情况确实只有一条,但小车处于进出三岔时会有两条黑线,此时就需要将两条黑线中心横坐标都发送给主控制器。
openMV发送数据函数:
也附上单片机接收程序:
前面提到应该信任通信协议,其实串口在115200波特率下单字节误码率很低很低,几乎可以忽略,但当我们需要在同一次数据发送多种信息时,就需要用到帧同步,也就是加上两个帧头,为啥是两个为一个帧头的同步错误率是1/256(忽略传输过程错误),还是比较可能出错的,两个帧头同步错误率则是1/65536,几乎不可能出错,至于三个及其以上也可以,但没必要。
3.从车与激光测距模块间的通信,采用的是IIC,这里主控制器仅仅从激光测距模块读出原始数据,解算代码我也不会写,抄的某宝店铺里的。你可能会问,为啥不用超声波模块,为啥不用串口通信,好吧,我太菜了,超声波模块代码不会移植,至于串口,emmm,msp430f5529只有两个串口。。。。
4.控制器与tb6612之间的通信,PWM,至于PWM是啥,怎么用它控制电机,可以看这篇博客http://t.csdn.cn/rkT8p
多说几句:对于电赛,或者说对于单片机来说,常用的通信协议就三种串口、IIC、SPI,前者通常都是单片机硬件实现,后两者软硬实现都可以(硬实现指的它有对应实物电路,软实现指的无实物电路,但可以用代码模拟),后两者考虑到灵活性一般软件实现。将这三种搞明白就行了,知道原理,懂得移植代码即可,至于CAN口(大疆M2006使用的通信协议)、RS485啥的,了解了解就行了,用到了再说。
2.2小车的程序结构
图6 小车程序结构图
程序结构图如图4所示,该处仅给出主程序结构,未考虑openMV的程序与作用。对于跟随小车系统,在蓝牙连接后可用过按键选择任务,并通过oled显示,确定好任务后主车会通过蓝牙向从车发送选择任务和发车指令,主车发送发车指令后以及从车接收发车指令后都会根据任务选择速度(这里的速度指的速度闭环后的目标速度,后面会详细介绍),接着就会根据选择的任务执行对应的程序,最后在主车识别停车后两车都停止(控制周期为20ms)。
以下是两车的程序框架代码:
主车程序框架:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!