Isaac导航
ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html
节点和消息
Isaac 应用程序由多个节点创建。 导航堆栈具有以下节点:
-
GlobalLocalization:在没有先验信息的情况下,仅使用当前范围扫描测量来估计地图中机器人的位姿。
-
ParticleFilterLocalization:使用范围扫描测量持续跟踪机器人的姿态。
-
GlobalPlanner:使用当前已知的地图和其他障碍物(例如限制区域、附近的障碍物等)计算到目标的路径。 Global Planner 使用可见性图算法。 为了获得更好的性能,我们建议通过增加随机样本的数量来构建一个大(密集)图。 如果构建图形太慢,可以从文件加载预构建图形。
-
GlobalPlannerSmoother:使用捷径和其他策略改进
Global Planner
路径。 -
LqrPlanner:计算机器人的最佳轨迹,使其在所需路径上平稳行驶。
-
DifferentialBaseControl:一个基本控制器,使用基本轨迹计划输出当前基本命令消息。
-
LocalMap:使用范围扫描测量创建机器人周围障碍物的表示。
-
DifferentialBaseOdometry:使用差分基础的里程计估计来估计机器人的自我运动。
-
地图:提供环境地图到其他各种节点。
-
ObstacleAtlas:提供所有障碍物列表的接口,包括全局地图、局部地图、禁区等。
-
RobotModel:提供距离扫描模型和差分基础模型,以支持其他各种节点的计算。 可以使用重叠圆的列表来描述机器人的形状。
-
Websight:将所有节点的各种可视化和绘图数据发布到 Web 前端。
节点相互发送消息,如下图中的箭头所示。 使用消息传递将应用程序分成模块化实体。 节点可以并行执行并定期运行或在收到新消息时运行。 一些节点,如地图或范围扫描模型,不发布消息但充当服务提供者,其他节点直接链接到它们。
导航堆栈具有以下传入和传出消息类型。 除了这些消息之外,导航堆栈还使用各种内部消息在其各个节点之间进行通信。
-
RangeScanProto:平面范围扫描,包含传感器周围极坐标扫描中到障碍物的距离。 例如,这可以通过 Velodyne Puck 等激光雷达传感器计算得出。
-
GoalProto:包含所需目标姿势的消息。
-
DifferentialBaseControl:控制器产生的差分底座的所需运动。 平稳安全,可直接用于驱动机器人。
多激光雷达全局定位
Isaac SDK 全局定位组件 GridSearchLocalizer 允许您使用任意数量的 LIDAR 设备在已知的占用网格地图中执行定位。 每个 LIDAR 设备在 flatscan_frames 参数中都有一个条目,表示其相对于机器人中心的坐标系。 每个 LIDAR 设备也有一个唯一的通道用于接收 flatscan
消息:这些通道列在 flatscan_channel_names
参数中。
例如,如果您有两个 LIDAR 传感器:
-
LIDAR 1,带有坐标系 lidar_1 和传入消息通道 flatscan_1
-
LIDAR 2,坐标系 lidar_2 和传入消息通道 flatscan_2
GridSearchLocalizer
的参数如下:
flatscan_frames: ["lidar_1", "lidar_2"]
flatscan_channel_names: ["flatscan_1", "flatscan_2"]
请注意,每个列表中的条目都是相关的:flatscan_frames
中的第 n 个条目对应于 flatscan_channel_names
中的第 n 个条目。
指定这些参数后,将平面扫描源(即 LIDAR 驱动程序组件)的边缘连接到 GridSearchLocalizer
上的传入通道(例如 flatscan_1 和 flatscan_2)。 定位器组件会一直等待,直到在每个已注册的通道上至少收到一条消息,并且 flatscan_frames 列表中的所有坐标系都可用。 然后它制定一个优化问题并使用 GPU 解决它。
更多精彩内容:
https://www.nvidia.cn/gtc-global/?ncid=ref-dev-876561