从最开始和 RPS 比赛时的状态频出,到第一局败给青岛大学未来战队,RoboWalker 开始受到越来越多的断代质疑。
事实也确实如此,一批打了三年甚至四年的老队员的离去,让 RoboWalker 真正成为了一艘忒修斯之船;但是也不完全,因为老队员都能联系到,有问题也都能问,甚至老队员还会来救火,让人感动也让人深思:新队员如何能成长为足以担起比赛任务的合格队员呢。
对于第一次面临传承的 RoboWalker 来说,这确实是一个挑战;事实证明,我们做的准备还不够充分。显然我们直到比赛前,还活在去年的胜利中,带着一种迷幻的自信,用相同的策略在已然完全不一样的队伍基础上备赛了8个月;其结局本是显而易见的,就是完全的队伍实力倒退,车辆的不稳定性剧增,背后是测试的进度的陆续暴雷和测试的极度缺失。
具体的问题一边记录一边说吧,我会先从时间顺序来讲述一下从 17 号到 26 号这 9 天的参赛历程,主要从我的视角来讲述,谨以此对这总睡眠时长恐不足 24 小时的区域赛作以纪念。
2026.5.17
抵达济南的第一天,天气好得出奇,坐了一个小时的地铁抵达奥体中心站以后,又花了一个小时,步行过露天足球场、人民法院、第一附属医院、军委办公处,绕了一大圈才到了宾馆(后来发现,再坐一站可以少步行将近40min);酒店在一处公寓楼的 12 层,电梯晃晃悠悠的(这是一个伏笔,后面发生了电梯中途故障拨通 119 救援的事件,虽然与我无关),酒店楼道里充斥了一股劣质香精的味道,但是房间还真是挺大的。
入住后,我开始做最后的自瞄对于基地装甲板的适配修改;由于基地标签与前哨站的相似性较高,去年的 cnn 是将两者同样认作 outpost 的,使用的是大小装甲板的检测逻辑来进行区分;而今年基地变成小装甲板之后,这个逻辑自然失效了,于是只能暂时将基地也当作前哨站,姑且忽略这个30度的角度差带来的影响;又因为缺少基地装甲板贴纸因而我们又无法测试效果,只能先这样用。
改好以后,来到调试场地卸车。这次的场地相较于去年的长沙好上很多,不仅有空调,甚至还有 WiFi 可以使用,便捷了我们进行 Vibe Coding(不是)。经历一番复杂的物资华容道后,暂时休整了下来,场地的使用时间是晚上九点到早上九点,我们和安信工以及南科大共享一块场地,同时也有霞客湾和华东理工的镖组在这里调试飞镖。
这之间,我留在物资存放点,哨兵组比较会享受,出去下馆子吃了饭;但是后面大概是没有这样享受的时光了。
晚上初调试,为每辆车初步部署了自瞄,并带着四个算法组自瞄小朋友做了标定和测试,第一晚没怎么睡,因为第二天检录以及定妆照算法组无人参与,可以休息一天。
2026.5.18
早上七点,物资收拾好后,我九天里唯一一次回酒店睡了觉,下午起床后,我总结了一下目前的自瞄部署情况以及调试情况,发到了群里;这时看起来进度尚且良好,并且龙队也在对雷达反制无人机做新的方案;晚上依旧是照常的调试和部署,将自瞄分为了 Base Hero Drone 三个分支;原定的更改是 Drone 分支全部使用下位机 PID 控制,Hero 的 Pitch 发 Target,Base 给步兵用;但是在这里我犯了第一个 Git 上的错误:多次的 Merge 导致 Git 看起来极其混乱,本来应该用 ReBase 来操作的。
但是目前为止都还好,实现的一些新功能也正常测试;发现的主要问题是规划效果相比去年的有明显的、未知原因的劣化,这个现象伴随了我们九天,最后也没有解决。 不过我们还是主要把中心放在了对 PID 的调试上,让 PID 能更好地跟上 MPC 规划的结果。
2026.5.19
依旧是调试日,今天飞了无人机,发现了我们的第一个 Bug:切板逻辑存在问题,无人机开启自瞄后观测前哨站时,会跟着一个装甲板绕圈,而不是切换到下一块继续跟随。 今晚便主要是就这个 Bug 进行修改和测试,我们联系到邵哥对这段冗长的 if-else 逻辑进行了 Debug 并初步解决了这个问题。
2026.5.20
今天对战中石油华东,状况频出;先是自瞄全部没有,再是一台轮腿站不起来,另一台直接下电了,再是镖全打在门上了;全场英雄、无人机、雷达、工程相对正常,场间紧急调整曝光也非常混乱,这时我们才发现场地的曝光存在一定问题,但是还不清楚具体的调试方向,我当时的初步判断是场地很昏暗,因此调高了曝光时间测试。
晚上,他们优先调试轮腿的基本功能,但是却很难复现场上的状态;仿佛在场下是一切正常的;然后依旧是自瞄的调试。
我将步兵英雄的自瞄给了小朋友们测试,主要看无人机的自瞄效果,然后发现了切板的 Bug 并没有完整解决,在我们设定的切板逻辑切换阈值转速处,规划值会发生剧烈的抖动,导致云台震颤;后面依旧是联系邵哥调整了这部分逻辑来尝试修复,取得了一定效果,让无人机能够在家里正常打前哨站了。
英雄的问题则是弹速减弱下的弹丸判定极其严格,歪一点点就会被判定为小弹丸伤害,因此我们对英雄自瞄添加了一个较为严格的开火控制逻辑,但其同时又存在一个发弹延迟的问题,让它很倾向于打击离去的装甲板,我们通过增大发弹延迟的预估来简单地优化了这部分逻辑,但是后面我们知道这个所谓的发弹延迟其实并非是真的发弹延迟,两个 Bug 凑到一起后反而解决了问题。
步兵的问题来自新步兵的云台容易震颤,老步兵基本不需要调试;经过一夜测试后,我们自以为将自瞄优化得差不多了,但是还是出了问题。
2026.5.21
今天是小组赛第一场,对战青岛大学。步兵起不来的问题再次出现,两台步兵均为半残状态,无人机场上依旧没有前哨站自瞄,只有一点点的对地自瞄,英雄依旧打不中人,飞镖也依旧打不出来,死一般的沉寂,我瘫坐在众人后面的栏杆边上,感到去年未曾有过的绝望感;场间我尝试调整了无人机曝光,但是结果是一点自瞄都没有了。
下来以后,我们开始对照去年的区域赛曝光参数,一点点修正我们场上应该使用的曝光;也就是在这个过程中我们发现了今年场地曝光的特点:只有顶光且黑暗。这导致前哨站目标的漆黑一片和地面目标的高亮度;最终我们尝试将无人机的曝光时间设置到了 1.1 ms,才将亮度对齐到了去年的区域赛曝光,同时前哨站依然是一片漆黑。对应的,我们给其他车也都换了曝光参数,统一给到了 900 us 左右。
2026.5.22
小组赛第二/三轮,塞翁失马环节;青岛大学对上了起源,我们得以和一支也存在较多问题的队伍进行比拼;这一局无人机有了对前哨和地面的自瞄,但是都不多;英雄的打击效果达到较好水平,步兵依旧站不起来;虽然胜利了,但是没有人笑得出来。晚上回去以后,我们单独查了一下 Detector 部分,发现对前哨站存在较多的误识别情况,于是我们使用采集的数据增强训练了一个版本的模型,然后在家里测试了前哨和地面的效果均达到了一个相对正常的水平。英雄进行了正常标定,并尝试进行了 MPC 的调参优化。步兵则专注于找问题和测试底盘,但是还是没有发现问题所在,最后草草调试了自瞄了事。
2026.5.23
小组赛最后一轮,步兵正常了一点,出线了。但是发现无人机能打前哨打不了地面了,虽然在家里测试都正常,看 log 感觉是对同一个目标的跟踪丢失;于是和龙队唐师傅讨论了两个小时的方案,改了 MPC 状态机的一个小逻辑,从比较诡异的计次改成了队列,测试没有什么区别就结束了,这时候已经完全熬不动了,其实或许调参可以改善很多问题。不过好消息是,步兵组发现了趴窝的两个原因,一个是烧写器外接线的异常电信号,一个是底盘 xsense 接线不稳。
2026.5.24
淘汰赛第一轮,步兵终于是正常了,但是工程出现了图传电机掉线的问题,后面检查发现是三相线烧断了;第一局赢的很意外,第二局哨兵调整策略后也 OK 了,但是缺失了工程的经济支持让其他兵种没能及时压制;接连输了两局比赛。士气极其低落,很茫然无助,又由于工程有意冲撞被喷不尊重对手,心里更不是滋味了。回去以后回退了无人机的代码,尝试调参数来让他可以瞄地面目标。英雄步兵正常标定调试。
2026.5.25
复活赛名额争夺,成功了,但是步兵反馈自瞄打不出来弹,但是事实上开火控制对于步兵是不生效的,这又是一个未解之谜。
综上,区域赛就这样草草结束了。像是一场混沌的梦一样,期间曾有几天整天的吃不下饭,凌晨的时候点一些烧烤奶茶吃了才有点精神,上场前总有要昏过去的趋势,可能是低血糖了。比完赛后也许是因为肾上腺素的原因,不困也不饿了。
总的说下来,算法这边的问题主要还是缺少 merge 后的逐步测试,全部的修改耦合在一起进行测试,导致很难能定义到问题的根本;其他方面的问题也有很多,不过都是次要的了,只能说 RM 本质确实工作量证明比赛,一个一个解决吧,慢慢来。