站内搜索
发作品签到
基于天猛星的智能小车(24年H题)
专业版

基于天猛星的智能小车(24年H题)

1.9w
0
0
15

简介

基于天猛星制作的智能小车,能够稳定完成24年H题所有任务要求(第四问目前完成时间50s以内,且实测十次成功九次)

简介:基于天猛星制作的智能小车,能够稳定完成24年H题所有任务要求(第四问目前完成时间50s以内,且实测十次成功九次)
电赛TI训练营-简易PID项目

开源协议

CC BY-NC 4.0

(未经作者授权,禁止转载)
创建时间:2025-04-28 22:20:38更新时间:2025-06-11 17:39:47

描述

视频链接:

B站视频--【基于天猛星的24年H题智能小车】 https://www.bilibili.com/video/BV1MTMjzwE8C/?share_source=copy_web&vd_source=c5ba158dd826b2b850e8a51b5ecb94f8

自动行驶小车(24 年 H 题)

前言

两个电赛小白经过两个月的摸爬滚打,终于从网上纷繁复杂同时语焉不详的众多资料和一次次低效调试中做出来了属于我们的智能小车,能够稳定完成24年H题所有任务要求(实测十次成功九次)。以下是学习过程中积累的一些经验和心得,希望能给尝试挑战这个题目或者是希望制作出自己的智能小车的同学们一些帮助。

摘 要

本作品基于MSPM0G3507芯片为主控的天猛星开发板,采用两驱动轮+牛眼轮结构,结合直流电机、霍尔编码器、维特九轴JY901S陀螺仪、灰度传感器、无线串口等外设,设计了一辆自动行驶小车。在有黑线引导的部分采用灰度传感器与惯性导航相结合的循迹方案,在无黑线引导的部分,采用惯性导航的方法完成循迹。我们编写了位置式 PD 控制器(方向环|循迹环)和增量式 PI 控制器(速度环),来确保小车行驶过程的稳定。 本作品经过测试,完成了直线、斜线等航向角固定的惯性导航任务和黑线的循迹任务。

关键词:惯性导航;MSPM0;PID 控制;

自动行驶小车(H 题)

一、系统方案设计

系统方案描述

本系统主要由陀螺仪模块、电源模块、驱动模块、单片机模块、电机与舵机模块、灰度传感器模块、屏幕显示模块组成,下面分别论证其中最主要的几个模块的选择。

系统结构图如图所示

图片2.png

图1 系统结构框图

主控

采用 天猛星 MSPM0G3507 作为主控。MSPM0G3507 是一款主频为 80MHz 的高计算性能 MCU,具有 128KB Flash,32KB SRAM,60 个 GPIO,在通信方面具有 4 个 UART,2 个 I2C,2 个 SPI,1 个 CAN。丰富的外接 GPIO 与通信资源使 MSPM0G3507 能够较好地满足本题目的要求。

天猛星在本项目中的重要优势

  • 防反接电路设计 ,节约烧板成本
  • 立创提供了原理图和PCB封装,大大节省硬件设计进度
  • 方便的BSL和RESET按键,锁板了能马上解锁,继续战斗
  • 其上设计的8pin屏幕接口也非常方便我们放置OLED,LCD屏等,大大节省了扩展板的空间
  • 立创开发板提供了丰富的例程资料可供参考,单论sysconfig的配置就能让小白少走很多弯路

陀螺仪的论证与选择

1. 六轴姿态传感器方案

- 测量数据:三轴加速度计+三轴陀螺仪

- 技术优势:

* 数据处理和融合算法相对简单,易于实现和调试

* 无需磁力计校准环节

* 俯仰角和横滚角通过加速度计与陀螺仪融合可获得较高精度

- 航向角特性:

* 平面短时导航可满足基本惯导需求

* 室外应用需结合EKF等算法融合GNSS数据提升精度

2. 九轴姿态传感器方案

- 测量数据:增加三轴磁力计

- 理论优势:可提供更精确的航向角测量

- 实施挑战:

* 需进行磁北校准和磁力计校正,实测校准操作比较难

* 易受电机等周边磁场干扰,影响姿态解算稳定性

综合评估:

鉴于六轴传感器在系统复杂度、环境适应性和实现难度方面的优势,同时考虑到短时平面导航的航向角需求可被满足,推荐采用六轴传感器方案。该选择在保证核心功能实现的同时,有效降低了系统开发风险和调试难度。

黑线循迹方案

采用灰度传感器与惯性导航进行循迹。在黑线区域使用 8 路灰度传感器进行巡线,在无黑线的区域使用纯惯性导航(主要依靠编码器和陀螺仪)完成任务。

二、硬件设计

1.电源板

关于电源板,电赛中常见的是直接使用TB6612模块驱动智能小车,但该模块存在电池电压超过12V容易烧毁,同时因为是成品,电流输出能力被限制住,不能很好的适应智能小车的需求。

我们小组自行设计了一版电源板,主要的设计思路其实也很简单,首先确定核心芯片,然后阅读数据手册直接复制参考电路,最后按照自己的需求,根据手册的公式选用合适的电阻电容即可。这里推荐深入了解自恢复保险丝,能够有效保护电源板不被烧毁。

2.扩展板

关于扩展板,核心的设计思想还是先确定模块,然后阅读数据手册,确定模块的各个引脚有什么功能,以及是否需要外接上拉电阻这些细节,然后建议先熟悉各个通信协议,同时一定要结合sysconfig去分配引脚,因为有些功能只有特定的引脚有,而且还是具备一定的配对关系。

最后就是模块化的设计思想,一个模块一个模块的画好原理图,做好文字说明。

3.PCB绘制

建议先到立创开发板官方文档学习基本的绘制技巧,对于这种简单的二层板,最重要的就是先布局,可以结合着立创EDA的3D功能去看看是否紧凑且美观,当然还要方便焊接,不能过于密集,布局好了就可以结合着前面提到的扩展板的设计要点去就近分配引脚。有这样一句话,好的布局就成功了一大半。然后就是布线,这里是不推荐自动布线的,手动布线,可以从左到右或者从上到下去布线,一边布线一边发现自己分配引脚的不足,使用交叉选择来调整引脚连接位置,最重要的一点是布线的宽度,像电源线一般得30mil以上,越大越好,防止大电流烧断导线,信号线一般10mil足够了,太宽也穿不过开发板的引脚中间的空隙,不好布线。

布线完毕,我的习惯就是先去工具里面自动设置泪滴,然后两面铺铜,这里铺铜就是连接GND了,大的地平面有利于扩展板正常运转,当然你也可以设计三层板,中间或者下面一整层GND,效果更好,成本会高一些。

4. 焊接

关于焊接,我的建议是不妨先去淘宝买一些焊接练习模块,先练好焊接技术,再去制作智能小车,不好的焊接习惯就容易虚焊,例如先放焊锡再加热焊盘是常见的错误,至于乱焊一通,贴片立起来像石碑,或者是反复焊接,焊盘都没了,那不成功是很正常的。我的习惯是400度焊接,用好的焊锡(维修佬),建议不要省这个钱,好焊锡一焊就成,然后先焊好低的贴片,再焊高的直插元件,这样就不会互相阻碍,当然手头有万用表的可以拨到电压档,一端接地,一端接焊接好的地方,尝试上电测试,这样更为稳妥,不过优秀的焊接往往可以节约了这个时间,实际使用过程发现哪里不工作再测试就好了。

三、理论分析与计算

增量式 PI 控制器(速度环)

我们使用MG310电机作为车辆的动力部分,其配套的霍尔编码器通过单片机的20ms定时器中断测量速度,为了达到速度的快速响应,这里使用增量式 PI 控制器。

位置式 PD 控制器(方向环)

对于三轮的话,由于已经得到了比较精确的角速度和角度值,所以为了获得更加丝滑的控制结果。我们使用的是串级 PID 的控制方案,将角度环作为外环,将角速度环作为内环,外环的输出作为内环的输入。可以显著提高系统的响应速度、控制精度和抗干扰能力,同时减少超调和振荡现象,其控制框图如下。

屏幕截图 2025-06-11 084214.png

图 2 方向环串级 PID 控制框图

车辆轨迹控制(惯导参数的计算)

在黑线存在的区域,我们采用 8 路灰度传感器循迹。在黑线不存在的区域,我们使用惯性导航进行循迹。我们的惯性导航循迹思路如下,航向角直接解算,解算出来的是-180°到 180°的航向角,这里要注意角度跳变问题,我们在角度环pid写了角度跳变处理。由于题目比较简单,所以不需要进行航位置推算(EKF融合解算当前位置),只进行角度控制即可。直接将载体坐标系的目标航向角给到方向 PID 控制器的目标角即可。最后结合编码器的积分里程和灰度传感器的数值,结

束惯导状态。进入黑线循迹状态。

图片3.png
图 3 惯导循迹思路展示

四、程序设计

程序设计

  1. 硬件层

这一层是各个模块的底层驱动代码,例如OLED屏的软件I2C代码,字库都可以放在这一层。如果是打电赛的同学,日常多去了解常用的模块,多看看立创的例程去编写好硬件层,积累起来能够节约很多时间,这里对于小白不太友好,建议先把原理看明白了再复制例程过来理解修改,形成自己的代码。

  1. 中间层

这一层是实现各个模块的基础功能,还是以OLED屏为例,在这里可以编写好基础的OLED显示功能,例如显示一个点,一条线,一条字符串。

  1. 应用层

这一层完全可以认为是上层建筑,有了前面两层,你基本不受硬件的限制了,直接调用底层功能函数,去实现你的任务就可以。在这个阶段,各种工程的代码基本是通用了,STM32的一样可以拿过来给TI用,只是功能函数命名不同,真正是思想的自由。

主程序设计思路

硬件层:陀螺仪数据读取、编码器数据读取、循迹数据读取、按键消抖及功能设定、OLED显示、声光模块

中间层:pid运算、编码器中断测速(最高优先级)

应用层:角度pid(陀螺仪)、位置pid(循迹)、速度pid(内环)、定点转pid(陀螺仪)、状态机

在主程序中,主要进行初始化和按键检测以及状态机的切换。

流程图

图片4.png
图 4 主程序流程图

五、测试方案与结果分析

测试方案

测试条件:在室内灯光条件下,场地使用白色哑光喷绘布,弧线使用 1.8cm 宽的黑色胶带,依次对四种不同的路径进行测试,每次测试进行多次测量。

测试结果

路径:A->B

将小车放在位置 A 点,小车能自动行驶到 B 点停车,停车时有声光提示。

表 2 第一项测试结果

测试序号用时是否触发声光提示用时是否小于 15s
12s
路径:A->B->C->D->A 绕行一圈

将小车放在位置 A 点,小车能自动行驶到 B 点后,沿半弧线行驶到 C 点,再由 C

点自动行驶到 D 点,最后沿半弧线行驶到 A 点停车,每经过一个点,声光提示一次。

表 3 第二项测试结果

测试序号用时是否触发声光提示用时是否小于 30s
110s
29.5s
39.7s
路径:A->C->B->D->A 绕行一圈

将小车放在位置 A 点,小车能自动行驶到 C 点后,沿半弧线行驶到 B 点,再由 B

点自动行驶到 D 点,最后沿半弧线行驶到 A 点停车。每经过一个点,声光提示一次。

表 4 第三项测试结果

测试序号用时是否触发声光提示用时是否小于 40s
111s
211.5s
311.8s
路径:A->C->B->D->A 绕行四圈

将小车放在位置 A 点,小车能自动行驶到 C 点后,沿半弧线行驶到 B 点,再由 B

点自动行驶到 D 点,最后沿半弧线行驶到 A 点,自动行驶 4 圈后停车。

表 5 第四项测试结果

测试序号用时是否触发声光提示是否偏离轨迹
150.1s
249.3s
348.9s

以上测试中,小车均未偏离轨迹。但是当小车连续运行圈数超过 6 圈后,就会产生比较明显的偏差。

误差分析

在测试中过程,我们发现与预期轨迹产生误差的原因主要有两个:

    1. 在车模运行的过程中,由于轮子侧滑可能导致编码器积分里程计数不准确。(使用摩擦力更强的橡胶轮)
    1. 在运行的过程中,由于没有地磁计,惯性导航的航向角会随着时间进行累计。(停下来定点转)

六、简易PID入门项目

主要参考了同样基于天猛星的简易pid套件项目,里面从硬件层的电机驱动,编码器驱动,到中间层的位置式pid算法实现函数,最后是智能小车里最为常用的定速pid,定距pid,都做了详细的讲解,而且还给出了极为实用的pid调整方法,直击电赛难点,为李工的专业点赞。

实际移植过程有几个需要注意的地方:

  1. 首先是依旧需要了解好P,I,D三个参数,这里我的理解就是P是主要调整力,相当于发动机,I是不断积累的调整力,主要是应用在恒定误差存在时,比如电机的死区,D则是预测的力,能结合误差的变化趋势去修正pid输出,使调整效果能更好的适应不断变化的环境。网上也有很多教程,不过有的过于专业复杂,我们只需要知道改变这个参数会带来什么变化就可以。
  2. 其次理解好输入的目标值和反馈值以及输出的是什么也很重要。我的理解,目标值就是目标所对应的数值,反馈值就是相应模块当前的测量值,这两个一般是单位一致或者有密切关系的,输出的是抽象量,直接给予电机这个能改变模块测量值的进行调整就可以。
  3. 然后是pid的移植,这里教一个快速的方法,可以直接ctrl+F搜索相关pid,例如speed_pid,然后把你想要使用的pid(智能小车的常见有陀螺仪的pid,循迹的pid)替换进去就可以啦,主要是ui,事件管理器和按键驱动部分的代码需要修改。
  4. 最后,是pid的初始化,这个是需要特别注意的,如果没有初始化,要不就是pid失效,要不就是之前一个过程的pid运算中间量还继续影响下一个过程,导致系统的振荡。

E51CB5EF3349E098EDF8E3AC36E6AD75.jpg
图5 简易pid助力小车pid快速调试

七、结语

代码地址(基于CCS进行开发)

https://gitee.com/xthhlxh/autocar

未来展望

当前硬件配置可以说只适合电赛,精度很好但是成本偏高,后面打算换成MPU6050,TCRT5000和TT减速电机给大家提供一个更便宜的方案去学习如何制作智能小车。

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
HnVideoEditor_2025_05_24_223743047.mp4
228
2
mmexport1747750453711.mp4
89
3
mmexport1747750480462.mp4
29
4
mmexport1747750510602.mp4
30
5
Video_251272328222948.mp4
39
6
HnVideoEditor_2025_06_11_152736369.mp4
65
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航