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
  • »
  • 普通教程 »
  • 导航速度限制

导航速度限制

  • 概述

  • 必要条件

  • 教程指南

概述

本教程展示了如何简单地使用速度过滤器,该过滤器旨在限制地图上标记的速度限制区域中机器人的最大速度。该功能由 SpeedFilter costmap过滤器插件提供,该插件将在本文档中启用。 [待校准@1368]

要求

假设ROS 2、Gazebo和TurtleBot3包是在本地安装或构建的。请确保Nav2项目也是在当地建造的,因为它是在 编译和安装 制造的。 [待校准@1369]

Tutorial Steps

1.准备过滤器掩码

正如 导航相关概念 所写,任何代价地图过滤器 (包括速度过滤器) 都在读取过滤器掩码文件中标记的数据。所有关于过滤面罩、它们的类型、详细结构以及如何制作新面罩的信息都写在 1. Prepare filter masks 章节的 导航禁止区 [校准@mzebra] 教程中。绘制速度过滤器的过滤器掩码的原理与Keepout过滤器的原理相同 (用所请求的区域注释地图),不同之处在于 OccupancyGrid 掩模值具有另一含义: 这些值是与地图上的单元格相对应的区域的编码速度限制。 [待校准@1370]

让我们,如何解码。我们知道, OccupancyGrid 值属于 [0..100] 范围。速度过滤器 0 价值意味着没有限速区域相应零细胞面具。值 [1..100] 范围线性转换成限速值以下公式: [待校准@1371]

speed_limit = filter_mask_data * multiplier + base;

其中: [校准@小鱼]

  • 应限制最大速度的面罩上相应电池的``filter_mask_data`` - is an OccupancyGrid value。 [待校准@1373]

  • 参数``base`` and multiplier are coefficients taken from nav2_msgs/CostmapFilterInfo messages由代价地图过滤信息服务器发布 (见下文)。 [待校准@1374]

解码的 speed_limit 值可能有以下两种含义之一: [待校准@1375]

  • 速度限制,以机器人最大速度的百分比表示。 [待校准@1376]

  • 限速表达绝对值 (例如 m/s )。 [待校准@1377]

速度过滤器使用的含义是从 nav2_msgs/CostmapFilterInfo 信息中读取。在本教程中,我们将使用第一种速度限制,以最大机器人速度的百分比表示。 [待校准@1378]

备注

速度限制表达百分比, speed_limit 将使用完全百分比属于 [0..100] 范围,不 [0.0..1.0] 范围。 [待校准@1379]

创建具有PGM/PNG/BMP格式的新图像: 将将用于世界模拟的 turtlebot3_world.pgm 主图从Nav2存储库复制到新的 speed_mask.pgm 文件中。在你最喜欢的光栅图形编辑器中打开 speed_mask.pgm ,用灰色填充速度限制区域。在我们的例子中,较深的颜色将指示具有更高速度限制的区域: [待校准@1380]

../../_images/drawing_speed_mask.png

区域 "A" 充满 ”40%” 灰色,区域 "B" -”70%” 灰色,这意味着限速将寸100% 40% = 60% ”在区域 "A" 和” 100% 70% = 30% ”在区域 "B" 最大速度值允许机器人。我们将使用没有阈值的 scale 映射模式。在这种模式下,较暗的颜色将具有较高的 OccupancyGrid 值。例如,对于灰色 OccupancyGrid “70%” 的面积 "B" ,数据将等于 70 。所以为了达到目标,我们需要选择 base = 100.0 和 multiplier = -1.0 。这将把 OccupancyGrid 值的比例反转为期望的比例。为了方便起见,在 yaml 文件中没有选择阈值 ( free_thresh occupied_thresh ): 将亮度值从滤波器掩码-> 到速度限制百分比进行1:1的全范围转换。 [待校准@1381]

备注

这是典型的,但不是 base 和 multiplier 的强制性选择。例如,你可以选择地图模式为 raw 。在这种情况下,颜色亮度直接转化为 OccupancyGrid 值。对于以 raw 模式保存的口罩, base 和 multiplier 相应地等于 0.0 和 1.0 。 [待校准@1382]

另一件重要的事情是没有必要使用整个 [0..100] 百分比量表。可以选择 base 和 multiplier 系数,以便速度限制值属于百分比范围的中间位置。例如, base = 40.0 , multiplier = 0.1 将从 “[40.0% 37 50.0%] `` range with a step of `` 0.1%” 给出速度限制。这可能对微调有用。 [待校准@1383]

在所有限速区域被填满后,保存 speed_mask.pgm 图像。 [待校准@1384]

像所有其他地图,滤镜蒙版应该自己YAML元数据文件。复制 turtlebot3_world.yaml 转 speed_mask.yaml 。打开 speed_mask.yaml 和更新字段如下所示 (如上所述的 scale 模式整色彩明度范围不应阈值: free_thresh = 0.0 和 occupied_thresh = 1.0 ): [待校准@1385]

image: turtlebot3_world.pgm
->
image: speed_mask.pgm

mode: trinary
->
mode: scale

occupied_thresh: 0.65
free_thresh: 0.196
->
occupied_thresh: 1.0
free_thresh: 0.0

由于代价地图2D不支持定向, origin 向量的最后第三个 "yaw" 分量应该等于零 (例如: “原点: [1.25,-5.18,0.0]”)。保存 speed_mask.yaml ,新的过滤面罩就可以使用了。 [待校准@1386]

备注

世界地图本身滤镜蒙版可以大小不同,起源和决议可能有用 (e。g.用例时滤镜蒙版覆盖小地区地图或当过滤器掩码用于多次反复,像注释速度禁区相同形状客房)。在这种情况下,您还需要更正YAML中的 resolution 和 origin 字段,以便将过滤器掩码正确放置在原始地图的顶部。此示例说明使用主地图为基础,但不需要。 [待校准@1387]

2.配置成本地图过滤器信息发布服务器 [校准@混沌无形]

每个costmap过滤器读取传入meta信息 (如过滤器类型或数据转换系数) 的 nav2_msgs/CostmapFilterInfo 类型。这些信息由 Costmap Filter Info Publisher Server 出版。服务器作为生命周期节点运行。根据 design document 的说法, nav2_msgs/CostmapFilterInfo 的消息与 OccupancyGrid 的过滤面具主题成对。因此,随着代价地图过滤器信息发布服务器应该启用新实例地图服务器配置为发布过滤器面具。 [待校准@1388]

为了使速度滤波器配置,服务器应启用生命周期节点Python启动文件。例如,这可能如下所示: [待校准@1389]

import os

from ament_index_python.packages import get_package_share_directory

from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node
from nav2_common.launch import RewrittenYaml


def generate_launch_description():
    # Get the launch directory
    costmap_filters_demo_dir = get_package_share_directory('nav2_costmap_filters_demo')

    # Create our own temporary YAML files that include substitutions
    lifecycle_nodes = ['filter_mask_server', 'costmap_filter_info_server']

    # Parameters
    namespace = LaunchConfiguration('namespace')
    use_sim_time = LaunchConfiguration('use_sim_time')
    autostart = LaunchConfiguration('autostart')
    params_file = LaunchConfiguration('params_file')
    mask_yaml_file = LaunchConfiguration('mask')

    # Declare the launch arguments
    declare_namespace_cmd = DeclareLaunchArgument(
        'namespace',
        default_value='',
        description='Top-level namespace')

    declare_use_sim_time_cmd = DeclareLaunchArgument(
        'use_sim_time',
        default_value='true',
        description='Use simulation (Gazebo) clock if true')

    declare_autostart_cmd = DeclareLaunchArgument(
        'autostart', default_value='true',
        description='Automatically startup the nav2 stack')

    declare_params_file_cmd = DeclareLaunchArgument(
            'params_file',
            default_value=os.path.join(costmap_filters_demo_dir, 'params', 'speed_params.yaml'),
            description='Full path to the ROS 2 parameters file to use')

    declare_mask_yaml_file_cmd = DeclareLaunchArgument(
            'mask',
            default_value=os.path.join(costmap_filters_demo_dir, 'maps', 'speed_mask.yaml'),
            description='Full path to filter mask yaml file to load')

    # Make re-written yaml
    param_substitutions = {
        'use_sim_time': use_sim_time,
        'yaml_filename': mask_yaml_file}

    configured_params = RewrittenYaml(
        source_file=params_file,
        root_key=namespace,
        param_rewrites=param_substitutions,
        convert_types=True)

    # Nodes launching commands
    start_lifecycle_manager_cmd = Node(
            package='nav2_lifecycle_manager',
            executable='lifecycle_manager',
            name='lifecycle_manager_costmap_filters',
            namespace=namespace,
            output='screen',
            emulate_tty=True,  # https://github.com/ros2/launch/issues/188
            parameters=[{'use_sim_time': use_sim_time},
                        {'autostart': autostart},
                        {'node_names': lifecycle_nodes}])

    start_map_server_cmd = Node(
            package='nav2_map_server',
            executable='map_server',
            name='filter_mask_server',
            namespace=namespace,
            output='screen',
            emulate_tty=True,  # https://github.com/ros2/launch/issues/188
            parameters=[configured_params])

    start_costmap_filter_info_server_cmd = Node(
            package='nav2_map_server',
            executable='costmap_filter_info_server',
            name='costmap_filter_info_server',
            namespace=namespace,
            output='screen',
            emulate_tty=True,  # https://github.com/ros2/launch/issues/188
            parameters=[configured_params])

    ld = LaunchDescription()

    ld.add_action(declare_namespace_cmd)
    ld.add_action(declare_use_sim_time_cmd)
    ld.add_action(declare_autostart_cmd)
    ld.add_action(declare_params_file_cmd)
    ld.add_action(declare_mask_yaml_file_cmd)

    ld.add_action(start_lifecycle_manager_cmd)
    ld.add_action(start_map_server_cmd)
    ld.add_action(start_costmap_filter_info_server_cmd)

    return ld

在 params_file 变量应设置YAML文件有ROS参数成本地图过滤器信息发布服务器和地图服务器节点。这些参数及其含义列在 Map Server / Saver 页面。请参考信息。 params_file 示例如下: [校准@混沌无形]

costmap_filter_info_server:
  ros__parameters:
    use_sim_time: true
    type: 1
    filter_info_topic: "/costmap_filter_info"
    mask_topic: "/speed_filter_mask"
    base: 100.0
    multiplier: -1.0
filter_mask_server:
  ros__parameters:
    use_sim_time: true
    frame_id: "map"
    topic_name: "/speed_filter_mask"
    yaml_filename: "speed_mask.yaml"

请注意: [待校准@1325]

  • 速度过滤器设置速度限制百分比最大速度, type 的costmap过滤器应设置 1 。所有可能costmap过滤器类型可以发现在 Map Server / Saver 页面。 [待校准@1390]

  • 过滤器掩码的话题名称应与成本地图过滤器信息发布服务器的 mask_topic 参数和地图服务器的``topic_name``参数相同。 [校准@混沌无形]

  • 正如描述前一章, base 和 multiplier 应设置 100.0 和 -1.0 因此在本教程示例。 [待校准@1391]

准备去独立Python启动脚本,YAML文件ROS参数过滤器掩码示例速度过滤器可以发现 nav2_costmap_filters_demo 目录 navigation2_tutorials 库。要简单地运行过滤器信息发布服务器和地图服务器,Turtlebot3 在 入门 编写的标准模拟上进行调整,构建演示并按如下方式启动 costmap_filter_info.launch.py : [待校准@1392]

$ mkdir -p ~/tutorials_ws/src
$ cd ~/tutorials_ws/src
$ git clone https://github.com/ros-planning/navigation2_tutorials.git
$ cd ~/tutorials_ws
$ colcon build --symlink-install --packages-select nav2_costmap_filters_demo
$ source ~/tutorials_ws/install/setup.bash
$ ros2 launch nav2_costmap_filters_demo costmap_filter_info.launch.py params_file:=src/navigation2_tutorials/nav2_costmap_filters_demo/params/speed_params.yaml mask:=src/navigation2_tutorials/nav2_costmap_filters_demo/maps/speed_mask.yaml

3.启用速度过滤器 [待校准@1393]

代价地图过滤器是Costamp2D插件。您可以在代价地图2D中启用 SpeedFilter 插件,方法是将 speed_filter 添加到 nav2_params.yaml 中的 plugins 参数中。速度过滤器插件应定义以下参数: [待校准@1394]

  • plugin: type of plugin. In our case nav2_costmap_2d::SpeedFilter. [待校准@1395]

  • 上一章中的代价地图过滤器信息发布者服务器的``filter_info_topic``: filter info topic name. This needs to be equal to filter_info_topic parameter。 [待校准@1396]

  • 参数``speed_limit_topic``:名称主题发布速度限制。 [待校准@1397]

全参数列表支持 SpeedFilter 列出在 速度过滤器参数 [待校准@2976] 页面。 [待校准@1398]

你可以插件中 global_costmap 部分 nav2_params.yaml 有速度限制面罩应用于全球costmap或 local_costmap 应用速度面具当地costmap。然而, SpeedFilter 插件不应该同时为全球和本地成本地图启用。否则,它会导致速度限制边界上不必要的多个 "speed restriction" - "no restriction" 信息链,这将导致机器人的抽搐或其他不可预测的行为。 [待校准@1399]

在本教程中,我们将为全局costmap启用速度过滤器。为此,请使用以下配置: [待校准@1400]

global_costmap:
  global_costmap:
    ros__parameters:
      ...
      plugins: ["static_layer", "obstacle_layer", "inflation_layer"]
      filters: ["speed_filter"]
      ...
      speed_filter:
        plugin: "nav2_costmap_2d::SpeedFilter"
        enabled: True
        filter_info_topic: "/costmap_filter_info"
        speed_limit_topic: "/speed_limit"

正如 design ,过滤风速发布速度制约 messages 针对性的控制器服务器,以便限制最大速度机器人需要。控制器服务器 speed_limit_topic ROS参数,应设置为相同 speed_filter 插件阀门。本课题在地图服务器也可以使用任意数量的速度限制应用超越限制区域,如动态调整最大速度载荷质量。 [待校准@1401]

套装 speed_limit_topic 参数控制器服务器值相同它为 speed_filter 插件: [待校准@1402]

controller_server:
  ros__parameters:
    ...
    speed_limit_topic: "/speed_limit"

4.运行Nav2软件 [校准@混沌无形]

后代价地图过滤器信息发布服务器和地图服务器启动速度滤波器启用全球/本地costmap,运行Nav2堆栈写在 入门 : [待校准@1403]

ros2 launch nav2_bringup tb3_simulation_launch.py

更好的可视化速度滤镜蒙版,RViz在左 Displays 窗格展开 Map 改变 Topic 从 /map -> /speed_filter_mask 。设置目标背后限速和检查过滤器工作正常: 机器人应该减速经历速度制约领域。下面是如何看起来 (图速度过滤器启用全球costmap第二- speed_mask.pgm 滤镜蒙版): [待校准@1404]

../../_images/speed_global.gif ../../_images/speed_mask.png

© 版权所有 2020.