定位监视器
ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html
检测异常系统状态并采取纠正措施有助于确保稳定的系统性能和与预期行为的最小偏差。 为此,Isaac SDK 提供了一个监控框架,可以搭载多种系统观察组件。 该框架目前包含专门用于监控机器人定位当前状态的组件。 凭借其模块化方法,它可以针对个别场景和用例轻松定制。 它由多个协同工作的组件组成:
-
从各个评估器组件收集系统性能等级的中央监视器组件。
-
定期将有关系统特定部分的性能等级发送到一个或多个连接的监视器组件的评估器组件。 以下评估人员是此版本的一部分:
-
flatscan_localization::MonitorEvaluatorFrequency:观察在指定的 FlatscanProto 通道上接收消息的频率,并向监视器报告与预期频率的偏差。
-
flatscan_localization::MonitorEvaluatorMapscan:持续将接收到的 FlatscanProto 激光扫描消息与当前估计的机器人姿态的预测激光扫描进行比较。 向 Monitor 报告一致程度。
-
flatscan_localization::MonitorEvaluatorSvio:观察两个不同姿态估计框架之间的漂移,并报告两者之间随时间的偏差。 例如,这可以用于检测基于激光扫描的定位和基于立体视觉惯性里程计的定位之间的漂移。
-
-
Monitor 使用 EvaluatorGradeFusion 组件组合多个收到的性能等级以形成可用于派生操作的总体等级。 在此版本中,实现了一种 EvaluatorGradeFusion:
- MaxValueGradeFusion:返回所有当前收到的评估者评分中最高(最差)的评分值。
多个监视器实例可以存在于同一系统中,并且评估者可以通过将他们的等级边缘连接到监视器实例的任何唯一输入通道来将他们的数据并行地报告给多个监视器实例。 Monitor 组件中提供了以下参数:
-
evaluator_max_age:在任何时候,如果任何评估程序停止发送消息的时间超过此参数中指定的持续时间(以秒为单位),则会报告失败。
-
fused_grade_threshold:当Monitor实例当前使用的EvaluatorGradeFusion实例返回值大于该参数时,报失败。
-
settle_time:启动此小代码以开始评估后等待的时间(以秒为单位)。 这使整个系统有时间在初始启动阶段后稳定下来,并防止基于不代表正在运行的系统状态的数据采取行动。
一般本地化子图包括使用前两个评估器的本地化监视器设置。 如果 Monitor 实例报告失败,则重新启动全局本地化。 可以通过以下配置键更改基本配置:
navigation.localization.localization_monitor.Monitor -> evaluator_max_age
navigation.localization.localization_monitor.Monitor -> fused_grade_threshold
navigation.localization.localization_monitor.Monitor -> settle_time
navigation.localization.evaluator_frequency.Evaluator -> threshold
navigation.localization.evaluator_frequency.Evaluator -> expected_frequency
navigation.localization.evaluator_mapscan.Evaluator -> map
navigation.localization.evaluator_mapscan.Evaluator -> range_scan_model
navigation.localization.evaluator_mapscan.Evaluator -> flatscan_frames
navigation.localization.evaluator_mapscan.Evaluator -> robot_frame
navigation.localization.evaluator_mapscan.Evaluator -> beam_distance_threshold
navigation.localization.evaluator_mapscan.Evaluator -> good_beams_threshold
根据 Localization Monitor 部署场景的不同,expected_frequency 参数需要适配为被监控 flatscan 源的实际预期频率。 如有疑问,请使用较低的预期频率,因为高于预期的频率不会对监视器行为产生负面影响。 如果频率变化幅度相对较高,则可以调整阈值参数,以防止来自监视器的虚假故障报告。
如果系统的启动时间超过监视器的默认值(3 秒),可以相应地调整 settle_time 参数。 在 Monitor 决策看起来过于保守的情况下,例如 当由于非常嘈杂的传感器输入而过早报告故障时,可以增加 fused_grade_threshold 以适应这种情况。
如果用于定位变化的占用网格图经常不能准确代表实际环境,则可以增加 beam_distance_threshold 和 good_beams_threshold(范围从 0.0 到 1.0)。
如果您希望实施额外的评估器或等级融合,请注意以下设计指南:
-
评估者必须将 CompositeProto 类型的消息发送到 Monitor 实例的唯一输入通道。 这些消息必须包含现场等级,如果达到预期的性能结果,则该等级应为 0.0。 正值(理想情况下标准化为 1.0)表示性能比预期差,负值(标准化为 -1.0)表示性能好于预期。
-
Grade Fusion 组件必须派生自组件::isaac::monitor::EvaluatorGradeFusion 并且必须实现其接口。 fuseGrades 返回的值应遵循上述评估者等级的指标。
在 Isaac Sight 中可视化当前监视器状态
可以使用 Isaac Sight 可视化监控器和评估器组件的当前状态。 这包括 Monitor 的整体等级,以及单个评估器等级及其特定值(例如 MonitorEvaluatorFrequency 测量的频率。
在 Sight 中,激活以下消息通道以可视化监控器和评估器等级(它们的位置可能因实际应用程序设置而异):
navigation.localization.evaluator_frequency.Evaluator -> grade
navigation.localization.evaluator_mapscap.Evaluator -> grade
navigation.localization.localization_monitor.Monitor -> grade
然后可以在二维图中可视化这些通道,以分析给定场景中定位的薄弱点:
各个评估者的内部状态也可以可视化:
更多精彩内容:
https://www.nvidia.cn/gtc-global/?ncid=ref-dev-876561