Skip to content

defectedrobot/defectedrobot-preliminary

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

67 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Defected Robot

本仓库是故障机器人队在 2026 腾讯开悟/大学生服务外包创新创业大赛 D02 赛道“四足机器人强化学习挑战”中的代码实现。

比赛成绩

  • 队伍名称:故障机器人
  • 比赛结果:北部赛区第十名 晋级区域赛决赛

我们的模型

当前主线是一个轻量 PPO 策略网络。整体结构可以概括成:

局部空间输入 (11 x 21 x 21)
+ 标量输入 (50 维)
+ 5-token 轻量实体引导注意力
-> 融合层
-> actor head
-> critic head

其中:

  • 空间分支负责学习局部地图结构,例如障碍、污渍、充电桩、危险区、访问热度、狭窄通道等
  • 标量分支负责表达全局上下文,例如电量、剩余步数、已清扫比例、回桩状态、打转风险、NPC 风险等
  • 注意力分支用 5 类 query token 去读空间特征,分别对应:
    • charger
    • progress
    • danger
    • loop
    • context

这套结构背后的核心思路不是“把网络堆复杂”,而是先让策略看到正确、对齐、能驱动决策的状态:

  • 第一阶段先修状态语义
    • 修正充电桩坐标理解错误
    • 修正地图写回时的方向反拿问题
    • 把原本过度压扁的弱统计特征,改成空间分支 + 标量分支
  • 后续阶段再逐步补:
    • 回桩相关语义
    • frontier / reachable 等推进语义
    • NPC 当前危险和预测危险
    • 门口、窄通道、回桩路径风险

简单说,我们最后的方案并不是靠某一个“神奇网络结构”取胜,而是靠“观测修对 + reward 对齐 + PPO 稳定化 + 动作层约束”这一整套闭环把系统做稳。

我们没做好的地方

赛后复盘后,我们认为项目里有一类问题非常典型:我们有时不是在“帮助 PPO 更容易学对”,而是在“替 PPO 做决策”。

其中一个最明显的例子,就是对 nearest_chargernearest_npc 这类手工挑出来的“最近实体”特征依赖过重。这样做的问题是:

  • “最近”本身就是人工定义后的压缩结果,容易在压缩时丢掉关键信息
  • 一旦最近目标算得不准,后面的 reward shaping 和规则补丁都会建立在错误输入上
  • 会诱导我们继续堆更多规则和特征,试图修补最初的信息损失
  • 工程会越来越膨胀,但策略本身不一定真的学得更好

这也是我们后来反思最深的一点:如果输入给网络的信息一开始就不完整、不稳定,那么后面再怎么补 reward 和逻辑,都会越来越偏。

后续改进方案

如果继续沿这条线迭代,我们认为一个更干净、更值得优先尝试的方向是:

1. 不再手工喂 nearest_chargernearest_npc

不应该只把“最近的那个”实体抽出来喂给模型。更合理的方式是:

  • 直接把所有候选目标的坐标都传进去
  • 让网络自己学习哪些目标当前更重要
  • 不再由人工先做一次强压缩,再让策略去接收这个被压缩后的结果

2. 用一个轻量的坐标编码 + Max Pooling 做聚合

我们现在更倾向于下面这种更简单的结构:

所有 charger / npc / 其他关键实体的相对坐标
-> 小 MLP 做逐点编码
-> max pooling 做集合聚合
-> 与空间分支、全局标量一起融合

这样做的好处是:

  • 输入信息更完整,不会因为只取最近目标而丢失多目标结构
  • 对实体数量变化更自然
  • 比现在这套围绕若干 hand-crafted nearest feature 的设计更直接
  • 工程复杂度更低,也更符合“让 PPO 自己学”而不是“我们先替它判断”

对于这个题目,我们目前的判断是:不需要专门造 nearest_chargernearest_npc 这样的特征;把所有坐标直接传进去,再做一层 max pooling,其实就已经足够了

About

2026 腾讯开悟/大学生服务外包创新创业大赛 D02 赛道故障机器人队区域赛初赛代码

Resources

Stars

Watchers

Forks

Contributors

Languages