# CogRun 复现核查（2026-11-08）

> 本文是 **2026-11-08 的历史快照**。2026-11-10 已确认实验室使用 BUNKER MINI 2.0 / ROS 2 Humble，新增厂家驱动接口适配准备，单元测试现为 19 项。后续进度见 [BUNKER_MINI2_INTEGRATION.md](BUNKER_MINI2_INTEGRATION.md) 和 [README.md](README.md)。下文的 15 项测试、四份配置和“未获车型”等表述保留当日状态。

## 结论

**当前项目是“论文公式与软件流程的部分复现 + ROS 2 开发接口 + 玩具模拟”，不是完整复现，更不能直接用于履带车实物自主学习。** 英文论文研究的是四足机器人实物及 Gazebo 三轮转向越野车。履带车是新的平台，动作、动力学、安全边界和传感器都要重新确认。

用户随后明确最终目标：**用 CogRun 的关键方法让实验室履带车正确运行**，不要求森林场景或论文原始机器人一模一样。按这个目标，现阶段已补一个履带车模拟配置和三个可编辑的替代森林 SDF 场景；它们还没有连接真实履带车，也没有在 Gazebo 中启动。下一道验收门槛是现场获取驱动与传感器接口并完成安全验证。

若“完整复现论文实验”指论文中**同平台、同场景、同训练流程、同统计口径**的结果，至少还需原始四足机器人与传感器/标定、Jetson/ROS 2 实时控制栈、Interactive-FAR 和自适应控制器实现、视觉特征模型、原始 Gazebo 三轮车辆模型与森林世界、缺失的超参数和实验日志。论文第 IV 节的实物视觉到动作结果按 20 次行程汇总；Gazebo 消融图 6 涉及 5 个随机种子、每种 60 回合。现有项目既未生成这些实验数据，也不能用 1 维演示数值替代。即便将算法移植到实验室履带车，也属于**新平台迁移验证**，不等于论文原实验复现。

本核查以用户提供的 9 页英文 PDF 为依据，并重新运行了当前项目代码。下面的“已实现”只表示代码存在且相关测试通过；不代表与论文原始代码、实验曲线、实时频率或安全保证相同。

| 组成部分 | 当前状态 | 依据与实际边界 |
|---|---|---|
| 学习/理性双经验回放 | 公式与流程已实现 | `replay.py` 按动作来源分缓冲，记录实际执行动作；缓冲容量是每个缓冲区的配置。论文没有公布独立容量分配。 |
| 认知采样算法 1 | 核心公式已实现，仍有约定 | `memory.py` 实现式 (5)–(10) 的经验族、频率/近因性联合分数、相似度和双缓冲 Top-K。时间差用存储位置，异构特征直接拼接；论文未指定这些细节及 `F,c,λ,K_L,K_R` 数值。 |
| 安全感知 RL–IBL 融合 | 式 (11)–(13) 已实现；`P` 未按原式复现 | `blending.py` 实现理性经验动作 softmax 与 `η(s)` 混合。论文式 (14) 存在一般维度下的矩阵乘法问题；项目使用外部 `P`，演示替代矩阵不是论文求解结果。ROS 配置把缩减安全状态用于 `η`，无法认定等同于论文完整状态。 |
| 协调器/安全集合 | 当前状态判定与动作切换已实现 | `safety.py` 实现式 (1)(2) 与论文两平台阈值；只检查当前状态，不能独立证明下一步安全。阈值不能直接迁移到履带车。 |
| 学习智能体/DDPG | 标准 DDPG 与接口已实现 | `agents.py`、`ddpg.py`；论文未给训练更新细节。默认网络可用表 I 宽度，示例配置为快速测试使用 `[32,32]`，与实验网络不同。代码没有 GPU/Jetson 多速率调度。 |
| 奖励项 | 数学函数已实现，实物数据未接入 | `rewards.py` 实现式 (15)–(19) 和动作突变项；ROS 桥只接收外部传入的 `reward`，没有从履带车传感器计算奖励的管线。 |
| 理性智能体 | 只有接口 | `RationalAgent` 由外部动作提供；论文引用的 Interactive-FAR、物理自适应控制器源码、参数与安全证明未提供。 |
| 视觉编码器/状态估计 | 未复现 | 项目要求外部提供数值观测。论文的四足机器人 12 维 CoM + 24 维视觉特征并非由本项目计算。 |
| ROS 2 消息桥 | 开发接口已实现，在线未验证 | `ros2_bridge.py` 使用 `std_msgs/String` JSON 和序号配对；无时间戳、超时恢复、驱动话题、硬件急停或多速率实时调度。当前 Windows 环境未安装 ROS 2。 |
| Gazebo 车辆环境 | 原实验未复现；替代世界已生成 | `vehicle_gazebo.mock.json` 的 6 维观测、2 维动作是明示占位。`sim/worlds/` 新增三份项目自制森林 SDF；未含机器人模型/驱动插件，当前无 Gazebo，尚未启动。 |
| 履带车实物实验 | 方法接口已准备；实物未开始 | `tracked_vehicle.mock.json` 和可配置的 `TrackedSafetySet` 可做消息自检，但观测、动作、阈值均是占位。需确认 ROS 版本、底盘控制类型、传感器、实际话题、动作限幅、停止距离、急停及人类监护。 |

## 本次检查结果

- 当前运行环境：Windows，Python 3.14.3，未发现 `ros2` 命令。
- `python -m unittest discover -s tests -v`：**15/15 通过**。
- 1 维玩具模拟的 `full`、`cognition`、`random` 三模式各运行 80 步并退出成功。它们只验证软件可跑；数值不用于与论文图 6 比较。
- 四份配置的 ROS-free `--dry-run` 均输出 `learning → rational → learning`，且第三步有非零融合权重；这只验证接口路径。
- 三个替代森林世界已生成，SDF XML 格式和固定种子/起终点留空逻辑已检查；**没有在 Gazebo 中运行**。
- **未验证**：ROS 2 在线发布/订阅、Gazebo 环境、履带车驱动、真实传感器、实时性、机器人安全和论文实验结果。

论文 arXiv 条目未直接提供本实验的完整工程仓库链接。本次找到的 [Interactive-FAR 演示仓库](https://github.com/Bottle101/Interactive-FAR) 只有 Docker 演示说明，采用 Ubuntu 20.04/ROS Noetic，不能当成 CogRun 的 ROS 2 Humble 原始控制器源码或现成履带车适配器。来源：[CogRun 原文条目](https://arxiv.org/abs/2608.28677)。

## 实物接入前必须解决的具体问题

1. 识别履带车实际是左右履带速度/转速控制，还是上层 `Twist` 线速度与角速度控制；确认单位、坐标系、上限和指令超时行为。
2. 识别状态估计、障碍距离、姿态/角速度、图像或深度、里程计和 TF；确定观测向量的每一项与更新频率。
3. 为履带车重新设计并验证安全集合与理性控制器。论文的四足高度阈值和 Gazebo 三轮越野车角速度阈值不可直接使用。
4. 实现传感器到 JSON 输入、动作决策到**受限底盘驱动**、实际动作与奖励到反馈的适配；当前桥不发驱动命令。
5. 将安全检查与急停保持在可靠的底层控制链。当前 Python 回调内同步训练 DDPG，无法担当论文 200–1000 Hz 的实时安全协调器；缺少消息新鲜度与丢包恢复。
6. 最后再做低速、开阔场地、有人监护的分阶段测试，并保存配置、bag、日志和失效记录。此阶段前不启用自主探索或在线学习。

## 代码核查中的重点风险

- `ros2_bridge.py` 的一次决策必须等同序号反馈；反馈丢失时会拒绝下一次输入，没有超时/重置路径。实验室网络上需先补齐恢复策略。
- `ros2_bridge.py` 的训练发生在 ROS 回调中，可能阻塞订阅/发布；不能宣称达到论文的多速率边缘部署。
- `agents.py` 使用上一条完成的转移做当前动作的经验检索，这是因论文式 (4) 含当前动作之后才可得的下一观测和奖励而作的明确实现选择。
- `configs/*.mock.json` 中 `P`、采样参数、学习率、动作范围均为演示值；不能直接作为实物参数。

## 可复核命令

进入项目目录，安装 NumPy 后运行：

```bash
python -m unittest discover -s tests -v
python -m cogrun.demo --steps 80 --mode full
python -m cogrun.demo --steps 80 --mode cognition
python -m cogrun.demo --steps 80 --mode random
python -m cogrun.ros2_bridge --config configs/vehicle_gazebo.mock.json --dry-run
```

具体安装与三份配置的命令见 [README.md](README.md)。
