第十九届智能车竞赛越野信标组——(1)整体架构

一.比赛说明

1.本届智能车竞赛也到此结束了,虽然留有遗憾,国奖的实力但是由于种种因素还是差强人意,但是有一些自己备赛时候的心得和想法,不想因时间的流逝而淹没。

2.身为软件组,在拿到一个赛题后,了解本组别的完赛要求,接着就要学习所需要外设的例程,拿越野组来说:电机、舵机、GPS模块、按键、显示屏、硅麦等等,然后就要结合各种算法组装成一个工程,最后就是调试阶段,根据小车的运行轨迹来发现各种问题并且给出相应的解决方法,将解决方法用代码写出来。

二.整体架构

整个工程是由状态机(学长教的)以及各种标志位串在一起,状态机是由事件标志位、事件、状体组成。

假设现在状态为STOP状态,在代码中给一个START标志位,根据状态转换表的第一行可以跳转到START状态,就会执行在START状态下的各种代码。

每一种状态都会有初始化、执行、扫描函数。当第一次进入一个状态后,会先执行他的初始化函数,接着是执行函数,接着是扫描函数,如果标志位和此时状态和下一状态在状态转换表内没有,就会一直在本状态的执行函数内。

1.起步状态:

由于一开始要把陀螺仪和GPS坐标同步,所以有两种方法,一种是车头对北,另一种是我在用的,先跑一段直线,然后把GPS航向角给到陀螺仪的初值。

所以在此状态我会设置一个1.5s的定时器,以固定速度和固定角度跑直线,当1.5s结束后定时标志位置1,此状态结束,将GPS航向角给到陀螺仪的初值。跳转到下一状态:加速状态。

2. 加速状态:

加速和减速有一个心得就是不要猛的减速,这样会导致车超调,且不能准确减速到目标速度,这个我会在后面的速度决策写出来。

此状态我分了三个状态,大弯道、小弯道、小于45°的直道(根据目标角度和此时角度之差区别的)

每个状态的速度都不一样,让速度和目标角度和此时角度之差的绝对值呈线性变化。在比赛阶段,由于地上都是积水,所以弯道降速尤为重要。

在此状态最重要的一个东西就是,直道判断,当目标角度和此时角度之差小于7°且保持200ms,给个直道的标志位,将GPS航向角重新赋值给陀螺仪,因为陀螺仪在短时间很精确,但是长时间就会出现很大的积分误差,特别在大转弯。所以这个直道处理就可以将陀螺仪积分清零,且GPS航向角是非常准确的,这样对小车的路径是有明显的矫正。当GPS距离小于7时进入减速状态

3.减速状态

减速不要直接给个目标速度或者直接开环给负占空比,我是每个周期减去0.3左右,速度曲线如下图所示,可以使小车平稳的过渡减速状态。

这里在说一下声音距离:因为我发现GPS本身是飘所以GPS距离是不太准确的,所以我利用车头的一个硅麦,将1024us内的ADC的绝对值累加起来再×0.001,可以得到声音强度,离信标近则大,离信标远则小。有些人可能会怕电机加减速会很有噪声影响,但是我使用声音强度是在车降速以后再使用,所以影响不大。

当小车速度降低到设定速度后200ms且声音强度大于7时会进入下一状态:声音状态

4. 声音状态

我是用0核心结算声音角度,然后用ips传到1核心。

至于怎么传不止一个数据,其实很简单,如下图

声音状态下时,以声音角度为此时值,0(车头方向)为目标值,传到PID进行计算然后给到舵机。

在调试过程中,我发现倒车状态特别容易影响,因为声音角度结算周期较长,所以我直接把倒车给删了,加上大翅膀,很有用,节省时间。

当lora变化时,则进入加速状态,由此不断循环。

lora放在100ms的中断里,放在主循环或者10ms的中断会出现切换有问题。

  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值