Robotics-STAR-Lab / Robotics-STAR-Lab/ApexNav

初始化扫描阶段 start_yaw_ 是否可能未及时更新,导致 frontier 状态异常?

Open
#47 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C
Stars
456
Forks
38
PR merge metrics
No merged PRs in 30d

Description

你好,感谢开源 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 是否是预期设计?

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in src/planner/exploration_manager/src/exploration_fsm.cpp, especially ExplorationFSM::FSMCallback() and its initialization-scan calls to updateFrontierAndObject(). Trace how dormantSeenFrontiers() uses start_pt_ and start_yaw_ during each turn, then compare the observed frontier transitions with the saved videos or BEV visualizations and HM3D ObjectNav v2 runs. Done means the expected initialization behavior and the relationship between release and evaluation code are documented or confirmed.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
robotics
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.