发弹延迟测量

目的:测出从视觉发出发弹指令到弹丸被摩擦轮射出的延迟时间,以方便视觉进行预测。

思路:在拨弹轮拨弹时记录Tick1,在摩擦轮转速检测到完整的下降上升沿时记录Tick2,两者相减得到当前延迟时间,再进行低通滤波。

从轮询函数里面可以看到有摩擦轮检测的地方,目前打算从这里修改检测算法,预计能达到2ms的精度

从这里改完以后移植到云台线程就可以达到1ms精度

在func_gun.c的FireCmd_Check中,最后对Fire_Flag进行判断,如果为1就表明收到了发弹指令

让Fire_CalTime_Flag = 1表示是否需要计算延迟时间

让Fire_Send_Tick = rt_tick_get() 表示发送时的电控时间

在Rub_Shoot_Check中进行上升沿和下降沿的检测

思路是当没有检测到下降沿时,对当前读到的摩擦轮转速进行低通滤波得到空转转速,然后依据它得到阈值。

当检测的摩擦轮转速低于阈值时,打上下降沿标记。

当摩擦轮转速高于阈值并且打过下降沿标记时,表明检测到上升沿,记录现在的Fire_Shoot_Tick并与Fire_Send_Tick相减,得到延迟时间

从jscope上面看到的摩擦轮速度是有明显的单调性,没有出现上下波动的情况,所以判断上升沿采用了单次超过阈值检测。

但是在后来用jscope观察数据时,出现了Fire_Shoot_Tick和Fire_Send_Tick有差值,但是deltatick一直是0的情况。导致这种情况出现的原因大概由于deltatick没有在后续使用到,编译器把他优化掉了,因此jscope无法读出它的数值。

解决方法:在deltatick的定义处加上__IO,防止被编译器优化。

目前检测到的延迟普遍在40ms左右,应该比较可信。但是有的时候会出现10ms左右的延迟,不是很清楚原因。感觉有可能是摩擦轮转速在阈值附近波动了一下?

有考虑过累积多次超过阈值再进行判断,不过当时感觉有可能会导致测得延迟比实际延迟长,所以pass掉了。现在看来也许可以加上,因为2ms对于40ms来说也不算太大,加上以后再测试一下是否会出现这种情况。

更新:

步兵延迟

define LAUNCH_ANG_PID 25, 0.1, 190, 0.5, 500, -500 // 播弹盘电机角度环 PID

define LAUNCH_SPE_PID 110, 5, 0, 600, 9000, -9000 // 播弹盘电机角速度环 PID

define LAUNCH_ANG_PID 27, 0.1, 190, 0.5, 500, -500 // 播弹盘电机角度环 PID

define LAUNCH_SPE_PID 100, 5, 0, 600, 9000, -9000 // 播弹盘电机角速度环 PID

define LAUNCH_ANG_PID 27, 0.05, 190, 0.5, 500, -500 // 播弹盘电机角度环 PID

define LAUNCH_SPE_PID 100, 5, 0, 600, 9000, -9000 // 播弹盘电机角速度环 PID

define LAUNCH_ANG_PID 27, 0.15, 190, 0.5, 500, -500 // 播弹盘电机角度环 PID

define LAUNCH_SPE_PID 100, 5, 0, 600, 9000, -9000 // 播弹盘电机角速度环 PID

define LAUNCH_ANG_PID 27, 0.05, 190, 0.5, 500, -500 // 播弹盘电机角度环 PID

define LAUNCH_SPE_PID 120, 5, 0, 600, 9000, -9000 // 播弹盘电机角速度环 PID

平步连发导致测试时间短,后面经常会跟一次空拨

define SET_BOOSTER_ADDRATIO (0.019f) // 拨弹叉每次运动到发射点之后继续转动的角度 单位:弹丸

define LAUNCH_ANG_PID 20, 1.3, 70, 1, 650, -650 // 播弹盘电机角度环 PID

define LAUNCH_SPE_PID 160, 0.16, 300, 800, 9500, -9500 // 播弹盘电机角速度环 PID

碳步

目前参数

//17, 0.1, 190, 0.5, 500, -500
#define LAUNCH_ANG_PID 27, 0.05, 190, 0.5, 500, -500  // 播弹盘电机角度环 PID

#define SET_BOOSTER_ADDRATIO (0.019f)                    // 拨弹叉每次运动到发射点之后继续转动的角度 单位:弹丸
//#define LAUNCH_ANG_PID 14, 1, 70, 1, 650, -650          // 播弹盘电机角度环 PID
//#define LAUNCH_SPE_PID 160, 0.14, 300, 800, 9500, -9500 // 播弹盘电机角速度环 PID
#define LAUNCH_ANG_PID 20, 1.3, 70, 1, 650, -650          // 播弹盘电机角度环 PID
#define LAUNCH_SPE_PID 160, 0.16, 300, 800, 9500, -9500 // 播弹盘电机角速度环 PID

英雄延迟

一格200,可以看到基本上都在600ms左右浮动

另一次连续发弹

40发连发

更改bug:有时测得延迟为4

200ms/格

基本稳定在600~650ms

单发情况:

绝大多数稳定在1200~1800ms内

posted @ 2025-04-07 09:36  小蒟蒻皮皮鱼  阅读(43)  评论(0)    收藏  举报