舵轮解算
煜烽舵轮代码
可以说是东大18舵轮的简易版,相比东大以x,y位置和速度解算,现在只是单速度运动解算。这份代码可以算是队里的1版舵轮了吧。
实现的效果就是3个轮子都当成一个整体。转过180°的时候不会自动取反,自旋得等到各自轮子转到固定的位置。
而对于全场定位的数据来说,就是外接一个位置环,将速度的控制改为位置的控制。
1 | /** |
z舵轮代码
基于煜烽代码进行改进。
实现的效果,有优弧劣弧处理,自动算出各个轮子到目标角度的最小距离,并判断轮子正反。
1 | void AGV_Calculate(float *Vx, float *Vy,float *VOMEGA) |
问题的解决
绝对式编码器超过2个就有一个不接收,拔插就好了
解决办法:厂家的代码问题,2个以上的编码器同时发送会造成ID错误,从而不接收,找到厂家进行升级就能解决。
但在我放假期间确实以一个很奇妙的方式解决了这个问题,就是2个编码器插在CAN1口(分开几个can口插入,中间隔着几个can设备),剩下的插在CAN2口,就这样相安无事的度过几天后,李公子把线一拆,舵轮一升级就找不出如何复原的办法。所以最稳定的方法还是找厂家升级。
ps:好像应该放在编码器的文件讲,但现在想到了就先写着,等编码器那篇文章更新再进行迁移。
舵轮启动的时候会有卡顿声
这个我推测是因为本杰明编码器在底层上对于RPM值少于800的是不进行控制的,如果遥控器缓慢推进是不会有,所以怀疑是启动和停止时的加速度过大的原因,加个斜坡函数就行了。
重启后,有一个轮子有概率反向
不知道这个问题解决没,本来我遇到这个问题怀疑是编码器的问题,因为50圈为最大值,减速比为4,除不尽,可能会出现过50圈后重启位置就对不上的问题,但后面测试的时候是有时候会出现一个轮子反向,我的解决方法是开机启动的时候用遥控器来做一个判断校准,即遥控器的某个按键按下,轮子其中一个就反向。
我这个方法姑且是解决了,但没完全解决。本来是考虑写进flash再读出来的,但频繁的写入也不太好操作。
个人建议
底盘还是得加斜坡函数,不然启动的时候会有很大的摩擦,对于上层机构很不友好。