你好,感谢开源 ApexNav。我们在复现 HM3D ObjectNav v2 评测时观察到一个可能的问题,想确认这是否是预期行为,或者是否与论文内部评测代码有所不同。
我们使用公开仓库当前 release 代码运行 HM3D v2 val split 时,发现不少 episode 会在初始化扫描后很早进入 no frontier,但从保存的视频/BEV 可视化看,环境中似乎仍然存在明显可探索的 frontier。
我们检查到一个可能相关的时序问题:
在 src/planner/exploration_manager/src/exploration_fsm.cpp 中,ExplorationFSM::FSMCallback() 的初始化扫描阶段会执行:
if (fd_->init_action_count_ < 1 + 12 + 1 + 12) {
...
fd_->init_action_count_++;
transitState(ROS_STATE::PUB_ACTION, "FSM");
updateFrontierAndObject();
}
而 updateFrontierAndObject() 内部会调用:
frt_map->dormantSeenFrontiers(start_pos2d, fd_->start_yaw_(0));
fd_->start_yaw_ 初始化为 zero,并且在原代码里似乎直到初始化扫描结束后的 main planning branch 才会被设置为当前 fd_->odom_yaw_。但是初始化扫描过程中机器人会原地旋转,每次 turn 后 odom yaw 都已经改变。这样 dormantSeenFrontiers() 在初始化过程中可能会一直使用 stale yaw=0 来做 FOV 判断,从而把一些实际上不在当前视野内的 active frontiers 提前移动到 dormant frontiers。
我们做了一个小修改:在初始化扫描阶段调用 updateFrontierAndObject() 之前,同步当前 pose/yaw:
fd_->start_pt_ = fd_->odom_pos_;
fd_->start_yaw_(0) = fd_->odom_yaw_;
这个修改后,我们之前观察到的几个早期 no frontier case 不再复现,全量复测中,no frontier 失败数量也明显下降。
想请教:
初始化扫描阶段调用 updateFrontierAndObject() 时,是否本来就应该使用当前 odom yaw?
公开 release 代码是否和论文中 HM3D v2 评测使用的代码完全一致?
这个 start_yaw_ 在初始化扫描阶段保持默认值 0 是否是预期设计?
你好,感谢开源 ApexNav。我们在复现 HM3D ObjectNav v2 评测时观察到一个可能的问题,想确认这是否是预期行为,或者是否与论文内部评测代码有所不同。
我们使用公开仓库当前 release 代码运行 HM3D v2 val split 时,发现不少 episode 会在初始化扫描后很早进入 no frontier,但从保存的视频/BEV 可视化看,环境中似乎仍然存在明显可探索的 frontier。
我们检查到一个可能相关的时序问题:
在 src/planner/exploration_manager/src/exploration_fsm.cpp 中,ExplorationFSM::FSMCallback() 的初始化扫描阶段会执行:
而 updateFrontierAndObject() 内部会调用:
frt_map->dormantSeenFrontiers(start_pos2d, fd_->start_yaw_(0));fd_->start_yaw_ 初始化为 zero,并且在原代码里似乎直到初始化扫描结束后的 main planning branch 才会被设置为当前 fd_->odom_yaw_。但是初始化扫描过程中机器人会原地旋转,每次 turn 后 odom yaw 都已经改变。这样 dormantSeenFrontiers() 在初始化过程中可能会一直使用 stale yaw=0 来做 FOV 判断,从而把一些实际上不在当前视野内的 active frontiers 提前移动到 dormant frontiers。
我们做了一个小修改:在初始化扫描阶段调用 updateFrontierAndObject() 之前,同步当前 pose/yaw:
这个修改后,我们之前观察到的几个早期 no frontier case 不再复现,全量复测中,no frontier 失败数量也明显下降。
想请教:
初始化扫描阶段调用 updateFrontierAndObject() 时,是否本来就应该使用当前 odom yaw?
公开 release 代码是否和论文中 HM3D v2 评测使用的代码完全一致?
这个 start_yaw_ 在初始化扫描阶段保持默认值 0 是否是预期设计?