Navigation 2 Logo
latest
  • 入门
    • 安装
    • 运行示例
    • 开始导航
  • 编译和安装
    • 安装
    • 编译
      • 编译已发行版本
        • 安装ROS2
        • 编译Nav2源码
      • 编译开发中的主分支
        • Build ROS 2 Main
        • 构建Nav2主程序 [校准@haisenzeng]
    • Docker
      • 通过Docker容器构建Nav2
      • 使用DockerHub已构建的容器
    • 生成Doxygen
    • 帮助
      • 构建故障排除指南 [待校准@1521]
        • 常见的Nav2依赖项构建失败 [待校准@1522]
        • 报告问题
  • 导航相关概念
    • ROS 2
      • 动作服务器(Action Server)
      • 生命周期节点和绑定
    • 行为树
    • 导航服务器
      • 规划器,控制器和恢复服务器 [校准@haisenzeng]
      • Planners
      • Controllers
      • 恢复器 [校准@haisenzeng]
      • 航点跟随 [校准@haisenzeng]
    • 状态估计
      • 标准
      • 全局定位: 定位与SLAM
      • 里程计
    • 环境表达
      • 成本地图和图层
      • 成本地图过滤器
      • Other Forms
    • Nav2学术概述
  • 首次机器人安装指南
    • Setting Up Transformations
      • 转换介绍 [待校准@1869]
      • 静态转换 Publisher(发布) 演示 [校准@songhuangong]
      • Navigation2 中的转换 [校准@songhuangong]
      • 小结 [校准@songhuangong]
    • 设置URDF
      • URDF 和 Robot State Publisher [校准@songhuangong]
      • 环境设置 [校准@songhuangong]
      • 编写URDF
      • Build 和 Launch [校准@songhuangong]
      • 使用 RVIZ 可视化 [校准@songhuangong]
      • 添加物理属性 [待校准@1951]
      • 小结 [校准@songhuangong]
    • 里程计设置
      • 里程计介绍 [校准@songhuangong]
      • 在机器人上设置里程计
      • 使用Gazebo仿真一个里程计系统 [校准@songhuangong]
        • 设置和先决条件 [校准@songhuangong]
        • 将 Gazebo 插件添加到 URDF [校准@songhuangong]
        • 启动和构建文件 [校准@songhuangong]
        • 构建、运行和验证
      • 机器人定位演示 [校准@songhuangong]
        • 配置Robot Localization [校准@songhuangong]
        • 启动和构建文件 [校准@songhuangong]
        • 构建、运行和验证
      • 小结 [校准@songhuangong]
    • 设置传感器 [待校准@1775]
      • 传感器介绍 [待校准@1778]
        • 常见传感器信息 [待校准@1784]
      • 使用Gazebo模拟传感器 [待校准@1795]
        • 将 Gazebo 插件添加到 URDF [校准@songhuangong]
        • 启动和构建文件 [校准@songhuangong]
        • 构建、运行和验证
      • 建图和定位 [待校准@1815]
      • 2D代价地图 [待校准@1822]
        • 配置nav2_costmap_2d [待校准@1826]
        • 构建、运行和验证
      • 小结 [校准@songhuangong]
    • 建立机器人的Footprint
      • Footprint介绍 [校准@songhuangong]
      • 配置机器人的Footprint [校准@songhuangong]
      • 构建、运行和验证
      • 在 RViz 可视化Footprint [校准@songhuangong]
      • 小结 [校准@songhuangong]
    • 设置导航插件
      • 规划器和控制器服务器 [待校准@1571]
      • 选择算法插件 [待校准@1577]
        • 规划服务器
        • 控制服务器
      • 小结 [校准@songhuangong]
    • 设置生命周期和组合节点
      • 生命周期
      • 组成
        • 手动合成 [校准@songhuangong]
        • 动态组合
      • 小结 [校准@songhuangong]
  • 普通教程
    • 相机标定
      • 概述
      • 要求
      • Tutorial Steps
    • 在ROS 2/Nav2中获取回溯信息 [校准@haisenzeng]
      • 概述
      • Preliminaries
      • 从一个节点进行回溯 [校准@haisenzeng]
      • 从启动文件进行回溯 [校准@haisenzeng]
      • 从Nav2 Bringup软件包中进行回溯 [校准@haisenzeng]
      • 基于系统崩溃时的自动错误回溯
    • 用实体Turtlebot3机器人导航 [待校准@1262]
      • 概述
      • 要求
      • Tutorial Steps
        • 0-设置环境变量
        • 1-运行 Turtlebot 3 [校准@小鱼]
        • 2-LaunchNav2 [待校准@1273]
        • 3-LaunchRVIZ [待校准@1283]
        • 4-初始化Turtlebot3位置 [待校准@1287]
        • 5-发送一个目标位姿 [校准@greg]
    • (SLAM) 建图时导航
      • 概述
      • 要求
      • Tutorial Steps
        • 0-启动机器人交互界面 [校准@混沌无形]
        • 1- Launch Navigation2
        • 2-启动 SLAM [校准@混沌无形]
        • 3-与SLAM合作 [待校准@1360]
        • 4-入门简化 [校准@混沌无形]
    • (STVL) 使用外部代价地图插件
      • 概述
      • 代价地图2D和STVL [待校准@1410]
      • Tutorial Steps
        • 0-设置
        • 1-安装STVL [待校准@1416]
        • 1- 修改Navigation2参数
        • 2-Launch Navigation2
        • 3- RVIZ
    • 动态对象追踪
      • 概述
      • Tutorial Steps
        • 0- Create the Behavior Tree
        • 1- 设置Rviz的点击点 [校准@混沌无形]
        • 2- 在Nav2模拟中运行动态对象跟踪 [校准@混沌无形]
    • 导航禁止区 [校准@mzebra]
      • 概述
      • 要求
      • Tutorial Steps
        • 1.准备过滤器掩码
        • 2.配置成本地图过滤器信息发布服务器 [校准@混沌无形]
        • 3.启用禁止区域过滤器 [校准@混沌无形]
        • 4.运行Nav2软件 [校准@混沌无形]
    • 导航速度限制
      • 概述
      • 要求
      • Tutorial Steps
        • 1.准备过滤器掩码
        • 2.配置成本地图过滤器信息发布服务器 [校准@混沌无形]
        • 3.启用速度过滤器 [待校准@1393]
        • 4.运行Nav2软件 [校准@混沌无形]
    • Groot与行为树互动 [待校准@1432]
      • 概述
      • 可视化行为树 [待校准@1440]
      • 编辑行为树 [待校准@1452]
      • 添加自定义节点 [待校准@1455]
    • 使用旋转微调控制器 [待校准@1463]
      • 概述
      • 什么是旋转微调控制器? [待校准@1470]
      • 配置旋转微调控制器 [待校准@1479]
      • 配置主控制器 [待校准@1488]
      • 演示执行 [待校准@1491]
  • 插件教程
    • 编写新的二维代价地图(Costmap2D)插件
      • 概述
      • 必要条件
      • 教程步骤
        • 1- 写一个新代价地图2D(Costmap2D)插件 [校准@小鱼]
        • 2-Export GradientLayer plugin [待校准@2074]
        • 3-在代价地图2D中启用插件 [待校准@2089]
        • 4-运行梯度层(GradientLayer )插件 [校准@小鱼]
    • 编写新的规划器插件
      • 概述
      • 必要条件
      • 教程步骤
        • 1创建新规划器插件
        • 2-导出planner插件
        • 3-通过params文件传递插件名称
        • 4-运行直线插件
    • 编写新的控制器插件 [待校准@2100]
      • 概述
      • 必要条件
      • 教程步骤
        • 1-创建一个新的控制器插件 [待校准@2105]
        • 2-导出控制器插件 [校准@混沌无形]
        • 3-通过params文件传递插件名称 [待校准@2142]
        • 4-运行纯追踪控制器插件 [校准@混沌无形]
    • 编写新的行为树插件 [待校准@1988]
      • 概述
      • 必要条件
      • 教程步骤
        • 1创建新BT插件 [待校准@2000]
        • 2-导出planner插件
        • 3-将插件库名称添加到配置 [待校准@2037]
        • 4运行定制插件 [待校准@2039]
    • 编写新的恢复插件 [待校准@2180]
      • 概述
      • 必要条件
      • 教程步骤
        • 1-创建一个新的恢复插件 [待校准@2182]
        • 2-导出恢复插件
        • 3-通过params文件传递插件名称
        • 4- 运行恢复插件 [校准@混沌无形]
  • 配置指南
    • 路点追踪
      • 参数
      • 提供的插件 [待校准@2604]
        • WaitAtWaypoint
        • PhotoAtWaypoint [待校准@3171]
        • InputAtWaypoint [待校准@3161]
      • 默认插件 [待校准@2885]
      • Example
    • 行为树导航器
      • 参数
      • Example
    • 行为树XML节点
      • Action插件
        • Wait [待校准@2347]
        • Spin [待校准@2331]
        • BackUp
        • ComputePathToPose [待校准@2269]
        • FollowPath [待校准@2283]
        • NavigateToPose [待校准@2300]
        • ClearEntireCostmap [待校准@2253]
        • ClearCostmapExceptRegion [待校准@2250]
        • ClearCostmapAroundRobot [待校准@2243]
        • ReinitializeGlobalLocalization [待校准@2312]
        • TruncatePath [待校准@2336]
        • PlannerSelector [待校准@2304]
        • ControllerSelector [待校准@2273]
        • GoalCheckerSelector [待校准@2290]
        • NavigateThroughPoses [待校准@2298]
        • ComputePathThroughPoses [待校准@2255]
        • RemovePassedGoals [待校准@2316]
        • CancelControl
      • 条件插件 [待校准@2569]
        • GoalReached [待校准@2357]
        • TransformAvailable [待校准@2376]
        • DistanceTraveled [待校准@2351]
        • GoalUpdated [待校准@2364]
        • GloballyUpdatedGoal
        • InitialPoseReceived [待校准@2366]
        • IsStuck [待校准@2370]
        • TimeExpired [待校准@2372]
        • IsBatteryLow [待校准@2368]
        • IsPathValid
      • 控制插件
        • PipelineSequence [待校准@2383]
        • RoundRobin [待校准@2390]
        • RecoveryNode [待校准@2385]
      • 装饰插件
        • RateController [待校准@2405]
        • DistanceController [待校准@2392]
        • SpeedController [待校准@2409]
        • GoalUpdater [待校准@2395]
      • Example
    • 2D代价地图
      • 2D代价地图的ROS参数 [待校准@2618]
      • 默认插件 [待校准@2606]
      • 插件参数 [待校准@2677]
        • 静态层参数 [待校准@2984]
        • 膨胀层参数
        • 障碍层参数 [待校准@2909]
        • 体素层参数 [待校准@2995]
        • 范围传感器参数 [待校准@2952]
      • 代价地图过滤器参数 [待校准@2678]
        • 保留过滤器参数 [待校准@2901]
        • 速度过滤器参数 [待校准@2976]
      • Example
    • 生命周期管理
      • 参数
      • Example
    • 规划器服务器
      • 参数
      • 默认插件 [待校准@2606]
      • Example
    • NavFn规划器
      • 参数
      • Example
    • Smac规划器
      • 提供的插件 [待校准@2604]
        • Smac 2D规划器 [待校准@3186]
        • Smac Hybrid-A*规划器 [待校准@3216]
        • Smac国家格规划器 [待校准@3247]
      • 描述
    • Theta星规划器
      • 参数
      • Example
    • 控制器服务器 [待校准@2573]
      • 参数
      • 提供的插件 [待校准@2604]
        • SimpleProgressChecker [待校准@3148]
        • SimpleGoalChecker [待校准@3139]
        • StoppedGoalChecker [待校准@3155]
      • 默认插件 [待校准@2606]
      • Example
    • DWB控制器
      • 控制器(Controller)
        • DWB控制器
        • XYTheta迭代器 [待校准@3073]
        • 运动学参数 [待校准@3080]
        • Publisher [待校准@3109]
      • 插件 [待校准@2682]
        • LimitedAccelGenerator [待校准@3124]
        • StandardTrajectoryGenerator [待校准@3128]
      • 轨迹评论家 [待校准@2684]
        • BaseObstacleCritic [待校准@3263]
        • GoalAlignCritic [待校准@3270]
        • GoalDistCritic [待校准@3279]
        • ObstacleFootprintCritic [待校准@3282]
        • OscillationCritic [待校准@3285]
        • PathAlignCritic [待校准@3297]
        • PathDistCritic [待校准@3300]
        • PreferForwardCritic [待校准@3302]
        • RotateToGoalCritic [待校准@3313]
        • TwirlingCritic [待校准@3322]
      • Example
    • Map Server / Saver
      • Map Saver 参数 [校准@songhuangong]
      • Map Server 参数 [校准@songhuangong]
      • 代价地图筛选器信息服务参数 [校准@songhuangong]
      • Example
    • AMCL(自适应蒙特卡洛定位)
      • 参数
      • Example
    • 恢复服务器
      • 恢复服务器参数 [待校准@2753]
      • 默认插件 [待校准@2606]
      • 自旋恢复参数 [待校准@2772]
      • 备份恢复参数 [待校准@2784]
      • Example
    • 纯追踪控制
      • 纯追踪控制参数 [待校准@2789]
      • Example
    • 旋转控制器
      • 旋转控制器参数 [待校准@2838]
      • Example
  • 调整指南
    • 膨胀潜在领域
    • 机器人Footprint与半径
    • 旋转到位行为
    • 规划器插件选择
    • 控制器插件选择 [待校准@1045]
    • Smac规划器中的缓存障碍启发式算法 [待校准@1064]
    • Nav2 Launch选项 [待校准@1068]
    • 我们希望提供的其他页面
  • Nav2行为树
    • Nav2特定节点介绍
      • 动作节点(Action)
      • Condition节点 [校准@混沌无形]
      • Decorator(装饰)节点
      • 控制(Control): 管道序列(PipelineSequence) [校准@混沌无形]
      • 控制(Control): 恢复(Recovery) [校准@混沌无形]
      • 控制(Control): 轮询(RoundRobin) [校准@混沌无形]
    • 详细的行为树演练
      • 概述
      • 前提条件
      • 通过重新规划和恢复导航到某个位姿
      • 导航子树
      • 恢复(Recovery)子树
    • 导航到点
    • 指定路点导航
    • Navigate To Pose and Replan Only if Path Invalid
    • 动态点跟随
  • 导航插件
    • 代价地图层(Costmap Layers)
    • 代价地图过滤器(Costmap Filters)
    • 控制器(Controllers)
    • 规划器(Planners)
    • 恢复(Recoveries)
    • 路点任务执行器(Waypoint Task Executors)
    • 目标检查器(Goal Checkers)
    • 进度检查器(Progress Checkers)
    • 行为树节点(Behavior Tree Nodes)
  • 迁移指南
    • Dashing到Eloquent [校准@haisenzeng]
      • 新软件包 [校准@haisenzeng]
      • New Plugins
      • 导航2架构变化 [待校准@724]
    • Eloquent到Foxy [校准@小鱼]
      • 综述 [待校准@731]
      • 服务器更新 [待校准@735]
      • New Plugins
      • 地图服务器重新工作 [待校准@765]
      • 新粒子滤波消息 [待校准@771]
      • 选择行为树每一个导航动作中 [待校准@775]
      • 后续功能 [待校准@778]
      • 新的代价地图层 [待校准@781]
    • Foxy转Galactic [待校准@783]
      • 导航Action反馈更新 [待校准@785]
      • NavigateToPose BT节点接口变化 [待校准@789]
      • NavigateThroughPoses和ComputePathThroughPosesActions添加 [待校准@792]
      • ComputePathToPose BT节点接口变化 [待校准@796]
      • ComputePathToPoseAction界面变化 [待校准@799]
      • 备份BT节点接口变化 [待校准@804]
      • 备份恢复界面变化 [待校准@806]
      • 这个Nav2控制器和目标检查插件接口变化 [待校准@808]
      • FollowPath goal_checker_id 属性 [待校准@811]
      • Groot支持 [待校准@817]
      • New Plugins
      • 代价地图过滤器 [待校准@827]
      • Smac规划器 [待校准@835]
      • ThetaStar规划器 [待校准@839]
      • 调节pureseek控制器 [待校准@842]
      • 代价地图2D current_ 的使用 [待校准@846]
      • 参数中的标准时间单位 [待校准@849]
      • 光线跟踪参数 [待校准@857]
      • 障碍标记参数 [待校准@863]
      • 恢复Action变化 [待校准@867]
      • 默认行为树变化 [待校准@869]
      • NavFn规划器参数 [待校准@871]
      • 新的清晰的代价地图异常和清晰的代价地图 [待校准@873]
      • 新行为树节点 [待校准@875]
      • 传感器 _ 消息/点云到传感器 _ 消息/点云2变化 [待校准@885]
      • 控制器服务器新参数failure_tolerance [待校准@891]
      • 已删除BT XML启动配置 [待校准@893]
      • 这个Nav2RViz面板Action反馈信息 [待校准@896]
    • Galactic到Humble [待校准@899]
      • Smac规划器的主要改进 [待校准@901]
      • 简单 (Python) 控制命令 [待校准@933]
      • 减少节点和执行程序 [待校准@936]
      • 延长BtServiceNode处理服务结果 [待校准@945]
      • 包括新旋转垫片控制器插件 [待校准@948]
      • 在Gazebo产生机器人 [待校准@954]
      • 恢复行为超时 [待校准@958]
      • 新参数 use_final_approach_orientation 3 2D规划器 [待校准@960]
      • Smac规划器2D和Theta*: 修复被忽略的目标方向 [待校准@962]
      • SmacPlanner2D、NavFn和Theta*: 修复小路径角案例 [待校准@964]
      • 动态参数变更检测的变更与修复行为 [待校准@966]
      • 动态参数 [待校准@968]
      • BTAction节点异常更改 [待校准@974]
      • BT Navigator Groot多重导航器 [待校准@976]
      • 删除运动学限制RPP [待校准@979]
      • 删除使用方法速度缩放参数在RPP [待校准@981]
      • 将AMCL运动模型重构为插件 [待校准@983]
      • 放弃对Nav2实时Groot监控的支持 [待校准@985]
      • Replanning Only if Path is Invalid
      • Fix CostmapLayer clearArea invert param logic [待校准@989]
      • Dynamic Composition [待校准@991]
      • BT Cancel Node
  • 简单控制命令API
    • 概述
    • 控制命令(Commander )API
    • 示例和演示
  • Humble工作计划
  • 参与其中
    • 参与其中
    • 流程
    • 许可
    • 开发者认证 (DCO)
  • 关于和联系
    • 相关项目 [待校准@267]
    • ROS到ROS2变化 [待校准@307]
    • 关于Nav2 [待校准@234]
    • 联系我们 [待校准@264]
  • 机器人使用
Navigation 2
Edit
  • »
  • Nav2行为树 »
  • Navigate To Pose and Replan Only if Path Invalid

Navigate To Pose and Replan Only if Path Invalid

这个行为树实现了:ref:behavior_trees 上的行为树的一个明显更成熟的版本。它在自由空间中从一个起点导航到一个单点目标。它既包含在特定子上下文中使用自定义恢复,也包含用于系统级故障的全局恢复子树。它还为用户提供了在返回失败状态之前多次重试任务的机会。 [校准@混沌无形]

这个 ComputePathToPose 和 FollowPath BT节点都指定了它们要使用的算法。按照惯例,我们用它们的算法风格来命名它们 (例如,不是 DWB ,而是 FollowPath ),这样行为树或应用程序开发人员就不必担心技术细节。他们只想使用路径跟随控制器。 [校准@混沌无形]

在此行为树中,我们尝试重试整个导航任务6次,然后将任务失败状态返回给调用方。这使得导航系统有足够的机会尝试从故障情况中恢复或等待瞬态问题通过,例如来自人员的拥挤或临时传感器故障。 [校准@混沌无形]

In nominal execution, this will replan only if the previous path is invalid and pass a new path onto the controller. However, this time, if the planner fails, it will trigger contextually aware recoveries in its subtree, clearing the global costmap. Additional recoveries can be added here for additional context-specific recoveries, such as trying another algorithm.

同样,控制器具有相似的逻辑。如果失败,它还会尝试清除影响控制器的局部成本地图。值得注意的是反应性回退中的 GoalUpdated 节点。当一个新目标通过先占权传递给导航系统时,这允许我们退出恢复条件。这确保了当一个新目标被发布时,即使最后一个目标在试图恢复时,导航系统也会立即做出非常灵敏的反应。 [校准@混沌无形]

如果这些上下文的恢复失败,这个行为树就会进入恢复子树。这个子树是为系统级故障保留的,以帮助解决诸如机器人被卡住或在一个坏地方的问题。这个子树也有 GoalUpdated BT节点,它每次迭代都运行,以确保新目标的响应能力。接下来,恢复子树将恢复: 成本地图清除操作、旋转、等待和备份。在子树中的每个恢复之后,将重新尝试主导航子树。如果继续失败,则运行恢复子树中的下一次恢复。 [校准@混沌无形]

虽然这个行为树没有利用它,但是 PlannerSelector 、 ControllerSelector 和 GoalCheckerSelector 行为树节点也是有帮助的。这些行为树节点将允许用户通过ROS话题动态地改变导航系统中使用的算法,而不是对要使用的算法 ( GridBased 和 FollowPath ) 进行硬编码。相反,在最有用和最独特的情况下,使用具有指定算法的条件节点创建不同的子树上下文可能是可取的。然而,选择器节点可以成为一种有用的方式,从外部应用程序而不是通过内部行为树控制流逻辑来改变算法。最好通过行为树方法来实现更改,但是我们知道许多专业用户都有外部应用程序来动态更改其导航器的设置。 [校准@混沌无形]

<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">
            <Fallback>
              <ReactiveSequence>
                <Inverter>
                  <GlobalUpdatedGoal/>
                </Inverter>
                <IsPathValid path="{path}"/>
              </ReactiveSequence>
              <ComputePathToPose goal="{goal}" path="{path}" planner_id="GridBased"/>
            </Fallback>
            <ClearEntireCostmap name="ClearGlobalCostmap-Context" service_name="global_costmap/clear_entirely_global_costmap"/>
          </RecoveryNode>
        </RateController>
        <RecoveryNode number_of_retries="1" name="FollowPath">
          <FollowPath path="{path}" controller_id="FollowPath"/>
          <ClearEntireCostmap name="ClearLocalCostmap-Context" service_name="local_costmap/clear_entirely_local_costmap"/>
        </RecoveryNode>
      </PipelineSequence>
      <ReactiveFallback name="RecoveryFallback">
        <GoalUpdated/>
        <RoundRobin name="RecoveryActions">
          <Sequence name="ClearingActions">
            <ClearEntireCostmap name="ClearLocalCostmap-Subtree" service_name="local_costmap/clear_entirely_local_costmap"/>
            <ClearEntireCostmap name="ClearGlobalCostmap-Subtree" service_name="global_costmap/clear_entirely_global_costmap"/>
          </Sequence>
          <Spin spin_dist="1.57"/>
          <Wait wait_duration="5"/>
          <BackUp backup_dist="0.30" backup_speed="0.05"/>
        </RoundRobin>
      </ReactiveFallback>
    </RecoveryNode>
  </BehaviorTree>
</root>

© 版权所有 2020.