Open nihaolix opened 1 month ago
感谢解答,还有一个问题,行为树扩展时是从目标状态开始,一直扩展到初始状态,然后执行任务时是从初始状态开始执行,是这样理解嘛?
在这张途中,是由c1执行a1可到g,那为什么step1,step2,g会都连接在一个回退节点呢,这里还是没明白
擦桌子和给水都连在一个回退节点,那不会只执行给水的操作嘛,这里有点没理解
问题:行为树扩展时是从目标状态开始,一直扩展到初始状态,然后执行任务时是从初始状态开始执行,是这样理解嘛? 回复:是的
问题:在这张图中,是由c1执行a1可到g,那为什么step1,step2,g会都连接在一个回退节点呢? 回复:c1执行a1可到g,c3执行a3可到c1。如果c3就是初始状态,那么行为树在执行的时候,g条件不满足、c1条件不满足,c3满足,执行a3。a3执行完以后,行为树重新tick,g条件不满足,c1此时满足了,执行a1。a1执行完以后,行为树重新tick,g条件满足。
问题:擦桌子和给水都连在一个回退节点,那不会只执行给水的操作嘛? 回复:回退节点下面挂着的 条件动作对 的顺序是有讲究的。按照代码中的算法执行,不会出现只执行给水的操作。如果放下咖啡动作执行完,重新tick,此时需要手上拿着咖啡才能放下咖啡,此时手上没有拿着。那么,下面一个tick到的 条件动作对 是检测到桌子脏擦桌子。擦完桌子以后就满足条件了。如果还不满足就会 tick到的 后面的 条件动作对,可能就是 检测到手上没拿东西时执行 拿起咖啡。
问题:为什么step1,step2,g会都连接在一个回退节点呢? 回复:首先,都连接在一个回退节点上是可行的,如上面的回复所述。其次,此前的 BT Expansion 工作 【 博士论文《基于行为树的机器人自主行为规划方法研究》第 51 页】中是采用迭代扩展 c3接在C1 那里,但是正如 【 博士论文《基于行为树的机器人自主行为规划方法研究》第 66 页】所说的,这样的迭代扩展不能保证最优性。因此,我们采用类似 dijkstra 最短路的方法,每次将cost最小的扩展在回退结点后面以控制各个动作的执行顺序,从而确保从任意叶子结点到g的动作序列都是最优的。