mobile wallpaper 1
mobile wallpaper 2
mobile wallpaper 3
mobile wallpaper 4
mobile wallpaper 5
mobile wallpaper 6
6249 字
16 分钟
Nav2 笔记
2026-01-05

导航框架(Nav2)#

Nav2官网:https://docs.nav2.org/
Nav2中文网(鱼香Ros社区):http://dev.nav2.fishros.com/

Nav2 基础配置指南:https://docs.nav2.org/configuration/index.html
Nav2 细节配置指南:https://docs.nav2.org/tuning/index.html

Nav2 默认插件列表及自定义插件教程: https://docs.nav2.org/plugins/index.html#plugins

Nav2 API 文档(底层算法API): https://api.nav2.org/
Nav2 Simple Commander API文档(上层应用API):https://docs.nav2.org/commander_api/index.html

行为服务器:行为树执行 nav2框架的behavior_server 默认采用spin(旋转)和backup(后退)和drive_on_heading(定向行驶)和assisted_teleop(辅助遥控)和wait(等待)插件
行为树导航器: 导航状态机
规划器服务器:全局路径规划 nav2框架的controller_server 默认采用MPPIController控制器插件
控制器服务器:路径跟踪 nav2框架的planner_server 默认采用NavfnPlanner规划器插件
路径平滑服务器:na2框架的smoother_server 默认采用SimpleSmoother插件
速度平滑服务器:nav2框架的velocity_smoother
路由服务器:路径管理 nv2框架的route_server 默认采用AdjustSpeedLimit和ReroutingService和CollisionMonitor插件
航点跟随:多点导航 nav2框架的waypoint_follower 默认采用wait_at_waypoint插件
碰撞监视服务器:碰撞检测 nav2框架的collision_monitor
对接服务器:自动对接 nav2框架的docking_server 默认采用simple_charging_dock对接插件 用于充电桩,插座等的对接(未使用
禁区导航服务器<在原本静态地图上添加掩膜地图>,掩膜区域划分为禁止规划通行区域
速度限制导航服务器<在原本静态地图上添加掩膜地图>,掩膜区域划分为速度限制区域,通过时会将速度限制在设定范围内低速前进。

建图(slam_toolbox)#

nav2 包内部集成 slam_toolbox
slamtoolbox 底层使用 karto_slam 算法,基于图优化slam算法完成

手动建图#

手动遥控移动机器人进行建图

自动探索建图(explore_lite)#

添加 explore_lite 算法 自动探索地图边界进行自主建图

建图算法#

目前使用 slam_toolbox 内的 karto 图优化算法

slam_toolboxcartographer 算法对比

对比维度slam_toolboxCartographer
核心特点专注于 2D SLAM,集成了强大的定位模式和地图维护工具,以应对动态环境。支持2D与3D SLAM,以其跨平台性、实时性及低资源消耗的工程化实现著称。
核心技术路线基于改进的 Karto 算法(优化图方法),使用 Ceres 进行后端优化。采用基于子地图与全局位姿图优化的框架,并使用分支定界法加速闭环检测。
定位能力集成专门的优化定位模式,可作为高性能的纯定位器使用,并能持续优化地图。主要用于建图过程中的实时定位,其定位能力内嵌于SLAM流程中,独立的纯定位模式并非主要设计目标。
地图维护非常强大。支持终生地图(长期增量建图)、地图序列化、多地图合并、交互式编辑。支持子地图的构建与拼接。侧重于一次性构建大范围高精度地图,动态增量更新的能力不如前者突出。
环境适应性动态、变化的室内环境(如仓库、商店)设计,通过定位模式和地图更新处理环境变化。静态或准静态环境(如建筑、街道)有非常好的建图效果,动态适应性非其强项。
资源消耗相对较高,尤其是在开启高级特性(如终生地图)时,但它提供异步模式以降低负载。设计目标之一是低计算资源消耗和实时性,适合嵌入式或资源受限的平台。
适用场景机器人长期运营、环境频繁变化、需高精度定位的2D场景,如仓库物流、服务机器人、零售店。快速构建大规模、高精度地图,包括室内外2D/3D场景,如扫地机器人建图、自动驾驶初步测绘。

定位 (AMCL)#

nav2 包内部集成 nv2_amcl locatlization_launch.py
AMCL: Adaptive Monte Carlo Localization 自适应蒙特卡洛定位 基于 粒子滤波 算法实现

导航 (Nav2)#

nav2 包 导航系统 navigation_launch.py

具体可查看 nav2 官方文档:https://docs.nav2.org/behavior_trees/index.html

默认使用 navigate_to_pose_w_replanning_and_recovery.xml 和 navigate_through_poses_w_replanning_and_recovery.xml 这两种导航策略

文件名核心策略与作用适用场景
navigate_to_pose_w_replanning_and_recovery.xml经典全能策略周期性重规划(默认1Hz) + 完善的恢复机制(清除地图、旋转、等待、后退)。通用、默认选择。环境动态变化、需要高鲁棒性的场景。
navigate_through_poses_w_replanning_and_recovery.xml多目标点导航策略:专为顺序访问多个目标点(巡航)设计,在每个点之间复用经典的单点导航逻辑。送餐、巡检等需要按顺序访问多个位置的场景。
navigate_to_pose_w_replanning_goal_patience_and_recovery.xml目标点容错策略:在经典策略基础上,增加 GPAL (Goal Pose Acceptable Limits) 节点,对最终到达精度要求更宽松。目标点定位有噪声、或不需要精确对准的场景(如到达一个区域即可)。
follow_point.xml跟随点策略:持续跟踪一个动态更新的目标点(通常来自 RVIZ 的点击),不执行恢复动作,反应极快。人工遥操作、实时目标跟踪。
odometry_calibration.xml里程计校准策略:控制机器人执行特定的固定运动模式(如旋转、前进),用于校准里程计参数。系统调试和标定,非日常导航。

基于不同触发条件的重规划策略#

文件名重规划触发条件设计目的与特点
navigate_w_replanning_time.xml定时触发:每 N 秒规划一次。环境持续缓慢变化,平衡计算开销。
navigate_w_replanning_distance.xml定距触发:机器人移动 N 米后规划。长距离直线行进,避免静止时无意义规划。
navigate_w_replanning_speed.xml低速触发:当机器人速度低于阈值时规划。机器人被卡住或进展缓慢时立刻反应。
navigate_w_replanning_only_if_goal_is_updated.xml目标更新触发仅当目标位置改变时重规划。目标一旦设定就不变,或由外部高级规划器频繁更新的场景。
navigate_w_replanning_only_if_path_becomes_invalid.xml路径失效触发仅当当前路径被障碍物阻挡时重规划。静态环境,计算开销最小。
nav_to_pose_with_consistent_replanning_and_if_path_becomes_invalid.xml组合触发目标更新路径失效时都触发重规划。响应更灵敏,是上面两种策略的“或”组合。
navigate_w_recovery_and_replanning_only_if_path_becomes_invalid.xml极致保守策略仅当路径失效时,才先尝试恢复动作,再重规划对稳定性要求极高,希望尽可能减少任何不必要动作的环境。

动作插件 (Action Plugins)#

中文名称英文名称/ID (常见)功能简介
等待Wait实现机器人原地等待。(恢复行为)
旋转Spin让机器人原地旋转指定的角度。(恢复行为)
后退BackUp让机器人向后移动指定的距离。(恢复行为)
驱车航行DriveOnHeading让机器人朝特定方向直线移动一段距离或时间。
辅助远程操作AssistedTeleop在人工遥控模式下提供辅助避障和局部规划。
计算到姿态的路径ComputePathToPose核心路径规划。根据目标位姿计算一条全局路径。
计算路由ComputeRouteToPose用于具有道路网络(如地图拓扑)的场景,计算路径点序列。
计算途径路由路由ComputePathThroughPoses计算一条经过一系列中间点的路径。
跟随路径FollowPath核心路径跟踪。控制机器人沿给定的路径移动。
导航定位NavigateToPose高层导航动作,内部封装了完整的规划、跟踪和恢复逻辑。
清除整个代价地图ClearEntireCostmap清除指定代价地图(全局或局部)的所有障碍物信息。
清除区域外的代价地图ClearCostmapExceptRegion清除代价地图中除指定矩形区域外的部分。
清除机器人周围的代价地图ClearCostmapAroundRobot清除机器人周围指定半径内的代价地图。
清除位姿周围的代价地图ClearCostmapAroundPose清除特定位姿周围指定半径内的代价地图。
重新初始化全局定位ReinitializeGlobalLocalization重置机器人的全局定位(如AMCL),通常在定位丢失时使用。
截断路径TruncatePath将路径从起点截断一定长度。
截断路径本地TruncatePathLocal在局部坐标系下截断路径。
规划选择器PlannerSelector动态切换使用哪个全局路径规划器。
控制器选择器ControllerSelector动态切换使用哪个局部路径跟踪控制器。
平滑器选择器SmootherSelector动态切换使用哪个路径平滑器。
目标检查器选择器GoalCheckerSelector动态切换使用哪个目标到达检查器。
进度检查器选择器ProgressCheckerSelector动态切换使用哪个进度检查器(用于检测是否被困)。
路径处理选择器PathProcessingSelector动态切换使用哪个路径后处理器。
导航姿势NavigateThroughPoses高层导航动作,顺序导航通过一系列目标点。
计算覆盖路径ComputePathToCoverage计算一条覆盖指定区域的路径(如清洁、巡检)。
取消导航CancelNav取消当前的导航任务。
移除已通过目标RemovePassedGoals(多目标导航中)移除已通过的目标点。
移除碰撞目标RemoveCollisionGoals移除与障碍物冲突的目标点。
取消控制CancelControl取消当前的控制器跟踪动作。
取消后退CancelBackUp取消正在执行的后退动作。
取消旋转CancelSpin取消正在执行的旋转动作。
取消等待CancelWait取消正在执行的等待动作。
取消驾驶方向CancelDriveOnHeading取消正在执行的朝向驾驶动作。
取消辅助远程操作CancelAssistedTeleop取消正在执行的辅助遥控动作。
取消计算与追踪路线CancelComputePathThroughPoses取消正在执行的多点路径规划。
平滑路径SmoothPath对给定的路径进行平滑处理。
从路径获取位姿GetPoseFromPath从路径中提取特定索引或比例的位姿。
对接机器人DockRobot执行自动回充对接流程。
非对接机器人UndockRobot执行离开充电桩的流程。
连接路径ConcatenatePaths将多条路径连接成一条。
获取当前位置GetCurrentPose获取机器人当前的位姿估计。
附加目标姿势到目标AppendGoalPoseToPath将目标位姿附加到路径末尾。
提取路径节点作为目标ExtractRouteNodesAsGoals从路由网络中提取节点作为导航目标点序列。
获取下一个目标GetNextFewGoals(多目标导航中)获取接下来的几个目标。
切换碰撞监视器ToggleCollisionMonitor启用或禁用碰撞监视系统。
跟随对象FollowObject动态跟踪一个移动的物体。
取消跟随对象CancelFollowObject取消物体跟踪任务。

条件插件 (Condition Plugins)#

中文名称英文名称/ID (常见)功能简介
目标到达GoalReached检查机器人是否已到达最终目标容差范围内。
变换可用TransformAvailable检查所需的坐标变换(TF)是否可用。
行走距离DistanceTraveled检查机器人自某参考点以来是否移动了指定距离。
目标已更新GoalUpdated核心条件。检查导航目标是否在任务执行中被更新。
全局更新目标GloballyUpdatedGoal检查全局(可能来自更高层任务)的目标是否更新。
初始姿势已接收InitialPoseReceived检查是否已收到有效的初始定位位姿。
目标附近IsGoalNearPose检查某个位姿是否在目标附近。
卡住了IsStuck检查机器人是否在指定时间内移动不足(被困)。
停止了IsRobotStopped检查机器人当前是否处于静止状态。
时间已过TimeExpired检查自某参考时间以来是否已过指定时长。
电池低了IsBatteryLow检查机器人电池电量是否低于阈值。
路径有效IsPathValid检查当前规划出的路径是否有效(如未被障碍物完全阻挡)。
位姿被占据IsPoseOccupied检查地图上特定位姿是否被障碍物占据。
路径过期计时器PathExpiringTimer检查当前用于跟踪的路径是否即将过期(需要重新规划)。
存在错误码AreErrorCodesPresent检查是否有特定的错误码被设置。
控制器恢复是否有帮助WouldAControllerRecoveryHelp评估执行控制器级别的恢复动作(如清除局部地图)是否可能解决问题。
规划器恢复是否有帮助WouldAPlannerRecoveryHelp评估执行规划器级别的恢复动作(如清除全局地图)是否可能解决问题。
平滑器恢复是否有帮助WouldASmootherRecoveryHelp评估执行路径平滑是否可能解决问题。
路由恢复是否有帮助WouldARouteRecoveryHelp评估执行路由恢复是否可能解决问题。
电池正在充电IsBatteryCharging检查电池当前是否处于充电状态。
位姿接近ArePosesNear检查两个位姿在距离和角度上是否都足够接近。

控制插件 (Control Plugins)#

中文名称英文名称/ID (常见)功能简介
管道序列PipelineSequence一种特殊的顺序节点,所有子节点在单次Tick中被依次执行,用于需要“流水线”式处理的场景。
循环赛RoundRobin按顺序轮流执行其子节点。
恢复节点RecoveryNode核心恢复逻辑。封装一个“尝试动作-检查结果-重试/回退”的恢复模式。
非阻塞序列ReactiveSequence反应式序列。按顺序执行子节点,但当一个子节点返回RUNNING时,仍会持续检查前面已成功的条件子节点。如果条件失败,则中断正在运行的动作。
持久序列ReactiveFallback反应式回退。尝试子节点,但当一个子节点返回RUNNING时,仍会持续检查其前面的条件/动作。
暂停恢复控制器PauseRecoveryController用于暂停控制器的恢复行为。

装饰器插件 (Decorator Plugins)#

中文名称 (推断)英文名称/ID (常见)功能简介
速率控制器RateController控制其子节点的执行频率(如每秒最多Tick一次)。
距离控制器DistanceController控制其子节点在机器人移动特定距离后才执行一次。
速度控制器SpeedController根据机器人速度调整子节点的行为(如不同速度下使用不同的参数)。
目标更新器GoalUpdater用于在子节点执行前动态更新传递给它的目标参数。
接近时路径加长PathLongerOnApproach当接近目标时,对路径进行特殊处理(如延长以进行精确对准)。
单触发器SingleTrigger确保其子节点只成功执行一次,后续Tick直接返回成功。
目标更新控制器GoalUpdateController控制目标更新的逻辑,可能与GoalUpdater类似或为其组合。

路径规划 插件对比#

目前使用的为 NavFn 插件

规划器类别/插件核心算法路径质量与特性适用机器人类型典型场景主要优势/劣势
NavFnDijkstra / A*离散格点路径,可能有“锯齿”,路径不保证运动学可行圆形差速、全向 (可原地旋转)室内结构化环境、已知地图优势:算法经典、成熟稳定、计算快
劣势:路径不连续、非圆形/阿克曼机器人支持差
Smac 2D PlannerA* (高度优化,4/8连接)优化格点路径,更平滑,支持任意角度到达圆形差速、全向需要平滑路径的室内/结构化环境优势:比传统Grid-Based路径更优、计算高效,是Nav2新默认规划器
Theta* PlannerTheta* (基于A*)任意角度直线路径,绕过格点约束,更接近理论最短圆形差速、全向追求路径最短、平滑的场景优势:路径长度理论最优、更自然
劣势:计算量稍大、需调参保证可行性
Smac Hybrid-AHybrid-A*运动学可行路径,连续曲率,支持倒车阿克曼、足式、任意形状汽车模型、户外、非完整约束机器人优势:保证运动学可行、可处理任意形状轮廓
劣势:计算量大于2D规划器
Smac State LatticeState Lattice运动学可行路径,基于运动基元库,非常平滑差速、全向、阿克曼及自定义模型对平滑性和精确运动控制要求高的场景优势:路径平滑度高、可定制运动基元
劣势:需要预生成/加载运动基元库

控制器 插件对比#

控制器算法插件#

目前使用的为 MPPI 控制器

控制器名称核心原理主要优势主要劣势/挑战典型使用场景适用机器人类型
DWB Controller采样优化:生成多个可行的速度命令(轨迹),通过包含路径跟随、避障、速度等的代价函数进行评分,选择综合得分最高的轨迹执行。1. 灵活可调:可通过代价函数灵活定义机器人行为。
2. 约束全面:易于融入动力学、平滑性等约束。
3. 动态避障:能较好处理动态障碍物。
1. 计算负担较重:实时生成和评估多条轨迹消耗资源。
2. 参数调优复杂:代价函数权重需仔细调整以平衡不同目标。
复杂动态环境下的高精度轨迹跟踪、需要灵活行为调整的场景。差速、全向轮式移动机器人。
Graceful Controller基于李雅普诺夫稳定性设计:在极坐标空间将运动分解为朝向(快子系统)和位置(慢子系统)控制,保证全局渐近稳定收敛。1. 轨迹平滑:理论保证产生平滑、无超调的轨迹。
2. 乘坐舒适:非常适用于载人机器人。
3. 理论保证强:有严格的数学稳定性证明。
1. 动态环境适应性有限:原生设计主要针对静态路径跟踪,处理复杂动态障碍物能力较弱。
2. 调参抽象:参数与实际运动表现的对应关系不如其他控制器直观。
服务机器人、接待机器人、展示机器人等对运动平稳性和舒适性要求极高的场景。差速、全向移动机器人。
MPPI并行随机采样:在控制序列上施加随机扰动,通过GPU并行前向模拟生成大量“假设”轨迹,按指数加权代价选择最优控制序列。1. 无需梯度:可处理非平滑、不连续的代价函数,适用性广。
2. 擅长复杂模型:能很好处理机器人及环境的强非线性。
3. 并行高效:算法天然适合GPU加速,实时性潜力大。
1. 依赖精确模型:前向模拟的质量完全取决于系统动力学模型的准确性。
2. 计算资源要求高:尽管可并行,但要达到实时仍需可观算力(通常需GPU)。
3. 理论门槛高:理解和调优相对复杂。
高动态、交互密集的复杂环境(如密集人群穿行、多机器人协作)、对控制性能有极致追求的前沿应用。各类移动机器人、机械臂等,尤其适合计算平台强大的机器人。
Regulated Pure Pursuit几何追踪 + 启发式规则:跟随路径前方一定距离的“前视点”,并加入对曲率、接近障碍物等因素的启发式速度调节规则。1. 简单高效:计算量极小,非常稳定可靠。
2. 易于理解和调试:参数物理意义明确(前视距离、速度等)。
3. 安全增强:速度调节规则能在靠近障碍物或急弯时自动减速。
1. 灵活性一般:行为主要由几何和简单规则决定,难以实现非常复杂的跟踪或避障行为。
2. 复杂场景适应性有限:在极度混乱或动态极强的环境中可能表现不佳。
仓库物流机器人、酒店送货机器人、大多数服务机器人等需要稳定、可靠导航的日常场景。差速机器人为主,部分适配全向和阿克曼转向机器人。
Rotation Shim Controller前处理垫片:在路径跟踪主控制器执行前,判断路径初始方向与机器人当前朝向的偏差。若超过阈值,则先指令机器人原地旋转至对准路径,再移交控制权。1. 解决特定问题:有效处理大初始航向偏差,避免“倒车”等异常。
2. 模块化设计:作为预处理插件,可与任何主控制器(如Pure Pursuit, DWB)无缝配合,提升其起始性能。
1. 功能单一:仅处理起始旋转问题,不负责后续路径跟踪。
2. 依赖主控制器:必须与其他控制器配合使用。
规划器生成的路径起始方向与机器人当前朝向存在较大偏差时;与非考虑运动学的规划器(如NavFn)配合使用时。可原地旋转的差速、全向移动机器人。

控制器的目标检查器 插件#

SimpleGoalChecker:检查机器人是否在目标点的平移距离(位置)和旋转距离(角度)容差范围内,检查 位置+角度 容差
StoppedGoalChecker:检查机器人是否在目标点的平移距离(位置)和旋转距离(角度) 以及速度阈值,检查 位置+角度+速度
PositionGoalChecker:检查机器人是否在目标点平移距离(直线距离)范围内,而不要求旋转方向(角度)对准,只检查 位置 ,不检查 角度

控制器的进程检查器 插件#

SimpleProgressChecker:检查机器人在给定时间内是否能够移动一段最小距离以向目标点推进 距离目标的减少量
PoseProgressChecker:检查机器人在给定时间内是否能够移动一段最小直线距离或旋转一个最小角度以向目标点推进 与目标姿态的相对进展

路径平滑器插件#

Simple Smoother:一个简单的路径平滑化 不可行(例如二维) 规划器(默认)
Constrained Smoother:使用一个更光滑的路径 约束问题解决器 以优化各种标准 例如光滑性或 距离障碍物, 保持最小转向 半径
Savitzky-Golay Smoother:使用一个更光滑的路径 萨维茨基-戈莱滤波器 将路径平滑化为 数字信号处理 以消除噪声 路径

航点任务执行器 插件#

WaitAtWaypoint: 用于执行等待的插件 行为开启 航点到达
PhotoAtWaypoint: 用于保存照片的插件 到指定的目录 航点到达(无法执行触发拍照功能,在此插件基础上修改增加功能)
InputAtWaypoint: 等待用户输入的插件 然后再进入下一个 航点

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Nav2 笔记
https://niushaoxiong.top/posts/nav2-笔记/
作者
一只捡星星的熊
发布于
2026-01-05
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录