ROS2 行为树解析(3) Fallback节点(回退节点)

Fallback节点(回退节点)

Fallback节点在其他框架中被称为“选择器”或“优先级”节点。其目的是尝试不同的策略,直到找到有效的一个。

目前框架提供了两种类型的Fallback节点:
  1. Fallback:传统的Fallback节点,它会根据子节点的状态决定如何处理。
  2. ReactiveFallback:响应式Fallback节点,它可以在前置条件从失败变为成功时中断异步子节点。
Fallback节点共享以下规则:
  • 在触发第一个子节点之前,节点状态变为运行中(RUNNING)
  • 如果子节点返回失败(FAILURE),则Fallback会触发下一个子节点。
  • 如果最后一个子节点也返回失败,则所有子节点将被停止,Fallback节点返回失败
  • 如果子节点返回成功(SUCCESS),则停止并返回成功,所有子节点都将被停止。
两种ControlNodes的区别:
ControlNode类型子节点返回RUNNING时
Fallback再次触发(Tick again)
ReactiveFallback重新开始(Restart)
  • 再次触发(Tick again)”意味着下一次Fallback节点被触发时,相同的子节点将再次被触发。已经返回失败的前一个兄弟节点不再被触发。
  • 重新开始(Restart)”意味着整个Fallback将从列表中的第一个子节点重新开始。

Fallback 示例

在这里插入图片描述

假设我们尝试使用不同的策略来打开门。首先检查(只检查一次)门是否已经开启。

<Fallback name="OpenDoorStrategies">
    <IsDoorOpen/>
    <OpenDoorWithKey/>
    <OpenDoorWithCrowbar/>
</Fallback>

在这个例子中,我们首先检查门是否开启,如果没有,则尝试使用钥匙打开门,如果还不行,最后尝试使用撬棍。

ReactiveFallback 示例

在这里插入图片描述

ReactiveFallback节点用于当我们想要在前置条件的状态从失败变为成功时中断异步子节点。

以下示例中,角色将睡眠最多8小时。如果他/她完全休息好了,节点areYouRested?将返回成功,并且异步节点Timeout (8 hrs)Sleep将被中断。

<ReactiveFallback name="SleepUntilRested">
    <AreYouRested/>
    <Timeout seconds="28800" name="SleepTimeout"/>
    <Sleep name="Sleep"/>
</ReactiveFallback>

在这个例子中,AreYouRested?节点将检查角色是否休息完毕。如果角色休息完毕,即使Sleep节点还在运行中,整个ReactiveFallback节点也会停止,因为已经达到了目标状态。

Fallback节点使得行为树能够灵活地处理多种情况,并在遇到障碍时尝试不同的解决方案。通过使用Fallback和ReactiveFallback,开发者可以创建出能够适应不同环境和条件的智能AI行为。

  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值