一.简述

作为第二次参加智能车大赛的“老队员”,有了前一届的参赛经验,上手起来确实轻松了不少。因此,在选择组别的时候,我便想挑战一下自己,选择了这个今年新加入的且难度较大的单车拉力组

事实也证明,这个单车在制作和调试的过程中,难度的确很大。虽然实现平衡和循迹程序的算法相对简单(不排除有大佬采用了更加高级的算法),但是对于小车机械结构和参数的要求十分苛刻,需要不断尝试和调整才能十分稳定地跑起来。

下面我会对调车和比赛过程中出现的问题进行总结,并进行经验分享。
由于大部分比赛已经结束,所有的制作文件我都会开源,链接放在本文最后,大家可以自行下载。学业繁忙,评论区发邮箱暂不回复,希望大家理解。

二.小车制作过程(单车拉力组)


由于大小限制,此GIF采用了2倍速播放!

1. 车模介绍

单车拉力组是本届大赛新加入的组别,使用的车模也是新设计的K车模

可能有不少同学看过稚晖君大佬的作品:我把自行车做成了 自 动 驾 驶 !! 抛开AI识别和路径规划等技术,稚晖君在这个作品中设计的自行车主体,是使用动量轮进行的平衡。这种平衡方式比较稳定,可以实现自行车的原地直立,在淘宝的平衡小车之家中也有类似的学习套件。

但是卓大大为了加大本组别的难度,在规则中明确要求了:不允许使用动量轮或质量快等实现平衡。那么,这个小摩托想要实现平衡行进就困难了不少。所以,K车模中并未设计安装额外平衡装置的位置。(具体实现方式后续说明)

下面开始吐槽:
★K车模精致帅气,主体采用纯金属打造,外喷金色涂装,尽显高端大气。

★车模采用传统的RS380电机控制后轮速度,舵机控制前轮转向的方式,实现小摩托的平稳运行。

★车模标配新款SD-12小舵机,不仅价格昂贵(单价115元),性能更是十分拉跨,响应慢,扭力小,易损坏,让调车人时常感受更换舵机的痛苦。

★标配的车模轮胎更是昂贵(一对120元),轮胎皮与轮毂一体构造,胎皮磨损后,只能整体更换。由于材质和设计问题,后轮轮胎极易磨损(前后轮轮胎相同,由于后轮为驱动轮,更易磨损),也需要不时更换,为我们的调车生活又增添的几分难度。

左边为使用5天的后轮轮胎,右边为使用了1天的后轮轮胎。

★车模设计的后轮固定结构更是有趣,由于制造上的误差,每台车模都有属于自己的特色。电机转动后,车轮或左右晃动,或上下晃动。调平衡难度进一步加大。

上面有关车模设计上的问题,在第一批车模上尤其突出,后面一批车模有一定改善,但仍然存在。(两批车模我都使用过)

2. 单车拉力组规则简介(具体规则参考卓大大的文章,规定使用STC的芯片)

单车拉力组与AI电磁越野组使用的赛道基本类似,只是做了部分简化。包含的元素有,直线、折线弯、十字、坡道、直角弯(直角弯难度较大,在赛区比赛中未添加)。

在各赛区的比赛中,基本都使用了下面这个赛道:(其中,蓝色部分为单车拉力组的实际赛道,灰色部分为原AI电磁越野组赛道,红色线段部分放置了一个坡道,红色圆圈放置锥桶,绿色部分为发车点

小摩托只需要从发车点出发,循着电磁信号线(蓝色的赛道),正常绕行一圈即算完成比赛。期间,小摩托只要保持不倒(除两轮外的其他部分触地均算作倒地),且不碰撞锥桶,前不会穿过锥桶超近道即可。(卓大大发的规则中提到,碰撞锥桶后,锥桶移动10cm以内不算违规,但是对于单车而言,碰撞后基本难以再保持直立)

3. 小摩托的机械结构


★由于小摩托配套的SD-12小舵机性能弱且易损坏,因此我们改换成了性能更好的S3010舵机

★自制的电池和支撑安装支架,可以方便把电池安装在小摩托底部降低重心,更容易平衡,两边的支撑用于立住小摩托,以及防止倒地后摔坏小摩托。

适当添加配重块,保证小摩托左右两侧的平衡,这样才能保证左右转弯时,不会有较大的差别。(例如左转转弯半径小,右转转弯半径大的情况)

★前轮安装使用了13孔,可以让转弯更加灵活。当然因人而异,也有队伍使用24孔跑得很好。

★由于小摩托制作的误差,当两个舵机前杆均安装上去后,会限制前轮的转向幅度,从而影响小摩托的最小转弯半径。因此,推荐只使用一个舵机前杆,另外一个使用橡皮筋拉住即可。
(Tips:此点因车因参数而异,我的小摩托在使用此种方案后,平衡稳定度得到了很大的提升,转弯也更加灵活。)

4. 小摩托的硬件电路设计


★STC16主控板采用了龙邱科技单车主板的外形设计,内部电路进行了一定的改造
变动1:去除了不必要的模块接口,比如CCD等,简化主板结构;
变动2:采用TI的TPS5430芯片替换AS1015芯片(AS1015芯片缺货)为舵机进行供电。
变动3:稳压芯片采用了常用的AMS1117-3.3V线性稳压芯片,并在前面添加了LM2596-5.5V开关电源芯片,减少LDO的损耗。(LM2596芯片有点过时,但正常使用没问题)
变动4:更换了开关、接口、按键等原件的封装;
变动5:对电路板重新进行了布线和布局,并把电源地,模拟地和数字地进行了隔离
变动6:更换的蓝牙模块接口是配套逐飞的蓝牙模块,方便使用。
变动7:下载电路换成了习惯用的CH340G芯片,体积略有增大。

电机驱动采用了BTN7971芯片,芯片价格较高,但是电路非常简单,焊接调试难度小,运行稳定,板子体积也较小,适合使用在单车上。

★前瞻的外形采用龙邱的设计,但是把原来的LM358换成了一块OPA4377运放芯片,可以同时放大四路信号,因此一根杆子上仅有四路电感。
实际使用时,安装了两个前杆,采用6路电感进行循迹(一对水平,一对内八字,一对竖直),一般循迹只需一对水平和一对内八字电感即可,竖直电感主要用于判断直角(虽然判断直角的程序还未调试成功)
推荐还是在一根杆上设计六个电感,减少前瞻的重量,小摩托更容易平衡。

5. 小摩托的软件设计

小摩托的平衡原理和我们日常骑电动车类似
电动车正常向前行驶的过程中,假设此时的小车平衡,平衡角度为0°。当车身出现向左倾斜的趋势时,如果想要车身回正,那么就需要前轮向左旋转;同理,当车身出现向右倾斜的趋势时,如果想要车身回正,那么就需要前轮向右旋转。
同时,当需要电动车向左转时,只需要令其向左倾斜一定的角度;当需要电动车向右转时,只需要令其向右倾斜一定的角度。这便是基本的控制原理。
更加详细的可以参考此篇博客:自行车平衡原理

软件的整体设计不难,重点在于调参
与传统的两轮直立平衡车有异曲同工之处,代码中主要涉及三个环:
★一个是电机的PI环,用于稳定控制小摩托的运行速度。通过编码器反馈的实际速度,试电机转速达到目标转速。

★还有一个是舵机的PID环(直立环),用于实现小摩托的直立。通过从MPU6050中获取左右倾斜的角度(类似于横滚角)和角速度,反馈到直立环中,输出控制舵机的PWM占空比从而改变舵机的转角,最后实现平衡。

★最后一个是模糊P+定值D的转向环,用于实现小摩托的稳定循迹。通过前瞻的电感值,经过一系列数据处理,最终计算得到所需的目标平衡角度。采用模糊控制,可以保证在直道稳定的同时,转弯也会灵敏识别。

★程序通过MPU6050的INT引脚,在初始化时设置了每5ms发出一个信号,从而每5ms控制一次。

★姿态角的获取采用了龙邱提供的MPU6050+DMP实现。

★为了消除电感值的一些噪声干扰,可以采用滑动平均滤波的方法。

三.问题汇总与经验分享

1.机械结构

★如果发现电机对整个系统产生很大的干扰。比如:打开电机使后轮转动后,主控出现死机、OLED花屏、舵机开始抖动、电感读取的值出现严重噪声等问题时,很可能是因为电机本身出现问题,需要更换电机才能解决。

舵机对电感的值始终有一定的影响,且是由于舵机运动后内部电流变化产生的影响,而不是其产生的外部磁场干扰。(测试时:令舵机远离和靠近电感,发现一直有干扰,且基本没有区别;当舵机停止转动后,干扰消失)

★与上述相同:由于小摩托制作的误差,当两个舵机前杆均安装上去后,会限制前轮的转向幅度,从而影响小摩托的最小转弯半径。因此,推荐只使用一个舵机前杆,另外一个使用橡皮筋拉住即可。
(Tips:此点因车因参数而异,我的小摩托在使用此种方案后,平衡稳定度得到了很大的提升,转弯也更加灵活。)

★速度的稳定对小摩托来说十分重要,因此,只有令后轮越顺滑,齿轮间的阻力越小,控速才能越平稳。需要格外注意轮胎两侧固定轮胎的两个金属柱的正反问题,放反后,会卡住轴承,增大转动的阻力。齿轮和轴承上可以滴加一点润滑油。

★由于小摩托后轮驱动,摩擦较大,因此后轮极易磨损,打滑后对上下坡十分不利,需要及时更换。

前瞻需要尽可能轻,要令小摩托的整体重心靠后才容易控制,转弯不容易倒。

定期检查电感的值,可能会有较大的变化,很多因素都会影响采集的电感数据。

2.硬件电路

★板子越精致小巧,小摩托越容易平衡和循迹。因此,在有足够设计和焊接能力的前提下,缩小电路板体积是十分必要的

布线时候需要格外注意,对于电源的滤波电容,电源线需要先要经过电容再进入芯片的电源引脚,否则起不到滤波作用。尤其是对STC16单片机而言。(第一版主板由于粗心大意,没注意此问题。导致电机和舵机打开后,电源不稳定发生波动,STC16直接死机)

3.程序设计

★推荐加装蓝牙传输模块进行调试,在匿名上位机上显示波形,可以更加直观地调试各种参数,缩短调试时间。(经过测试,除去帧格式,只能发送4个字节用于显示的数据,否则单片机运行速度不够,会出现程序崩溃或丢包的情况)。

★直立环(舵机PID)的稳定性对小车后续的调试起着至关重要的作用,下图展示的是我的小摩托的直立稳定性能。只有当小车可以十分稳定地直立前进后,才能更好地实现循迹。(直立调试要求:几乎可以走直线、遇到轻度颠簸路面可以稳定通过、用手添加外力后可以迅速转向不抖动

★直立环的积分系数I很重要,用于平衡长时间的积分量。将会直接影响小车的当前角度是否能达到目标角度,使用上位机进行波形观察可以明显看出。当目标倾角越大时,静态误差也越大,比如设定的目标倾角为5°时,I不够大的情况下,小摩托可能一直保持在8°左右行驶,那么就很容易倒地。

★STC8H系列单片机使用MPU6050获取姿态角时,只有一阶互补滤波有效,二阶互补滤波和卡尔曼滤波会出现延时(严重的阻尼现象),移植的DMP也会有较大的过冲(暂未解决)。因此推荐使用STC16,并直接使用龙邱移植好的未开源DMP库。

★在小摩托本身硬件没有大变动的情况下, 直立环的参数是固定的,调节好后,可以一直保持稳定,不需要经常调。

★虽然舵机对电感值有干扰,但是相对于电感值的变化幅度来说,是可以忽略的。经过测试,电感靠近和远离电磁线时,数值变化的幅度可达2000~3000。而舵机的干扰始终在30以内。经过滤波和归一化后,可以基本消除干扰

★Keil251的编译器经常会出现许多奇奇怪怪的问题。比如:1.写的某些函数会导致程序卡死,无论是否调用;2.某些变量定义的顺序会影响程序的正常运行;3.一条语句中定义多个变量也会影响程序运行;

4.参数调整

★★★小摩托想要直立前进,首先需要找到它的角度中值,也就是可以直线行驶时,横滚角的角度。可以通过悬挂法,或者把小摩托放在平面上,调节它的姿态,找到平衡点,记录此时的角度,然后在程序中进行角度偏差的补偿

★★★PI速度环:此环参数较为简单,下面这个参数基本可以。需要保证电机转动过程中可以明显感觉到转动速度均匀,而非周期性得一快一慢。(注意:使用的是龙邱512线编码器,如果是1024线编码器,参数需要改动)

★★★PID直立环:此环的参数与行驶的速度有很大的关联,因为速度和直立环会同时影响小摩托的平衡。整体来说是:速度越大,直立环的P和D越小。
在保证角度中值准确,速度适当且恒定的前提下:
☆先调节P和D并添加固定的系数I(0.1左右),当小摩托可以简单直立后,增加P和D。
☆如果出现直线行驶时,前轮左右晃动幅度过大的情况,可以降低P,略微增大D;
☆如果用手突然改变前进方向,小摩托出现明显的左右震荡,需要降低D。
☆给与小车一定的倾斜角度,使其绕圈行驶,通过上位机观察。如果实际角度始终与目标角度有较大的误差,需要适当增加I。

★★★模糊P+定值D转向环:这个环主要是通过电感归一化后的值,经过差比和得到的偏差,来计算出需要的倾斜角度,从而实现转弯。实际使用时,定值D比模糊D效果更好,且节省资源。

☆P的模糊表和相应的系数需要自行设计。此环的系数主要通过实际循迹时进行调整。
☆当寻直线时,如果发现小摩托在线上左右摆动,不贴线,可以增加D进行抑制。
☆当发现小摩托转向不灵敏时,可以适当增大P来提高灵敏度。

四.总结


★最终获得了华东赛区决赛第八的成绩,勉强拿了一个赛区一等奖。小摩托的最好水平没能在比赛时发挥出来。

赛道全长84m左右,在试车的时候可以跑到最快的速度,一圈63s;初赛时能跑中等的速度,一圈70s,获得了初赛第六;决赛时只能以最慢速才能完赛,一圈77s,获得了决赛第八(初步分析是由于场地更换的问题,试车和初赛都在A赛道,决赛在B赛道,赛道和信号发生器都有一定的差别)。无法跑完全程,几乎都是在出十字时,小车出现跑偏的情况,且无法寻回路线。

★至于有关本届华东赛事承办学校在办赛过程中出现的诸多问题,我在此就不多说了。仅对那些因各种原因未完赛的车友们表示理解与遗憾。

★最后再放一个调试的慢速运行过程,由于是gif,演示效果可能不明显。实际测算后,最慢速度约为45cm/s。

PS:华东赛区8个国赛名额,我们混进了国赛,躺赢国二,嘿嘿!

★文章如有错误,欢迎指正。


开源资料链接:第十六届单车拉力组开源资料

【第十六届全国大学生智能车竞赛回顾——华东赛区单车拉力组(全国二等奖)】相关推荐

  1. 第十六届全国大学生智能车竞赛(安徽赛区)信标组蒟蒻的想法

    前言:作为一名准大三的软件工程学生,刚刚结束了他的为期十几天的智能车之旅,学习了很多,受益匪浅. 1. 什么是智能车? 印象里面好像就是一个车在赛道上跑,然后一群人在哪里看着它跑,就像遥控车那样简单, ...

  2. 第十六届全国大学生智能汽车竞赛(西部赛区) 竞速组成绩及获奖情况公示

    第十六届全国大学生智能汽车竞赛(西部赛区) 竞速组成绩及获奖情况公示 §01 成绩与奖项 第十六届全国大学生智能汽车竞赛(西部赛区)比赛于2021年7月26日-29日在重庆大学举行.现将竞速组竞赛成绩 ...

  3. 第十六届全国大学生智能车竞赛全国总决赛名单-公示版

    简 介: 本文给出了参加第十六届全国大学生智能车竞赛竞赛全国总决赛队伍名单产生办法与进入总决赛的队伍名单.此外,还有部分专项创新奖项名单以及三个创意组决赛名单将另行公告.第十六届智能车全国总决赛将采用 ...

  4. 第十七届全国大学生智能车竞赛华南赛区比赛成绩

    简 介: 本文给出了第十七届全国大学生智能车竞赛华南赛区比赛各个组别的成绩和相应的统计分析. 关键词: 全国大学生智能车竞赛,华南赛区,成绩 #mermaid-svg-bkikbVRN0X2cIV67 ...

  5. 第十六届全国大学生智能车竞赛全国总决赛获奖排行榜

    简 介: 今天来自重庆大学的同学询问是否重庆大学今年所获得的全国总决赛中的一等奖数量最多?他们总共有八支队伍获得了一等奖.为了确定这个数字,我对于今年智能车竞赛全国总决赛获奖信息进行了统计并进行了排序 ...

  6. 第十六届全国大学生智能车竞赛比赛获奖证书格式说明以及下载链接

    简 介: 本文给出了 第十六届全国大学生智能车竞赛 获奖证书的格式说明以及制作方法.证书的格式也参照了 第十五届智能车竞赛电子证书格式说明 .同时,获奖证书下载链接在后面给出. 关键词: 全国大学生智 ...

  7. 第十六届全国大学生智能车竞赛全部比赛胜利结束了

    §01 比赛胜利收官   第十六届全国大学生智能车竞赛 全部比赛项目截止到8月23日都已经进行完毕.由于受到疫情影响, 全国总决赛与东北赛区比赛 .两个创意组总决赛都采用了线上比赛的形式.   疫情可 ...

  8. 第十六届全国大学生智能车竞赛全国总决赛报名信息汇总

    简 介: 本文对参加第十六届全国大学生智能车竞赛线上总决赛的队伍信息进行了汇总. 关键词: 全国大学生智能车竞赛,线上总决赛 §01 线上赛点   根据 第十六届全国大学生智能车竞赛全国总决赛线上比赛 ...

  9. 第十六届全国大学生智能车竞赛RT-Thread创新专项奖获奖名单

    简 介: 本文给出了2021年第十六届全国大学生智能车竞赛RT-Thread转向创新将获奖名单. 关键词: 智能车竞赛,RT-Thread,专项创新奖 §01 RT-Thread创新专项奖 在2021 ...

最新文章

  1. 最全综述 | 图像目标检测
  2. Spark机器学习库(MLlib)指南
  3. SAP CO Report
  4. JDBC的CRUD操作之PreparedStatement的修改操作
  5. CodeForces - 1593G Changing Brackets(思维)
  6. mysql无法初始化数据库引擎_mysql使用模板解决旧数据处理,默认初始化数据的通用方法!...
  7. CentOS 桌面启动无登录界面
  8. Win下更新pip出现OSError:[WinError17]与PerrmissionError:[WinError5]及解决
  9. python输出函数使用_python基本输入输出函数
  10. 升级linux 4.9内核,Linux 内核 4.8 将不再更新 建议迁往 4.9 稳定版
  11. 关于Python、Anaconda、Jupyter
  12. ubuntu-16.04安装程序报错 you might want to run 'apt-get -f install' to correct these
  13. 让Internet Explorer成为你的软件集成平台
  14. win10使用命令提示符启用/关闭远程桌面
  15. saas和pass的区别
  16. 上海铭控 第二届“铭控Smart Sensor”奖学金颁奖典礼完美谢幕
  17. 《道德经的人生智慧》读书笔记
  18. vector的小用法
  19. MySQL 操作数据库_复制表
  20. 局部钩子能防全局钩子吗_这个英雄还值得我们去练吗?百里玄策打法难点解析...

热门文章

  1. Anaconda prompt下载模块失败解决方案
  2. 【ElasticSearch7.X】学习笔记(一)
  3. HTML页面缓存内容清理
  4. 计算机毕业设计Java搬家预约系统(源码+系统+mysql数据库+lw文档)
  5. 破解你的密码需要多久? AMD 450GB数据被黑
  6. HTML+CSS自定义树状图
  7. HTML5标签属性全在这里了
  8. 成都优优聚电子商务:促进转化的技巧
  9. Xcode framework 的编译及测试
  10. word嵌入对象依损坏_word的操作问题.