# Donkeycar_SWJTU **Repository Path**: zzhonly/donkeycar_-swjtu ## Basic Information - **Project Name**: Donkeycar_SWJTU - **Description**: 西南交通大学人工智能专业2022年暑期实习 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2022-07-10 - **Last Updated**: 2024-07-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Donkeycar_SWJTU # 致谢 首先感谢工程训练中心的各位老师的帮助 # 项目介绍 通过使用激光切割等技术以及其他材料搭建小车,通过donkeycar训练小车模型,并进行演示 # 团队介绍和团队分工 ## 团队介绍 团队成员有张喆皓,任健鸿,熊沁,郭佳菱,邓恒章,韦琮华。团队成员各司其职,共同完成项目。 ## 团队分工 - 张喆皓:车身设计,PCB设计、模型训练 - 任健鸿:donkeycar环境搭建,树莓派系统安装,模型训练 - 熊沁: PCB设计,车身设计,模型训练 - 郭佳菱:PCB设计,焊接,模型训练 - 邓恒章:PCB印刷,donkeycar环境搭建,模型训练 - 韦琮华:PCB印刷,donkeycar环境搭建,数据收集,模型训练 # 总体方案 1. 设计方案构思 1)车身设计:小车采用双层结构,层与层之间通过铜隔离柱连接 a)小车下层板设计:小车的下层板需要搭载电机、电池、舵机、PCA9685以及L298N,通过测量所搭载组件的尺寸大小来确定小车底板的大小、打孔位置以及孔径。 b)小车上层板设计:小车的上层板需要搭载电源模块、树莓派,在设计小车上层板时除了需要考虑搭载组件的大小,还需要给摄像头支架的安装留出位置。 c)小车摄像头支架:通过利用3D打印技术制作小车摄像头的支架,在设计支架的高度时进行实际测量以满足摄像头能够完整的拍摄到道路旁的线,同时支架也具有一定倾斜角度以满足对 图像更好的记录。 d)小车上层板与下层板的连接:两层之间需要利用铜柱进行连接,在选择铜柱的高度时要考虑下层板上搭载的组件的高度,同时也要在上层板与下层板上都打孔。 2)电源模块及接口设计:参考老师所给的参考图,查找各元件引脚的功能以完成原理图与PCB图的绘制。 2. 技术原理分析 DonkeyCar小车是基于树莓派和Python,利用Keras深度学习框架实现的自动驾驶小车。将无人驾驶小车手工采集到的数据压缩并上传到计算实例中,然后解压缩到指定目录。采集到的多轮次数据,首先进行清洗,丢弃不良数据,然后作为训练数据,开始训练模型,并保存模型文件。连接到小车的树莓派上,并将模型文件从高性能实例上下载到小车工程中,从而实现自动驾驶。 3. 总体方案提出 1)通过分析各元件引脚完成原理图与PCB图的绘制 2)通过利用PCB打板机器制作所需的PCB板 3)将相应元件焊接在PCB板上 4)测量组件大小并设计小车上层板、下层板以及支架 5)对小车进行组装 6)搭载所需的环境并对小车的基本功能进行测试与调试 7)采集响应数据并训练模型 # 详细设计 - 车身设计 ![输入图片说明](1R.png) ![输入图片说明](2.png) ![输入图片说明](3.png) - PCB设计图 ![输入图片说明](image.png) # 开发实现 ## 开发实现过程 ### 需求 使用开源软件donkeycar实现智能小车的操纵驾驶,自动寻路以及自动避障功能 ### 工作分解 大体上分为软件和硬件两个部分。 软件为host PC上donkeycar环境的安装配置,树莓派上donkeycar环境的配置以及自动驾驶模型的训练。 硬件则包括PCB板的设计与制作,小车底板以及小车各组件的组合安装。 ### 开发流程 ![Image](https://gitee.com/zzhonly/donkeycar_-swjtu/raw/master/image/%E7%BB%98%E5%9B%BE1.png) ### 具体工作 PCB板设计与制作:设计并制作项目所需的PCB板,实现12V转5V功能,以及向小车各个组件供电的功能 小车底板:设计底板安装小车的各个部件,包括转向机制,直流电机,驱动板,PCB板等 donkeycar环境:负责处理小车的各种驾驶功能以及训练自动驾驶模型 模型训练:通过在赛道上多次形式收集数据并进行机器学习以形成能自动驾驶的模型 ## 技术难点与解决过程 ### donkeycar环境的安装配置 donkeycar官方文档为全英文,内容繁多,安装时出现各种报错,且host PC安装方法过多,无法分辨最佳方法。且网上没有足够的相关资料可以作为参考 进行多次尝试,按不同方法安装donkeycar进行测试,得出使用miniconda虚拟环境安装为最优解 donkeysim无法正常启动 多次测试未果,最后发现为donkeycar模拟器版本不正确,换回正常版本后正常启动 tensorflow-GPU无法正常调用GPU 阅读官方文档后得知tensorflow并没有对应CUDA的多版本兼容,需要使用对应版本的CUDA和cuudn后才能正常使用 ### 树莓派的系统安装与调试 对树莓派十分陌生,且树莓派作为微型电脑,没有屏幕,没有合适的调试方法 配置xrdp使用电脑远程桌面实现可视化调试 在树莓派安装donkeycar时无法正确创建虚拟环境 重新阅读donkeycar时发现donkeycar官方要求所需环境,重新安装树莓派系统为所需系统后正常配置 ### 模型的训练与测试 训练后的模型无法按照需求进行自动驾驶 重新多次采集数据,由于数据量小,训练的模型很难达到预想中的效果,但精细收集的数据在多次训练下偶尔能实现简单的自动驾驶 经过测试后的模型在第二次测试时无法正常表现 猜测与donkeycar的算法逻辑有关,变化的环境与光线可能导致模型无法做出做出判断,此外可能和摄像头不够清晰或是不够稳定,将摄像头固定后重新多次采集数据,最后得到一个勉强稳定的模型,但仍然会多次犯错 # 项目反思和方案改进思路 # 项目反思和方案改进思路 - 1. 前期方案设计质量验收过程不够严谨,导致后期工程质量出现问题。 在前期的工程设计过程中,对PCB板的设计出现一些失误,由于检验不及时、不严谨,导致需要在后期通过飞线解决电路问题;同时,在前期的PCB版印制时,由于机器故障没有进行严谨的验收,导致钻孔不合乎标准,需要在后期通过物理手段弥补。 方案改进思路: 改进项目流程,在每个流程后面添加验收环节,对本流程的成果进行阶段性检验,在达到要求后再继续后续流程,以避免在后期项目流程无法推进。 - 2. 流程过程中对安全问题不够重视,导致多次出现工伤事故 在整个流程中,因为对于安全问题的忽视,导致许多地方仍然存在安全隐患,甚至出现工伤事故,如烫伤等。 方案改进思路: ① 进取营造重视施工安全的施工氛围,使小组内各成员自己拥有施工安全意识。 ② 全面加强项目安全监管,在进行危险操作时需要有小组成员在旁边进行监管,以避免安全事故的发生。 - 3. 项目流程交接效率低,不同负责人之间无法进行高效对接 整个小组由许多人构成,不同的人负责不同的环节,在环节对接环节仍存在效率低,流程长,效果差等问题。 方案改进思路: 使用共享仓库方式存储项目相关文件和操作,例如Gitee,github等,能有效提高对接效率,使项目在规定时间内完成度更高。 - 4. 项目模型训练过程不够严谨,导致模型效果未达到预期。 模型训练过程中,对于小车行走路线、场地路障摆放、灯光分布等变量控制不到位,导致模型训练出来效果未达到预期。 方案改进思路: 在控制相关变量的情况下进行数据收集、模型训练和测试,能使小车自动驾驶情况更加理想,模型的调试也更加符合逻辑。 # 心得体会 ### 张喆皓 在本次实习期间,我学习并使用了多种制作型软件,学习运用了3D打印等制作方式,学习并了解了donkeycar的基本原理以及后续智能小车的模型训练。在此过程中,我体会到了创造的乐趣,无论是最开始的使用建模软件、设计PCB原理图,亦或者激光切割、3D打印,以及最后的模型训练和演示给予我很大的成就感,同时,与队友的合作也令我感到振奋,休憩时的欢笑,工作时的协力,让我感受到团队合作的魅力,这里再次感谢我的队友们,同时感谢工训中心各位老师的帮助。 ### 任健鸿 在十天时间学习中,我受益良多。在最开始的工种参观中,我们参观了数控与传统两种机床,从中深刻体会到了智能控制对现代工业的深刻影响,也意识到了人工智能的重要性与多功能。 同时在之后的项目实训中,虽然事务繁多,但在分工合作下也显得不是很劳累,也让我体会到了分工合作的重要性以及团队对项目的重要性。 作为负责软件部分的人选,我在项目中负责了树莓派以及主机上donkeycar环境的配置,在这个过程中我也学到了很多课堂上学不到的东西,诸如树莓派相关知识等,在最后训练模型的过程中,也初步了解了机器学习的相关基础知识。 总结起来,在这次实践中,不仅学到了很多新知识,也学到了很多其他重要的东西,让我受益匪浅。 ### 熊沁 在本次智能小车实习中,我收获非常多,学到了很多新的知识,像PCB设计、3D打印、CAD制图、树莓派、donkeycar等。 熟悉了以前未见过的各种元器件,了解了它们的作用。由于此前我从未接触过智能小车,所以对各处的细节甚至是整个流程都不太清楚, 但在团队的合理分工下,我也是能够配合小组完成最终的工作。本次实习将软件硬件结合,将理论运用到实际,提高了我们的动手能力 和团队合作能力,让我受益匪浅。 ### 郭佳菱 通过这次实习,我学到了许多的知识,比如使用CAD绘制小车底板、使用EDA绘制原理图与PCB图以及电子焊接等技术。 通过老师和同学的帮助,我们也成功搭建了环境并实现了小车的自动驾驶,通过多次采集数据训练模型,我们也意识到了许多会影响小车自动驾驶判断的因素。 这次实习让我更加体会到了团队合作与相互沟通的重要性,同时也让我学到了许多有用的知识。 ### 邓恒章 这是一次令我记忆深刻的实习,这次实习并不只是单纯的在计算机上用代码解决问题,而是将代码和实物联合起来。 通过这一次实习,我学会了简易的CAD制图,PCB设计,还学会了使用计算机控制铣床打印PCB板。同时,我还学会使用各种物理方式来完成电路连接,解决问题,如电焊等。 这次实习不但教会了我这些技术问题,例如智能车的结构、智能车自动寻路的原理等,更教会了我小组合作的重要性。在十几天的小组合作中,我们小组成员各司其职,团结合作,最终 圆满完成实习,我的合作能力和动手能力在这次实习中得到了增长。 ### 韦琮华 本次计算机与人工智能学院暑期实习使我受益良多。在这次实习中,我首先参观了机床、铣床、焊接台等相关设备,对于轻工业的发展有了初步认识。 作为人工智能专业的学生,在平时的学习中更多的是与软件编程打交道,但这次我学会了对电子工艺的了解。我学会了如何使用电烙铁焊接PCB,学会了如何使用AutoCAD软件进行工程 制图。 我也了解了如何使用立创EDA进行PCB的绘制。在A319,我们着重学习了如何雕刻PCB板,深入了解了钻孔、划线、剥铜、裁边的工艺,为机器换刀的技巧等等。 随后,我安装了DonkeyCar的相关环境,对图像识别算法进行了初步的了解,也了解了arduino的相关开发知识。 在最后,我负责“驾驶”小车在赛道上不断收集数据,最终收集到了不错的数据来训练模型。模型最终效果不错,小车能实现自动寻路、避障等功能,但仍存在缺陷,如发挥不太稳定 等。 本次实习使我体会到了软硬件结合的重要性,实践的重要性以及反复试验、有耐心的重要性。 # 参考文献 > https://docs.donkeycar.com/ > https://tensorflow.google.cn/install/gpu [实习视频链接](https://www.bilibili.com/video/BV1EU4y1D7v6?share_source=copy_web&vd_source=df5a85a5c10967c9daaf8538d21c2219)