[0047] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0048] 针对现有技术存在的问题,本发明提供了一种智能车、控制系统、控制方法、计算机设备、智能终端,下面结合附图对本发明作详细的描述。
[0049] 如图1所示,本发明实施例提供的智能车控制方法包括以下步骤:
[0050] S101,摄像头拍摄道路图片,EdgeBoard得到图片信息;
[0051] S102,调用道路巡航模型和任务地标模型得到巡航指令;
[0052] S103,EdgeBoard通过串口通信发出控制命令,WBOT接收上位机发来的命令并驱动相应的设备。
[0053] 下面结合具体实施例对本发明的技术方案作进一步描述。
[0054] 1、本智能车在百度AI Studio平台搭建飞桨深度学习框架,完成智能车行驶模型的训练,并且在EgdeBoard上调用该模型。通过安装在车上的摄像头采集道路数据信息,根据训练好的模型,EgdeBoard向WBOT发送指令,下位机接收到指令后给电机、舵机等设备发送控制指令。智能车主要包括两个部分:深度学习模型的训练和智能车的控制算法实现。其中深度学习模型的训练主要有智能车道路数据信息的采集、道路数据的预处理、构建深度学习框架对数据集进行训练。智能车的控制算法主要是训练完成的模型调用、获取摄像头拍摄的数据、EdgeBoard对拍摄到的道路信息和任务信息的处理、EdgeBoard主处理器与WBOT下位机的通信、WBOT命令的接收以及控制指令的发送。
[0055] 2、智能车硬件设计
[0056] 智能车以EgdeBoard和WBOT为核心,前者用来处理数据,后者用来控制各种设备,两者通过串口通信完成数据的发送和接收。硬件电路使用了EdgeBoard为主处理器、WBOT控制器、2个编码电机驱动板、2个CMOS高分辨率摄像头、6个编码电机、2个智能舵机、1个数字舵机、超声波传感器、磁敏限位开关、7.4V锂电池。硬件电路各个模块之间的连接示意图如图2所示。
[0057] 2.1车架结构
[0058] 智能车机械的设计是整个智能车设计中比较重要的一个环节,智能车能实现良好的控制效果离不开合理的机械结构作为基础。智能车道路信息的采集以及过完的稳定性都需要良好的机械性能作为支撑。因此在设计智能车机械结构时要基于智能车预期完成的控制任务,选取合适的材料,并对其机械结构有初步的认识。在此基础上,根据智能车在运行过程中的实际实现效果,对车辆结构进行完善。本智能车的车架为铝合金材质,采用高强度2mm和3mm铝板冲压成型的结构件,并且经过CNC精密加工,阳极氧化着色。因此智能车的机械结构具有良好的稳定性、牢固性以及美观性。车前轮使用2个6018轮胎,车后轮使用两个全向轮。后轮使用的全向轮的目的是为了减小智能车转弯时受到的横向摩擦力,加快转弯速度。
[0059] 2.2智能车控制系统
[0060] 本智能车是一个集成了人工智能、电子、机械、通信等多种技术的控制系统。智能车的控制系统包括传感器、信息处理、控制算法和执行机构。其中信息的处理与控制算法实现由软件完成,而系统硬件包括了处理器、传感器、驱动电路及执行机构。智能车系统的控制过程为摄像头拍摄道路图片、EdgeBoard得到图片信息、调用道路巡航模型和任务地标模型得到巡航指令、EdgeBoard通过串口通信发出控制命令、WBOT接收上位机发来的命令并驱动相应的设备。控制系统的连接图如图3所示。
[0061] 2.3调试方式
[0062] EdgeBoard支持串口调试和网口调试两种方式。使用串口调试时,只需要电脑与EdgeBoard通过USB线相连接比较方便,但是串口调试会使电脑打印出冗余的信息,影响调试的效率,因此一般选择通过网口进行调试。具体方法是EdgeBoard通过网线接口与路由器相连,配置路由器与EdgeBoard在同一个网段,电脑通过无线网络与路由器相连接,由电脑发送Linux指令即可实现对EdgeBoard的控制。运行过程实现(1)获取图片或者视频输入;(2)调用预测模型库加载模型;(3)调用加速模块来加速模型的计算;(4)输出计算结果。
[0063] 3、智能车软件设计
[0064] 3.1智能车的软件部分主要包括道路信息数据采集、道路信息数据标注、神经网络模型训练、智能车巡航及执行任务控制程序。智能车系统的整个软件部分方案设计流程如图4所示。
[0065] 3.2智能车控制整个控制逻辑
[0066] 智能车控制整个控制逻辑是:前侧摄像头检测道路信息和任务地标,当没有检测到任务地标的时候智能车执行正常的巡航,检测到任务地标后智能车停车,判断任务名称,侧面摄像头开启,识别目标。当侧面摄像头检测到相应的任务目标后,执行抓取、打靶、放置等相应的任务动作。智能车程序的逻辑如图5所示。
[0067] 4、智能车测试
[0068] 智能车在巡航的过程中,如果检测到任务地标,智能车会停车并调用侧面摄像头去识别来执行任务。具体任务堡垒识别、定点停车、打靶、物料抓取、物料放置。其中定点停车与物料放置任务不需要使用侧面摄像头识别,因此这两个任务的停车逻辑比较简单,只需要前侧摄像头识别到相应的任务地标后停车。由于前置摄像头识别任务地标可能会产生误判,因此在识别任务地标时采用了类似“按键消抖”的方法,即当第一次识别到任务地标时延时一段时间,若再次识别到,将该任务地标的标志置1,进入停车判断程序。若智能车上拍到的上一张图片识别到任务地标,而下一张图片没有识别到则判断智能车到达停车位置了,停车执行任务。对于需要侧面摄像头识别的堡垒识别、打靶、物料抓取任务,其停车逻辑是首先一样需要经过“消抖”后两次识别到相应的任务地标,这时候开启侧面摄像头识别,当侧面摄像头识别到后停车,再去执行任务。
[0069] 4.1数据集采集
[0070] 车道线数据的采集通过手柄控制,在EdgeBoard板上运行python3 collect.py指令,当Xshell界面为智能车等待采集时,表示智能车进入等待模式,手柄启动智能车,通过摇杆控制智能车前进完成数据的采集。对于侧面摄像头拍摄的数据采集,则是运行python3 take_picture.py指令,将智能车放在每个采集点,使用智能车上的按键来手动拍照采集。
[0071] 4.2模型预测测试
[0072] 智能车的数据采集后得到两个模型分别是巡航模型和任务识别模型。使用巡航模型预测得到的时关于车道线弯曲度的信息,使用任务识别模型预测得到的是任务地标和任务的具体信息。通过road_model_test.py中的test_front()函数预测巡航模型,其中巡航模型的预测结果如图6、图7、图8、图9所示。从车道线检测图可以看出,若前置摄像头拍摄到任务地标,则预测到的信息是车道线弯曲度和任务地标名字。
[0073] 通过road_model_test.py中的test_task_detector()函数预测巡航模型,其中巡航模型的预测结果如图10、图11、图12、图13所示。从侧面模型预测图得到,若侧面摄像头拍摄到任务信息,则返回的是对应任务信息的名称。
[0074] 4.3任务实现
[0075] 经过多次的调试,智能车在完成巡航的基础任务上,可以实现打靶、物料放置、堡垒识别、物料抓取等任务,并且任务完成率较高。在对少数几次任务执行失败分析,发现侧面模型的识别率很高,因此任务能否顺利执行取决于智能车在识别到任务地标后的停车位置,特别是物料的抓取和物料的放置,这两个任务对停车位置要求高,智能车出现偏移则会导致机械手无法抓取物料和铲斗无法放置物料。在后续的改善中,要重点解决停车位置问题,尽量减小智能车每次的停车位置的偏差。
[0076] 5、本发明以基于百度飞桨深度学习的智能车模型设计应用作为研究内容。经过设计方案构思、车模结构组装到硬件电路搭建、软件算法编写等过程,在这其中也遇到了大大小小的问题,但这些问题都被一一解决,并且最终制作出了一台完整的智能车。
[0077] 如图14所示,EdgeBoard支持串口调试和网口调试两种方式。使用串口调试时,只需要电脑与EdgeBoard通过USB线相连接比较方便,但是串口调试会使电脑打印出冗余的信息,影响调试的效率,因此一般选择通过网口进行调试。具体方法是EdgeBoard通过网线接口与路由器相连,配置路由器与EdgeBoard在同一个网段,电脑通过无线网络与路由器相连接,由电脑发送Linux指令即可实现对EdgeBoard的控制。
[0078] 在本智能车中,WBOT控制器作为下位机直接控制编码电机、舵机、传感器等设备。它通过串口通信与主控制器之间进行数据的交换,负责接收主控制器发来的指令并转换为相应的控制信号去驱动设备,并且传递设备的反馈信号给主控制器。WBOT控制器是主控制器与设备之间沟通的媒介,建立起了主控制器与设备之间的信息传递“桥梁”。
[0079] 主程序的执行
[0080] 智能车的程序是基于python编写,指令都在Xshell软件上使用Linux指令完成对智能车的操作。运行程序首先要将EdgeBoard连接路由器,并配置在相同网段,将电脑连接上相应路由器,输入ftp://192.168.1.254进入到系统的内存空间中,将程序放进系统的内存中,之后用Xshell软件与EdgeBoard系统相连接。
[0081] Xshell与EdgeBoard系统相连接后,输入cd/home/root/workspace/autostart/src进入到该路径下,然后输入python3 run.py指令运行程序,此时智能车进入等待巡航状态。
[0082] 当巡航启动按键按下时,智能车开始自主移动,并且不断在Xshell上输出当前检测到的智能车偏离度。
[0083] 数据集采集
[0084] 车道线数据的采集通过手柄控制,在EdgeBoard板上运行python3 collect.py指令,当Xshell界面时,表示智能车进入等待模式,手柄启动智能车,通过摇杆控制智能车前进完成数据的采集。对于侧面摄像头拍摄的数据采集,则是运行python3 take_picture.py指令,将智能车放在每个采集点,使用智能车上的按键来手动拍照采集。
[0085] 模型预测测试
[0086] 智能车的数据采集后得到两个模型分别是巡航模型和任务识别模型。使用巡航模型预测得到的时关于车道线弯曲度的信息,使用任务识别模型预测得到的是任务地标和任务的具体信息。通过指令python3 road_model_test.py预测巡航模型,指令python3指令预测任务识别模型。
[0087] 下面结合实验对本发明的技术效果作详细的描述。
[0088] 1、智能舵机响应慢,在对智能舵机控制进行测试的过程中,发现其响应速度慢。运行智能舵机的控制程序,经过一分钟左右才开始转动,而在相同硬件情况下测试普通数字舵机确实正常的。经过查找相关信息,发现该款智能舵机本身上电、断电需要一定的时间,而且由于其通信存在问题会拖慢响应速度,在使用智能舵机的时候要挂起一个空的线程保持通信。由于摄像头的开启也是相当于开启了一个线程,因此在使用智能舵机的时候一直将摄像头打开,最后解决了这个问题。
[0089] 2、采集数据时手柄失控,对智能车的采集车道线数据进行了测试,发现其采集数据的过程中遥控手柄会出现突然失灵的问题,遥控手柄的摇杆无法控制智能车的运动,但是过几秒钟手柄又恢复了正常。这个问题对智能车的数据采集造成了很大的影响,直接影响着智能车的巡航效果。导致采集数据手柄失控的原因EdgeBoard板上的SD卡存储照片速度太慢。针对这个问题,可以通过将照片的存储路径换成存储速度快的固态U盘来解决。
[0090] 3、智能车停车位置存在偏差,智能车的车轮两侧的宽度小于车道线的宽度,因此智能车在巡航的时候会存在偏移车道线一侧的情况,这使得智能车在识别到任务地标停车的时候左右位置存在偏差。因此将智能车的四个轮胎改为麦克纳姆轮,通过装在侧面的超声波测量距离,控制智能车左右平移,使智能车的停车位置准确去执行任务,另外使用麦克纳姆轮,可以方便的执行侧方停车这个任务。
[0091] 4、智能车巡航,智能车的巡航是基于前置摄像头拍摄车道线,对当前智能车偏离度进行预测,然后根据偏离度对电机的速度进行解算,分配速度给四个电机,不断循环来控制智能车自主移动。
[0092] 智能偏离度预测主要通过执行如下代码实现:
[0093] front_image=front_camera.read()#摄像头获取图片
[0094] angle=cruiser.cruise(front_image)#使用巡航模型预测偏离度[0095] 在预测得到智能车偏离度后需要进行速度解算得到速度分配给四个闭环电机。速度解算的思想是首先设置好基准速度定义为velocity,这个速度是作为智能车的直行速度,即当得到的angle为0时,四个电机的速度均设置为基准速度velocity。当angle不为0时,例如angle>0时,右侧闭环电机的速度为velocity*(1‑angle),左侧电机速度为基准速度不变。当angle<0时,左侧闭环电机的速度为velocity*(1+angle),右侧闭环电机速度为基准速度不变。此外还设置了一个偏离度的基准率,当偏离度的绝对值大于这个基准率,表示当前车道弯曲幅度较大,因此将基准速度乘与一个小于1的减速比,减小过弯速率来保证智能车能够稳定过弯。
[0096] 智能车的速度解算部分具体程序如下:
[0097]
[0098] 5、智能车执行任务,智能车在巡航的过程中,如果检测到任务地标,智能车会停车并调用侧面摄像头去识别来执行任务。具体任务内容由本文2.2智能车功能概述中的堡垒识别、定点停车、打靶、物料抓取、物料放置。其中定点停车与物料放置任务不需要使用侧面摄像头识别,因此这两个任务的停车逻辑比较简单,只需要前侧摄像头识别到相应的任务地标后停车。例如物料放置任务的部分程序如下:
[0099]
[0100]
[0101] 由于前置摄像头识别任务地标可能会产生误判,因此在识别任务地标时采用了类似“按键消抖”的方法,即当第一次识别到任务地标时延时一段时间,若再次识别到,将该任务地标的标志置1,进入停车判断程序。若智能车上拍到的上一张图片识别到任务地标,而下一张图片没有识别到则判断智能车到达停车位置了,停车执行任务。
[0102] 对于需要侧面摄像头识别的堡垒识别、打靶、物料抓取任务,其停车逻辑是首先一样需要经过“消抖”后两次识别到相应的任务地标,这时候开启侧面摄像头识别,当侧面摄像头识别到后停车,再去执行任务。例如打靶任务的部分程序如下:
[0103]
[0104] 在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用全部或部分地以计算机程序产品的形式实现,所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输)。所述计算机可读取存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
[0105] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,都应涵盖在本发明的保护范围之内。