Critical-HIT-hitsz / RMUA2022

哈尔滨工业大学(深圳)Critical HIT战队RMUA2022开源仓库
MIT License
150 stars 28 forks source link

关于决策模块行为树的疑问 #12

Open popfishy opened 1 year ago

popfishy commented 1 year ago

关于决策模块的判断比赛是否开始的节点,此处的返回条件不是很明白?应该是game_status为4且比赛剩余时间为正数的条件下返回SUCCESS?

    BehaviorState Update()
    {
        if(blackboard_ptr_->game_status_.game_status == 4 && blackboard_ptr_->game_status_.remaining_time > 0)
        {
            return BehaviorState::FAILURE;
        }
        else
        {
            chassis_exe_ptr_->Stop();
            return BehaviorState::SUCCESS;
        }
    }
imuncle commented 1 year ago

这个是行为树设计上的历史遗留问题。我们在代码中设置了一个顺序节点以及多个行为节点,但其实这里的顺序节点其实行使的是选择节点的功能,即:

选择节点,也称为优先级Selector节点,从左到右依次执行所有子节点,只要子节点返回failure,就继续执行后续子节点,直到有一个节点返回success或running为止,这时它会停止后续子节点的执行,向父节点返回success或running。若所有子节点都返回failure,那么它向父节点返回failure。

popfishy commented 1 year ago

这个是行为树设计上的历史遗留问题。我们在代码中设置了一个顺序节点以及多个行为节点,但其实这里的顺序节点其实行使的是选择节点的功能,即:

选择节点,也称为优先级Selector节点,从左到右依次执行所有子节点,只要子节点返回failure,就继续执行后续子节点,直到有一个节点返回success或running为止,这时它会停止后续子节点的执行,向父节点返回success或running。若所有子节点都返回failure,那么它向父节点返回failure。

原来如此。我看最近版本的行为树文档已经是相反的了:任意一个子节点返回failure,则其父节点返回failure且停止所有子节点。应该是没有问题的。