Nav2自带节点

格式为 变量名 类型 默认值 简单说明

动作节点

等待(wait)

输入端口
  1. wait_duration double 1.0 等待时间(s)
  2. server_name string N/A 服务名称
  3. server_timeout double 10 服务超时(ms)
输出端口
  1. error_code_id uint16 N/A 错误代码id
  2. error_msg string N/A 错误代码信息

旋转(spin)

输入端口
  1. spin_dist double 1.57 旋转角度(弧度)
  2. time_allowance double 10.0 失败或卡住的时间阈值 (s)
  3. server_name string N/A 动作服务名称
  4. server_timeout double 10 动作服务超时名称
  5. is_recovery bool True 如果该动作作为recovery使用则为真
  6. disable_collision_checks bool false 是否不使能碰撞检测
输出端口
  1. error_code_id uint16 N/A 旋转的错误代码
  2. error_msg string N/A 旋转的错误信息

倒退(Backup)

输入端口
  1. backup_dist double -0.15 倒退的总距离(m)
  2. backup_speed double 0.025 倒退速度(m/s)
  3. time_allowance double 10.0 失败或卡住的时间阈值 (s)
  4. server_name string N/A 动作服务名字
  5. server_timeout double 10 动作服务超时时限(ms)
  6. disable_collision_checks bool false 是否不使能碰撞检测
输出端口
  1. error_code_id uint16 N/A 倒退错误代码
  2. error_msg string N/A 倒退错误信息

沿当前航向行进(DriveOnHeading)

输入端口
  1. dist_to_travel double 0.15 行进距离(m)
  2. speed double 0.025 速度(m/s)
  3. time_allowance double 10.0 服务阻塞/超时报警阈值
  4. server_name string N/A 动作服务名称
  5. server_timeout double 10 动作服务超时时间(ms)
  6. disable_collision_checks bool false 是否要取消碰撞检测
输出端口
  1. error_code_id uint16 N/A 沿当前航向行进错误代码
  2. error_msg string N/A 沿当前航向行进错误信息

辅助遥控(AssistedTeleop)

输入端口
  1. is_recovery double false 如果为真则开启恢复计数器
  2. time_allowance double 10.0 行为超时或阻塞的时间
  3. server_name string N/A 动作服务名称
  4. server_timeout double 10 动作服务超时时间(ms)
  5. error_code_id uint16 N/A 辅助遥控的错误代码
  6. error_msg uint16 N/A 辅助遥控的错误信息

计算路径到位姿(ComputePathToPose)

输入端口
  1. start geometry_msgs::msg::PoseStamped N/A 初始位姿,可选。当use_start不是false时,使用这个位姿取代当前位姿输入到planner内。接受黑板变量。
  2. use_start geometry_msgs::msg::PoseStamped N/A 可选的,用于决定是否要使用start中的位姿。接受黑板变量
  3. goal geometry_msgs::msg::PoseStamped N/A 目标位姿,接受黑板变量
  4. planner_id string N/A 将名称映射到要是用的规划器插件
  5. server_name string N/A 服务名称
  6. server_timeout double 10 服务超时时间(ms)
输出端口
  1. Path nav_msgs::msg::Path N/A 动作服务创造的路径。接受黑板变量
  2. error_code_id uint16 N/A 计算路径错误码
  3. error_msg string N/A 计算路径错误信息

计算路由(ComputeRoute)

输入端口
  1. start geometry_msgs::msg::PoseStamped 初始位置,可选。仅在非空情况下使用,接受黑板变量。
  2. goal geometry_msgs::msg::PoseStamped N/A 目标位姿。接受黑板变量
  3. start_id int N/A 要使用的开始节点id
  4. goal_id int N/A 要使用的目标节点id
  5. use_start bool false 是否要使用start或者使用TF获得机器人的初始位姿
  6. use_poses bool false 是否要使用初始和目标位姿或者初始或目标节点id
  7. server_name string N/A 动作服务名称
  8. server_timeout double 10 动作服务超时(ms)
输出端口
  1. route nav2_msgs::msg::Route N/A 动作服务创造的路由,接受黑板变量
  2. path nav_msgs::msg::Path N/A 动作服务创造的路径。接受黑板变量
  3. planner_time builtin_interfaces::msg::Duration N/A 计算路由需要的时间
  4. error_code_id uint16 N/A 计算路由的错误代码
  5. error_msg string N/A 计算路由的错误信息

计算并跟踪路由(ComputeAndTrackRoute)

输入端口
  1. start geometry_msgs::msg::PoseStamped N/A 初始位置,可选,只在非空时有效,接受黑板变量
  2. goal geometry_msgs::msg::PoseStamped N/A 目标位置。接受黑板变量
  3. start_id int N/A 要使用的初始节点id
  4. goal_id int N/A 要使用的目标节点id
  5. use_start bool false 是否要使用start 或者用TF获取初始位姿
  6. use_poses bool false 是否要使用start和goal位姿或初始和目标节点ID
  7. server_name string N/A 动作服务名称
  8. server_timeout double 10 动作服务超时(ms)
输出端口
  1. execution_time builtin_interfaces::msg::Duration N/A 计算路由的时间
  2. error_code_id uint16 N/A 计算路由的错误代码
  3. error_msg string N/A 计算路由错误信息

跟踪路径(FollowPath)

输入端口
  1. path string N/A 接受一个包含要进行跟随的路径的黑板变量
  2. controller_id string N/A 映射到要使用的控制器插件类型的名字
  3. goal_checker_id string N/A 映射到要使用的目标检查器插件类型的名字
  4. progress_check_id string N/A 映射到要使用的进程检查器插件类型的名字
  5. server_name string N/A 动作服务名字
  6. server_timeout double 10 动作服务超时(ms)
输出端口
  1. error_code_id uint16 N/A 跟随路径错误代码
  2. error_msg string N/A 跟随路径错误信息

导航到位姿(NavigateToPose)

输入端口
  1. goal PoseStamped N/A 从黑板变量中获取目标点
  2. server_name string N/A 动作服务名称
  3. server_timeout double 10 动作服务超时
  4. behavior_tree string N/A 行为树上的绝对路径,如果未指定则该服务或使用一个默认行为树
输出端口
  1. error_code_id uint16 N/A 错误码在由错误码名称前缀+错误码后缀的组成的列表的末尾
  2. error_msg string N/A 与错误码名称前缀+错误码后缀参数列表里最低错误码关联的错误消息

清除整个代价地图(ClearEntireCostmap)

输入端口
  1. service_name string N/A 要清除的代价地图的名字
  2. server_timeout double 10 动作服务超时时间(ms)

清除机器人周围区域以外的代价地图(ClearCostmapExceptRegion)

输入端口
  1. reset_distance double 1 以机器人为中心的正方形区域的边长(该区域以外的代价地图会被清除)
  2. service_name string N/A 用于清除代价地图的代价地图服务
  3. server_timeout double 10 动作服务超时(ms)

清除机器人周围的代价地图(ClearCostmapAroundRobot)

输入端口
  1. reset_distance double 1 以机器人为中心的正方形区域的边长(该区域的代价地图会被清除)
  2. service_name string N/A 要清除的代价地图服务的名字
  3. server_timeout double 10 动作服务超时(ms)

清除位姿附近的代价地图(ClearCostmapAroundPose)

输入端口
  1. pose geometry_msgs::msg::PoseStamped N/A 要清除的代价地图的中心点
  2. reset_distance double 1.0 要清除的区域边长
  3. service_name string N/A 为了清楚代价地图的代价地图服务名称
  4. service_timeout double 10 动作服务超时时间(ms)

重新初始化全局坐标(ReinitializeGlobalLocalization)

用于在严重离域或绑架机器人的情况下使用AMCL触发全局重新定位
输入端口
  1. service_name string N/A 服务名称
  2. server_timeout double 10 服务超时(ms)

截断道路(TruncatePath)

一个客制控制节点,用于修改一条路径使之简化。它会移除距离最终位姿特定距离内的路径点。路径的最终位姿依然会定位到原始最终位姿。
输入端口
  1. input_path nav_msgs/Path N/A 要被截断的原始道路
  2. distance double 1.0 要截断的路径在给定路径上的长度,从目标点算起
输出端口
  1. output_path nav_msgs/Path N/A 截断后的路径

截断本地路径(TruncatePathLocal)

移除机器人前方或后方一定距离以外的路径
输入端口
  1. input_path nav_msgs/Path N/A 要修剪的路径
  2. distance_forward double 8.0 前方修剪距离
  3. distance_backward double 4.0 后方修剪距离
  4. robot_frame string "base_link" 机器人基础坐标系id
  5. transform_tolerance double 0.2 机器人位姿的检查容忍度
  6. pose geometry_msgs/PoseStamped N/A 手动指定用于选取截断区域的位姿,否则将使用机器人当前位姿
  7. angular_distance_weight double 0.0 在寻找最接近机器人的路径位置时的相对于位置距离的角距离权重。不适用于没有指定方向的路径。
  8. max_robot_pose_search_dist double infinity 沿着路径(从最后检测到的姿态开始)的最大向前积分距离,以约束对距离机器人最近的姿态的搜索。当设置为无穷大(默认值)时,每次都搜索整个路径。
输出端口
  1. output_path nav_msgs/Path N/A 输出的截断后的路径

规划器选择器(PlannerSelector)

用于选择被规划器服务使用的规划器。它订阅了planner_selector主题以接收包含要使用的规划器名称的指令信息。它常常在ComputePathToPoseAction之前被使用。selected_planner输出端口传递到ComputePathToPoseAction的输入端口planner_id。如果主题中没有信息提供,则将使用default_planner。此主题的任何发布者都需要配置一些定义为可靠和瞬态本地的QoS。
输入端口
  1. topic_name string planner_selector 用于接收选择指令信息的主题的名字。这是为了支出多个规划器选择器节点。
  2. default_planner string N/A 输入主题下没有收到信息时要使用的选择的规划器的默认值。
输出端口
  1. selected_planner string N/A 输出选择的规划器的id。这个规划器字符串常常通过planner_id输入端口传到ComputPathToPose内

控制器选择器(ControllerSelector)

与上类似。
输入端口
  1. topic_name string controller_selector
  2. default_controller string N/A
输出端口
  1. selected_controller string N/A

平滑器选择器(SmootherSelector)

与上类似
输入端口
  1. topic_name string smoother_selector
  2. default_smoother string N/A
输出端口
  1. selected_smoother string N/A

目标检查器选择器(GoalCheckerSelector)

与上类似
输入端口
  1. topic_name string goal_checker_selector
  2. default_goal_checker string N/A
输出端口
  1. selected_goal_checker string N/A

进程检查器选择器(ProgressCheckerSelector)

输入端口
  1. topic_name string progress_checker_selector
  2. default_progress_checker string N/A
输出端口
  1. selected_progress_checker string N/A

通过位姿进行导航(NavigateThroughPoses)

输入端口
  1. goals nav_msgs::msg::Goals N/A 目标位姿,接受黑板变量
  2. server_name string N/A 动作服务名称
  3. server_timeout double 10 动作服务超时时间(ms)
  4. behavior_tree string N/A 行为树绝对路径。没有的话使用默认行为树
输出端口
  1. error_code_id uint16 N/A 错误代码名称前缀参数列表中的最低错误代码
  2. error_msg string N/A 与错误代码名称前缀参数列表中的最低错误代码关联的错误信息

通过位姿计算路径(ComputePathThroughPoses)

输入端口
  1. start geometry_msgs::msg::PoseStamped N/A 初始位姿。可选。非空时使用。接受黑边变量
  2. goals nav_msgs::msg::Goals N/A 目标位姿。接受黑板变量
  3. planner_id string N/A 要使用的规划器插件类型的映射名
  4. server_name string N/A 动作服务名称
  5. server_timeout double 10 动作服务超时(ms)
输出端口
  1. path nav_msgs::msg::Path N/A 由动作服务创建的路径。接受黑板变量
  2. error_code_id uint16 N/A 通过位姿计算路径的错误码
  3. error_msg string N/A 通过位姿计算路径的错误信息

计算覆盖路径(ComputeCoveragePath)

输入端口
  1. generate_headland bool true 是否生成场地的岬角或多边形以计算其覆盖范围
  2. generate_route bool true 是否要生成一条路由。如一系列长条区域
  3. generate_path bool true 是否要生成一条路径,例如向有序路径添加路径连接器
  4. file_field string N/A 要使用的字段的GML文件的路径,未指定字段则使用多边形
  5. file_field_id int 0 要使用的GML文件的字段的id,如果同一个文件里存在多个。这是文件内的字段的序号。
  6. polygons vector<geometry_msgs::msg::Polygon> N/A 如果没有通过GML文件指定,要使用的多边形字段。第一个多边形应当是最外侧的区域,而额外的多边形是空的。
  7. polygons_frame_id string "map" 多边形坐标系的ID。GML文件提供了它的格式的结构ID,这个提供了使用者自定义的输入polygons的结构ID。
输出端口
  1. nav_path nav_msgs::msg::Path N/A 由动作服务器创造的一条导航路径。接受一个黑板变量。
  2. coverage_path vector<PathComponents> N/A 对应于覆盖路径的一系列长条状区域和转弯,注意在应用时区分长条区域和转弯时重要的。提供了一个opennav_coverage::utils::PathComponentsIterator对象,通过输出路径组件迭代返回下一个直道或转弯(一次一个)来让它更易用。
  3. error_code_id uint16 N/A 计算覆盖的错误码
  4. error_msg string N/A 计算覆盖的错误信息
注意,路径、错误码以及其他的黑板ID可以调整,但要适配CoverageNavigator插件中的对应参数,以方便动作服务的使用。

取消覆盖(CancelCoverage)

用于取消给到完成的覆盖动作服务的目标点。服务地址可以使用server_name输入端口来进行重定位。
输入端口
  1. service_name string N/A 服务名称
  2. server_timeout double 10 服务超时(ms)

移除已通过的目标点(RemovePassedGoals)

查看输入端口,移除机器人接近或者近期通过的目标点。这用于移除以及通过的目标点,便于针对当前任务目标重新规划。
输入端口
  1. radius double 0.5 要从列表中删除的目标点的选择半径
  2. robot_base_frame string "base_link" 机器人基础坐标系
  3. input_goals nav_msgs::msg::Goals N/A 一个目标点向量组,用于检查当前迭代时是否通过任何目标点
  4. input_waypoint_statuses std::vector<nav2_msgs::msg::WaypointStatus> N/A 原始路点状态
输出端口
  1. 输出目标 nav_msgs::msg::Goals N/A 一个被移除的靠近机器人的目标点的向量组
  2. output_waypoint_statuses std::vector<nav2_msgs::msg::WaypointStatus> N/A 已经通过的标记了的路点状态

移除碰撞目标点(RemoveInCollisionGoals)

检查输入的目标点,移除任何足迹成本或者占用成本大于特定阈值的路点。这可能会在ComputePathThroughPoses时被调用来删除路点,以避免因为被占用的路点导致机器人无限处于等待中。
输入端口
  1. service_name string /global_costmap/get_cost_global_costmap 代价地图服务名称用于获得代价
  2. input_goals nav_msgs::msg::Goals N/A 一系列目标点用于检查是否处于碰撞中
  3. cost_threshold double 254.0 用于判断路点是否处于碰撞中的阈值。假如use_footprint是false,那就认为253是占用
  4. use_footprint bool true 要使用足迹成本或者占用成本
  5. consider_unknown_as_obstacle bool false 是否要将未知点的cost(255)视为障碍物
  6. input_waypoint_statuses std::vector<nav2_msgs::msg::WaypointStatus> N/A 原始路点状态
输出端口
  1. output_goals geometry_msgs::msg::PoseStamped N/A 仅包含不在碰撞中的路点的向量组
  2. output_waypoint_statuses std:;vector<nav2_msgs::msg::WaypointStatus> N/A 被标记碰撞中的路点的路点状态

取消控制(CancelControl)

用于取消控制器的动作服务器中的目标
输入端口
  1. service_name string N/A 服务名称
  2. server_timeout double 10 服务超时时间(ms)

取消倒退(CancelBackUp)

输入端口
  1. service_name string N/A 服务名称,如果由于重映射没有使用默认的backup的话
  2. server_timeout double 10 服务超时时间(ms)

取消旋转(CancelSpin)

输入端口
  1. service_name string N/A 要取消的服务的名称
  2. server_timeout double 10 服务超时时间

取消等待(CancelWait)

输入端口
  1. service_name string N/A 要求哦取消的服务的名称
  2. server_timeout double 10 服务超时时间

取消沿当前航向前进(CancelDriveOnHeading)

输入端口
  1. service_name string N/A 要取消的服务的名称
  2. server_timeout double 10 服务超时时间

取消辅助遥控(CancelAssistedTeleop)

输入端口
  1. service_name string N/A 要取消的服务的名称
  2. server_timeout double 10 服务超时时间

取消计算并跟踪路由(CancelComputeAndTrackRoute)

输入端口
  1. service_name string N/A 要取消的服务的名称
  2. server_timeout double 10 服务超时时间

平滑路径(SmoothPath)

输入端口
  1. unsmoothed_path string N/A 黑板变量或硬编码输入需要平滑的路径
  2. max_smoothing_duration double 3.0 最大的平滑时间花费(s)
  3. check_for_collisions double 3.0 是否要检查平滑路径的碰撞
  4. smoother_id string N/A 平滑服务中平滑插件的ID
输出端口
  1. smoothed_path string N/A 用于输出平滑后的路径到指定黑板变量
  2. smoothing_duration double N/A 平滑的实际时间花费
  3. was_completed bool N/A 只是平滑进程是否完成。如果check_for_collisions被设置为true并且检测到障碍物,此项会被设置为false
  4. error_code_id uint16 N/A 与平滑器的错误码一致
  5. error_msg string N/A 与平滑器的错误信息一致

获取路径上的位姿(GetPoseFromPath)

从路径上获取特定目录下的位姿,-1获取最后一个,-2获取倒数第二个,以此类推
输入端口
  1. path nav_msgs/Path N/A 要提取位姿的路径
  2. index int 0 要提取位姿的目录
输出端口
  1. pose geometry_msgs/PoseStamped N/A 提取到的位姿,以及路径的集合头

停泊机器人(DockRobot)

用于将机器人停泊到停泊站
输入端口
  1. use_dock_id bool true 是否要使用停泊站ID或者停泊位姿字段
  2. dock_id string N/A 停泊站ID
  3. dock_pose geometry_msgs/PoseStamped N/A 停泊位姿,反之使用停泊id
  4. dock_type string N/A 停泊插件类型,否则使用停泊位姿
  5. max_staging_time float 1000.0 导航到指定位姿的最大耗费时间
  6. navigate_to_staging_pose bool true 是否自动导航到指定位姿
输出端口
  1. success bool true 若动作成功
  2. error_code_id uint16 0 停泊机器人错误信息
  3. num_retries uint16 0 重试次数

泊出机器人(UndockRobot)

输入端口
  1. dock_type string N/A 停泊插件类型,如果先前的实例不是用于停泊的
  2. max_undocking_time float 30.0 回到待机状态的最大时间
输出端口
  1. success bool true 如果动作成功
  2. error_code_id uint16 0 停泊机器人错误代码
  3. error_msg string 0 停泊机器人错误信息

连接路径(ConcatenatePaths)

输入端口
  1. input_path1 nav_msgs/Path N/A 第一条路径
  2. input_path2 nav_msgs/Path N/A 第二条路径
输出端口
  1. input_path2 nav_msgs/Path N/A 输出连接后的路径

获取当前位姿(GetCurrentPose)

输入端口
  1. robot_base_frame string N/A 机器人用于变换位姿的基础坐标系,如果没有在相同坐标系下被给出。如果没有提供,就自动使用BT Navigator的base_frame
  2. global_frame string N/A 用于变换到的全局坐标系。如果没有给出则自动使用BT Navigator的global_frame
输出端口
  1. current_pose geometry_msgs::msg::PoseStamped N/A 全局坐标系下的当前位姿

插入全局位姿到目标点

插入一个PoseStamped目标点到一个goals向量组的末尾,可以用于从Route节点或其他未来目标点的来源中提取一系列目标点,然后插入作为最终任务目标节点。
输入端口
  1. goal_pose geometry_msgs/PoseStamped N/A 要插入的目标位姿
  2. input_goals nav_msgs/Goals N/A 要插入目标点的向量组
输出端口
  1. output_goals nav_msgs/Goals N/A 输出的目标节点向量组

提取路由节点作为目标点

输入端口
  1. route nav2_msgs/Route N/A 要变换为目标点的节点
输出端口
  1. goals nav_msgs/Goals N/A 最终得到的目标点

获取后续若干目标点(GetNextFewGoals)

提取接下来N个目标点以稍后发送一个只需要本地未来知识的任务
输入端口
  1. num_goals int N/A 要提取的目标点数
  2. input_goals nav_msgs/Goals N/A 输入的目标点列表
输出端口
  1. output_goals nav_msgs/Goals N/A 输出的目标点列表

条件节点

目标到达(GoalReached)

检查到达目标点的距离,如果低于预先设定的阈值就返回SUCCESS,否则返回FAILURE
参数
  1. transform_tolerance 在Behavior-Tree navigator中定义和声明
  2. goal_reached_tol double 0.25 判断处于目标点的阈值(m)

可进行变化(TransformAvailable)

检查是否可以进行一个TF变换。如果找不到就返回失败。一旦找到就总是会返回成功。作为初始条件检查很有用。
参数
  1. child string "" 变换的子坐标系
  2. parent string "" 变换的父坐标系

行走距离(DistanceTraveled)

行走过特定距离后节点返回SUCCESS
参数
  1. transform_tolerance 在behavior-Tree Navigator 中进行定义和声明
输入端口
  1. distance double 1.0 返回成功前必须行走的距离(m)
  2. global_frame string "map" 引用的坐标系
  3. robot_base_frame string "base_link" 机器人基础坐标系

目标更新(GoalUpdated)

检查是否全局导航目标、或者目标点向量组在黑板上有更新。如果目标点与之前一致则返回failure,反之返回success。
输入端口
  1. goal geometry_msgs::msg::PoseStamped "{goal}" 要检查的目标点。接收黑板变量。
  2. goals nav_msgs::msg::Goals "{goals}" 要检查的目标点向量组。接收黑板变量。

全局目标更新(GoalUpdated)

检查黑板中的全局导航目标是否有更新。
这个节点与GoalUpdated的不同之处在于,它在行为树的每个tick中保留当前目标/目标的状态,这样它就会在目标的任何“全局”变化上更新。
输入端口
  1. goal geometry_msgs::msg::PoseStamped "{goal}" 要检查的目标点。接收黑板变量。
  2. goals nav_msgs::msg::Goals "{goals}" 要检查的目标点向量组。

初始化收到的位姿(InitialPoseReceived)

当初始位姿通过/initial_pose发送到AMCL时返回success
输入端口
  1. initial_pose_received bool “{initial_pose_received}” 如果端口内的值为真则返回Success。接收黑板变量。

卡死检测(isStuck)

检测机器人是否正在向目标点行进,如果卡住没在运行则返回SUCCESS,反之返回FAILURE

停止检测(IsStopped)

该BT节点跟踪机器人的里程计,假如机器人被认为停止且超过了一定的时间,返回SUCCESS,停止而没有超过一定的时间,返回RUNNING,否则返回FAILURE
输入端口
  1. velocity_threshold double 0.01 低于该速度机器人被认为静止
  2. duration_stopped int 1000 静止超过该时间则返回SUCCESS(ms)

计时器(TimeExpired)

输入端口
seconds double 1.0 经过这段时间后返回SUCCESS(s)

是否低电量(IsBatteryLow)

通过订阅一个sensor_msgs/BatteryState主题并且检查电量百分比/电压是否低于一个特定的最小值来判断是否处于低电量状态。默认使用电量百分比(0到1)来检查。设置is_voltage参数为True可以使用电压来检查。低电量时返回SUCCESS,反之FAILURE
输入端口
  1. min_battery double 0.0 触发低电量的最低电量百分比或电压值
  2. battery_topic string "/battery_status" 电池信息的主题
  3. is_voltage bool false 是否要使用实际电压来检测低电量

路径是否可行(IsPathValid)

检查路径是否可行。如果路径上有障碍物则返回FAILURE,反之返回SUCCESS。
输入端口
  1. service_timeout double 20.0 服务超时时间(ms)
  2. path nav_msgs::msg::Path N/A 要检测可行性的全局路径
  3. max_cost unsigned int 253 视作可以通过的路径的代价阈值
  4. consider_unknown_as_obstacle bool false 是否要将未知代价(255)视为障碍物

路径过期计时器(PathExpiringTimer)

输入端口
  1. seconds double 1.0 超时时间(s)
  2. path nav_msgs::msg::Path N/A 检查路径是否更新,更新了则计时器重启

错误码是否已知(AreErrorCodesPresent)

检查提供的错误码是否跟集合里已知的匹配
匹配成功返回SUCCESS,反之返回FAILURE
输入端口
  1. error_code unsigned short N/A 要进行比较的错误码
  2. error_codes_to_check std::set<unsigned short> N/A 要进行查找的错误码集合

是否控制器恢复有效(WouldAControllerRecoveryHelp)

检查活跃控制器服务的错误码是否是UNKNOWN,PATIENCE_EXCEEDED,FAILED_TO_MAKE_PROGRESS,NO_VAILD_CONTROL,如果是,返回SUCCESS,反之返回FAILURE
输入端口
  1. error_code unsigned short N/A 要进行对比的错误码

是否规划器恢复有效(WouldAPlannerRecoveryHelp)

检查规划器错误码是否是UNKNOWN,NO_VALID_PATH或TIMEOUT
输入端口
  1. error_code unsigned short N/A 要进行对比的错误码

是否平滑器恢复有效(WouldASmootherRecoveryHelp)

检查平滑器错误码是否是UNKNOWN,TIMEOUT,FAILED_TO_SMOOTH_PATH或SMOOTHED_PATH_IN_COLLISION
输入端口
  1. error_code unsigned short N/A 要匹配的错误码

是否路由恢复有效(WouldARouteRecoveryHelp)

检查路由服务错误码是否是UNKNOWN,NO_VALID_ROUTE或TIMEOUT
输入端口
  1. error_code unsigned short N/A 要匹配的错误码

是否充电中(IsBatteryCharging)

通过订阅一个sensor_msgs/BatteryState主题来检查能量供应状态(power_supply_status)是否是POWER_SUPPLY_STATUS_CHARGING
输入端口
  1. battery_topic string "/battery_status" 电池信息的主题

位姿是否邻近(ArePosesNear)

检查两个位姿是否邻近,如果输入位姿位于不同坐标系,会将两者自动变换到全局坐标系
输入端口
  1. ref_pose geometry_msgs::msg::PoseStamped N/A 接收黑板变量,包含要检查的初始位姿
  2. target_pose geometry_msgs::msg::PoseStamped N/A 接收黑板变量包含另一个要检查的位姿
  3. global_frame string N/A 如果两个位姿不在同一坐标系下要给出的全局坐标,如果缺省则使用BT Navigator的global_frame
  4. tolerance double 0.5 判断是否邻近的阈值

控制节点

管道序列(PipelineSequence)

持续tick第一个子节点直到其返回一次成功,然后同时tick第一个和第二个子节点直到其返回一次成功,然后同时tick第一、第二和第三个子节点直到其返回一次成功,依次类推。任何子节点返回RUNNING不影响其行为,任何子节点返回FAILURE则停止所有子节点返回FAILURE

轮询(RoundRobin)

tick第一个节点,失败了返回FAILURE并自动tick下一个节点,成功了就停止并返回SUCCESS,依此类推,在未进行显式重置时,保留内部状态,例如:
  • 第一次失败 → 执行子节点1(如清除代价地图)
  • 若恢复成功,后续再次失败时 → 执行子节点2(如旋转)而非重新从子节点1开始
常在多分支恢复策略中使用。

恢复节点(RecoveryNode)

恢复节点是一种有两个子节点的控制流。当且仅当第一个子节点返回SUCCESS时返回SUCCESS。第二个子节点只有在第一个子节点返回FAILURE时执行,如果第二个返回SUCCESS则再次执行第一个子节点。使用者可以指定在返回FAILURE之前要执行几次恢复行为。在nav2中,恢复节点被包含在行为树内用于实现故障恢复操作。
输入节点
  1. number_of_retries int 1 重试的次数

无阻滞序列(NonblockingSequence)

tick所有子节点直到它们都返回SUCCESS。如果任意子节点返回RUNNING则继续tick后面的节点。此节点会tick所有子节点如果它再次被tick。如果任意时间有子节点返回FAILURE,则所有子节点停止并返回FAILURE。

持续序列(PersistantSequence)

持续序列节点与序列节点类似,但它会储存最后运行的子节点的目录到黑板上,即使被halt也不会对该条目进行重置。它用于有序tick子节点。如果任意子节点返回RUNNING,之前的子节点不会再次被tick。这可以帮助匹配PauseResumeController
  • 如果所有子节点返回SUCCESS,则该节点返回SUCCESS
  • 如果一个子节点返回RUNNING,则该节点返回RUNNING。循环不会开始,同样的运行中的子节点会再次被tick
  • 如果一个子节点返回FAILURE,停止循环并返回FAILURE。仅当reset_on_failure ==true时反馈

暂停和继续控制器(PauseResumeController)

通过服务调用控制,来暂停和继续树的执行。它有一个用于已恢复状态的必选子事件,以及三个用于暂停状态、ON_PAUSE事件和ON_RESUME事件的可选子事件。它有两个输入端口:
  • pause_service_name:用于暂停的服务的名字
  • resume_service_name:用于恢复的服务的名字
控制器开始时处于RESUMED状态,并且tick它直到它返回SUCCESS。但暂停服务被调用时,tick ON_PAUSE直到其完成,然后控制器转换到PAUSED状态。当恢复服务被调用时,ON_RESUME被tick直到其完成,然后控制器转换到RESUMED状态。
控制器仅在其RESUMED子节点返回success时返回success,如果任意子节点返回失败,则控制器返回失败。其余情况下控制器返回RUNNING
例子
当ON_PAUSE和ON_RESUME分支失败了,控制器返回failure,halt,状态重置为RESUMED。在真正失败之前重试转换几次可能是可取的,该功能未内置在控制节点中,但通过在BT中添加重试节点很容易实现:

装饰节点

频率控制器(RateController)

一个控制子节点被tick频率的节流阀。tick频率可以作为一个参数提供给该节点。这个节点会返回RUNNING当它没有在tick它的子节点时。目前,在导航堆栈中,RateController用于调整ComputePathToPose和GoalReached节点被tick的速率。
输入端口
  1. hz double 10.0 tick频率(hz)

距离控制器(DistanceController)

一个基于已经行走过的距离来控制其子节点被tick的频率的节点。重新规划前的行走过的距离可以作为一个参数被提供给该节点。目前在导航堆栈中,这个控制器通常用于调整ComputePathToPose和CoalReached节点被tick的频率。
输入端口
  1. distance double 1.0 每经过这个长度的距离就tick一次子节点(m)
  2. global_frame string "map" 引用的坐标系
  3. robot_base_frame string "base_link" 机器人基础坐标系

速度控制器(SpeedController)

一个根据机器人当前速度来控制tick子节点频率的节点。最大和最小重规划率可以作为参数与最大和最小速度一起提供给节点。该节点会返回RUNNING当它没有tick它的节点时。当前,在导航堆栈中,这种控制器用于调整ComputePathToPose和GoalReached节点被tick的频率。
输入端口
  1. min_rate double 0.1 子节点被tick的最低频率(hz)
  2. max_rate double 1.0 子节点被tick的最高频率(hz)
  3. min_speed double 0.0 机器人低于该速度(m/s)则以最低频率tick子节点
  4. max_speed double 0.5 机器人高于该速度(m/s)则以最高频率tick子节点
  5. goal geometry_msgs::msg::PoseStamped “{goal}” 要检查的目标点,接收黑板变量
  6. goals geometry_msgs::msg::Goals "{goals}" 要检查的目标点向量组。接收黑板变量。

目标点更新(GoalUpdater)

用于更新目标点(组)位姿的客制节点。它订阅了一个主题用于接收目标点(组)更新的主题而不是接收动作指令。可用于动态对象跟随任务。
参数
  1. goal_updater_topic string "goal_update" 用于接收目标点更新信息的主题
  2. goals_updater_topic string "goals_update" 用于接收目标点组更新信息的主题
输入端口
  1. input_goals geometry_msgs/PoseStamped N/A 原始目标位姿
  2. input_goals nav_msgs/Goals N/A 原始目标位姿组
输出端口
  1. output_goal geometry_msgs/PoseStamped N/A 更新后的目标点。如果没有更新就与输入一致
  2. output_goals nav_msgs/Goals N/A 更新后的目标点组,如果没有更新则与输入一致。

接近路径过长(PathLongerOnApproach)

该节点检查新生成的全局路径是否明显大于用户定义机器人的目标接近度中的旧全局路径,并触发它们相应的子路径。这允许用户在机器人靠近目标时尝试执行比先前路径长得多的路径之前制定特殊行为(例如绕过可能只需要几秒钟就能移开的动态障碍物)。
输入端口
  1. path nav_msgs::msg::Path N/A 动作服务器创建的路径。接收黑板变量
  2. prox_len double 3.0 低于该距离则检查是否当前路径过长
  3. length_factor double 2.0 用于检查路径是否明显过长的长度乘子,新路径长度>旧路径长度*该乘子则触发

单次触发器(SingleTrigger)

这个节点仅触发它的子节点一次,并且在后续被tick时总是返回FAILURE

目标点更新控制器(GoalUpdatedController)

检查是否黑板中的全局导航目标点、或者目标点向量组发生改变。这个节点tick它的子节点如果=目标点发生改变。
输入端口
  1. goal geometry::msgs::msg::PoseStamped "{goal}" 要检测的目标点,接收黑板变量
  2. goals nav_msgs::msg::Goals "{goals}" 要检测的向量点组,接收黑板变量。
posted @ 2025-08-28 10:05  虚在君  阅读(7)  评论(0)    收藏  举报