1. 前言
电机功率的计算模型在广工早已成为一种流传已久的知识。除了机械功率之外,其他项包括铁耗、铜耗、机械损耗和附加损耗,其中的计算都只是在试题中提供相关参数从而去计算,难以用以实践。同时,对于公式中的电流,我一直感到困惑。所使用的电流是PID控制输出给电调的电流值,而电枢电流与电调输出的电流存在差异。因此,我对开源的电机功率计算模型感到非常好奇,也由衷钦佩,尽管许多地方不够严谨,却能得到高置信度的结果。我推测这可能是某种经验公式,因为获取的电机参数有限,比如相位角和励磁电路参数等无法获取。因此,我一直希望了解这个公式背后的思路,但曾向广工请教时始终没有得到答案。
2. 无电拖基础获取电机功率模型
正常来说,根据电拖的直流电机功率公式去做会更好,但是对于没有电拖基础的同学来说,参数的选定以及意义会比较模糊,同时官方说明书的参数对我来说也感到比较模糊,干脆就只保留项数,直接拟合罢了
根据基础物理知识,功率 P = fV 。关于电机,可获取的参数有电机转速和发送的电流值,因此我们可以设功率模型为:
P = k_1 * n + k_2 * i + k_3 * n^2 + k_4 * i^2 + c
其中 n 为转速, i 为电流值。选择这些变量是因为只能获取这两个量,未知数的设置也只能如此。同时,虽然可以增加更多项以提高精度,但过多的项会导致冗余,并影响单片机的运算性价比。因此,选择一元和二次项更多地是个人习惯的体现。最终,通过数据采集并处理这些变量。
3. 数据处理
根据上述模型,可以根据个人的需求定义多个公式,但哪个公式最为准确呢?首先要采集数据,使用Vofa获取裁判系统返回的实时功率(这个应该毫无疑问吧,毕竟这是比赛的依据),同时记录电机转速和发送的电流值。将这些数据输入到MATLAB,利用多元线性回归进行处理,以得出 R^2 值,只要 R^2 在0.96以上即可使用。
4. 数据处理中的问题
如上所述,电流是PID控制的输出,有朋友可能会发现问题:因为电流输出是由PID计算得出的,有时可能出现冲击信号,导致无法进行有效拟合。

蓝:实际功率
黄:k*机械功率(k随便给的,当时只是观测置信度以及线性关系)
在这种情况下,我们需要引入观察器,使用卡尔曼滤波来处理数据,这可以在MATLAB或单片机上进行。处理后电流应达到平滑状态,以便于进行拟合。

红:实际功率
蓝:模型计算功率
R^2 = 96.7%
5. 闭环功率控制系统的搭建
可以注意到,连接超电后,裁判系统获取的实时功率与底盘实时功率匹配不上。裁判系统的实时功率是电管的输出功率,而进行功率控制必须知道底盘的实时功率。恰好有电机功率模型,且 R^2 在0.96以上,因此可以依赖模型轻松获取底盘实时功率。如果战队的超电功率板可以精准获取底盘实时功率,或者不连接超电,那模型就显得多余了,因为所有战队都旨在获取底盘实时功率,并提出了不同的方法。
根据上述信息进行阐述,该闭环系统实际上是一个串级PID系统。那么,为何这个系统能够实现功率控制?首先,从PID的本质来看,PID是一个线性系统控制器,而电机的功率模型也是线性的,因此PID可以用作功率环控制器。内环是速度环,也即功率环的输出作为速度环的期望输入。有朋友可能会质疑,这在不同的比赛场地(阻力不同、输出力矩不同)是否可行。然而,PID参数是固定的,意味着在相同误差下,功率环输出是恒定的。在极端地形下,如果系统出现超功率的问题,这需要注意的是PID不仅有位置式,还有增量式,而功率环的PID正是增量式。了解增量式的特性后,我们就能认清这个闭环系统的稳定性。
为更直观地检查系统稳定性,可以进行仿真。

系统的仿真(不严谨,仅用于验证系统可控性)
红:搭建的增量式pid
黄:simulink的pid controler
蓝:从电流发送值转为电流再经力矩关系计算最终输出为转速(此处不严谨,因模型那边需要的是电机的转速,但此时转为了轮子转速,但无伤大雅,最终都是以k倍的形式完成的)

黄:输出的速度曲线(因未进行调参,所以曲线不正常,但从图像可以看出,线性且可控)
6. 功率控制逻辑
闭环系统搭建完成后,通过调参可让底盘稳定运行在指定功率上,此时功率控制已完成80%。正常情况下,功率环的期望输入是兵种额定功率加上超电增益(增益的形式可自行决定,是否依靠数学建模或测试数据)。反馈则为底盘实时功率(如果没有超电,则是裁判系统返回的功率)。理论上,这个系统就可以正常运行,但仍有优化空间,因此进度达到90%。尽管能正常运行,但比赛中不总是顺利进行。例如,如果倒计时还有10秒,且对手处于复活cd,你可能需要在远距离内达成目标,这时仅上述的闭环控制可能难以满足要求。因此,需要设计一个状态机,确保机器人在不死亡的前提下,实现最快的速度以保证完成绝杀。控制逻辑基于官方血量和缓冲热量机制,以及自身底盘功率,这三者可以结合来实现此时进度为99%。
7. 剩余的1%
为什么还剩下1%?因为仍有细节可以优化,如此时两个机器人互联,且在不平整的斜坡上互相角力,系统很大可能因阻尼比大于临界值而导致系统不稳定,功率环无法快速调整,表现为机器人烧血致超功率死亡。这种情况下,功率环在超电耗尽后仍未调节回来,从而导致巨大后果。有人可能想到了,电流发送值要发送到电调了对于电机才有效,然后发送前的电流发送值已知,电机此时转速已知,那……这不就可以通过电机模型实现前馈控制。方式是,建立一个状态机,通过超电剩余能量判断是否低于自救能量(需自行测试并获取参数,即兵种在不同等级下,面对最大功耗时系统自我调节所需要消耗超电的能量),若低于则进入前馈控制。
前馈控制逻辑

理论上其实全部都由前馈去完成即可,但是求解k存在一定运算量,可能现在对于单片机来说还好,后面随着功能增加而导致吃算力,从而无法正常完成任务时,优化起来就比较麻烦,倒不如一开始就优化好,单独做个状态机使功率正常都不会去进入前馈控制以保证单片机更高效完成任务。
8.底盘运动优化
我拜读过西交利物浦的开源报告,其中对于负功率的处理实在是细腻,连超电返回到电源的功率都计算出来,但我认为那几瓦对于运动表现上来说有改善,但对于没有那么细致的要求的队伍来说,这个不做处理也可以,我觉得要完成机器人具有良好的运动表现这项要求,更重要的是pid的调参问题。
正常人可能会想,pid是很重要,但只用完成所需要的性能指标不就行了吗?相信有同学发现一件事,电流其实就是由pid决定的,是啊,电流就是有pid直接决定的,甚至说,转速也是由pid间接决定的。
我留意到这件事的时候已经晚了,那时已经是国赛失利的一晚了,自己负责的舵轮步兵走的慢就算了,比英雄慢多了,同时这么慢都能超功率死亡,说来凑巧,当时是第一版功率控制方案,采用一种跳过电机功率模型,直接构建一个并级控制系统,将底盘作为系统去控制,第一版在闭环系统构建中有瑕疵,在区域赛时,在全向轮步兵上效果出色,在英雄上表现为可圈可点,但在国赛中,出现了通道超载,超功率死亡等现象,这让我深知,区域赛并不是没有问题,而是没有暴露出来罢了,系统就是不够稳定,就是可控性不足!因此,从来没有去留意过pid输出时的波形……
当调电机时,通常会让电机足够硬同时响应够快,在调底盘时,我也遵循这个基准,让兵种能越过各种艰难地形,但电机太硬的情况下表现出来就是现象很稳,但是波形呈现白噪音的样子,且幅值不算收敛,所以在功率上面的表现就是特别吃功率!
所以在这版功率控制方案完成时,本人同时做出了一版解决方案,未必算好,但是算提供一种解决思路吧。
解决方案(此处以功率间接控制输出力矩以克服不同阻尼力矩):

9. 私人调参心得
我发现网上很少有关于增量式PID调节的详细讲解,如果有兴趣的话,未来我可以写一下个人经验。我的见解不一定权威,仅是一个普通忍的分享。

10. 声明
以上内容是第二版,于2024年9月13日独立完成的,非战队使用版本。
第二版没有上赛场实践,同时在不同地形的跑动不多,然后是经过上机去进行暴力测试,对不同轮子施加不同的变动负载转矩,得出结果为稳定性和效果均不错。如果在实现过程中遇到问题,直接向我询问就好了。
最后,若有不合理的地方请轻喷并指出,玻璃心(┬┬﹏┬┬)
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删