ROS2 Navigation 进阶教程学习笔记 第二章

Nav2使用行为树进行导航控制,包括bt_navigator和behavior_server节点。行为树定义了导航到目标及机器人无法导航时的行为。创建行为通过XML文件实现,如`behavior.xml`示例所示,包含重规划路径、跟随路径和恢复动作。行为节点如RecoveryNode、PipelineSequence和RateController协同工作,处理导航过程中的不同阶段。在电池电量低于25%时,可以通过IsBatteryLow和Inverter节点中断导航。Nav2的恢复行为包括旋转、后退和等待,用于解决机器人被卡住的问题。

第二章 Nav2行为

Nav2使用行为树来控制导航行为。行为树用于建立导航到目标位置以及机器人无法导航的情况的标准。

本节解释Nav2如何使用行为树。

什么是行为树导航

nav2_bt_navigator是行为树的包

由以下部分组成:

1. bt_navigator节点和配置文件

2. bt_navigator节点的behavior

3. behavior_server节点和其配置文件

bt_navigator和behavior_server的连接方式使用行为树指定。本单元中学习如何创建此类行为并将其提供给导航系统。

bt_navigator节点

必须管理其他导航相关节点在行为树中的定义。

必须给bt_navigator创建一个行为,确定它如何移动机器人。

如何创建一个行为

要创建行为,请使用可用性为的节点类型创建XML文件。此XML文件提供给bt_behavior,以便在需要时执行。

behavior.xml例子

<!--
  This Behavior Tree replans the global path periodically at 1 Hz, and it also has
  recovery actions.
-->
<root main_tree_to_execute="MainTree">
  <BehaviorTree ID="MainTree">
    <RecoveryNode number_of_retries="6" name="NavigateRecovery">
      <PipelineSequence name="NavigateWithReplanning">
        <RateController hz="1.0">
          <RecoveryNode number_of_retries="1" name="ComputePathToPose">
            <ComputePathToPose goal="{goal}" path="{path}" planner_id="GridBased"/>
            <ClearEntireCostmap service_name="global_costmap/clear_entirely_global_costmap"/>
          </RecoveryNode>
        </RateController>
        <RecoveryNode number_of_retries="1" name="FollowPath">
          <FollowPath path="{path}" controller_id="FollowPath"/>
          <ClearEntireCostmap service_name="local_costmap/clear_entirely_local_costmap"/>
        </RecoveryNode>
      </PipelineSequence>
      <SequenceStar name="RecoveryActions">
        <ClearEntireCostmap service_name="local_costmap/clear_entirely_local_costmap"/>
        <ClearEntireCostmap service_name="global_costmap/clear_entirely_global_costmap"/>
        <Spin spin_dist="1.57"/>
        <Wait wait_duration="5"/>
      </SequenceStar>
    </RecoveryNode>
  </BehaviorTree>
</root>

可以等价为如下图

 分析XML文件

对于每个行为,由以下tag开始

<root main_tree_to_execute="MainTree">
  <BehaviorTree ID="MainTree">
    ...
  </BehaviorTree>
</root>

root标记要执行的子树

behaviortree标签标记具有更定媒称的行为树 ID就是它的名字

接下来,在behavior标记中,按构建所需行为的顺序包含要使用的行为树节点。例如,对于导航课程的默认行为,你需要以下行为

每秒重新规划全局路径

跟随那个路径

如果机器人卡住,执行一下顺序

1.清除本地costmap

2. 清除全局costmap

3. 旋转以检查新的障碍物,再次构建costmap

4. 等待五秒,然后返回主要行为

看看它是如何在Nav2提供的行为节点实现的。

使用BT节点

RecoveryNode

此节点用于封装其他两个节点,并通过以下方式控制其激活

1.此节点将开始执行第一个子节点

2. 如果第一个子节点SUCCESS,那么节点返回SUCCESS

3. 如果第一个子节点failure,执行第二个子节点

4. 如果第二个子节点success,执行第一个子节点

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值