机器人

使用 ROS 2 和 TAO-PointPillars 检测点云中的对象

准确、快速的目标检测是机器人导航和避碰的重要任务。自主代理需要一张清晰的周围地图,才能导航到目的地,同时避免碰撞。例如,在使用自主移动机器人( AMR )运输物品的仓库中,避免可能损坏机器人的危险机器已成为一个具有挑战性的问题。

本文介绍了一个 ROS 2 节点,用于使用基于 PointPillarsNVIDIA TAO Toolkit 预处理模型检测点云中的对象。该节点将点云作为真实或模拟激光雷达扫描的输入,执行 TensorRT 优化推断以检测该输入数据中的对象,并将生成的 3D 边界框作为每个点云的 Detection3DArray 消息输出。

虽然存在多个 ROS 节点用于从图像中检测目标,但从激光雷达输入执行目标检测的优点包括:

  • 激光雷达可以同时计算到许多被探测物体的精确距离。利用激光雷达直接提供的目标距离和方向信息,可以获得精确的环境三维地图。为了在基于相机/图像的系统中获得相同的信息,需要单独的距离估计过程,这需要更多的计算能力。
  • 与相机不同,激光雷达对不断变化的光照条件(包括阴影和强光)不敏感。

通过使用激光雷达和相机的组合,可以使自主系统更加稳健。这是因为摄像机可以执行激光雷达无法执行的任务,例如检测标志上的文字。

TAO PointPillars 基于论文 PointPillars: Fast Encoders for Object Detection from Point Clouds 中的工作,该论文描述了一个编码器,用于从垂直列(或柱)中组织的点云中学习特征。 TAO PointPillars 既使用了编码特征,也使用了本文描述的下游检测网络。

在我们的工作中,根据 Zvision 的固态激光雷达采集的点云数据集训练了 PointPillar 模型。 The PointPillar model 检测三类物体:车辆、行人和自行车手。您可以按照 TAO Toolkit 3D Object Detection 步骤训练自己的检测模型,并将其用于此节点。

有关运行节点的详细信息,请访问 GitHub 上的 NVIDIA-AI-IOT/ros2_tao_pointpillars 。您还可以查看 NVIDIA Isaac ROS ,了解 NVIDIA 为各种感知任务提供的更多硬件加速 ROS 2 软件包。

Block diagram of the ROS 2 TAO-PointPillars node with names of ROS 2 topics subscribed to and published by the node.
图 1.ROS 2 TAO PointPillars 节点

ROS 2 TAO PointPillars 节点

本节提供有关在机器人应用程序中使用 ROS 2 TAO PointPillars 节点的更多详细信息,包括输入/输出格式以及如何可视化结果。

Node Input: 节点以 PointCloud2 消息格式将点云作为输入。除其他信息外,点云必须包含每个点( x 、 y 、 z 、 r )的四个特征,其中( x 、 y 、 z 、 r )分别表示 x 坐标、 y 坐标、 z 坐标和反射率(强度)。

反射率表示激光束在 3D 空间某一点反射回来的分数。请注意,在训练数据和推断数据中,反射率值的范围应相同。可以从节点的启动文件中设置强度范围、类名、 NMS IOU 阈值等参数。

您可以访问 GitHub 上的 ZVISION-lidar/zvision_ugv_data ,找到用于测试节点的 ROS 2 包。

 

An example of the Zvision camera point of view (left), corresponding point cloud from the lidar (center), and the result after inference using TAO-PointPillars (right). The people and truck are detected correctly.
图 2.Zvision 相机视点示例(左)、激光雷达的对应点云(中)以及使用 TAO PointPillars 推断后的结果(右)。正确检测人员和卡车。

Node Output: 节点以 Detection3DArray 消息格式输出点云中检测到的每个对象的 3D 边界框信息、对象类 ID 和分数。每个 3D 边界框用( x , y , z , dx , dy , dz , yaw )表示,其中( x , y , z , dx , dy 、 dz , haw )分别是对象中心的 x 坐标、对象中心的 y 坐标、对象中央的 z 坐标、长度( x 方向)、宽度( y 方向)、高度( z 方向)和 3D 欧氏空间中的方向。

对于有意义的结果,模型在训练期间使用的坐标系和输入数据在推理期间使用的座标系必须相同。图 3 显示了 TAO PointPillars 模型使用的坐标系。

The coordinate system used by TAO-PointPillars. Origin is the center of lidar. X axis is to the front, Y axis is to the left and Z axis is upwards. Yaw is the rotation in the X-Y plane, in counter-clockwise direction. So X axis corresponds to yaw = 0 and Y axis corresponds to yaw = pi / 2.
图 3.TAO PointPillars 模型使用的坐标系

由于 Detection3DArray 消息目前无法在 RViz 上可视化,因此您可以通过访问 GitHub 上的 NVIDIA-AI-IOT/viz_3Dbbox_ros2_pointpillars 找到一个简单的工具来可视化结果。

对于下图 4 所示的示例, Jetson AGX Orin 上输入点云的频率为~ 10 FPS ,输出 Detection3DArray 消息的频率为~ 10 FPS 。

A GIF compilation of three images: The Zvision camera point of view; the point cloud from the Zvision lidar; and the detection results using TAO-PointPillars.
图 4 :从左上角逆时针方向: Zvision 相机视角的图像; Zvision 激光雷达的点云;和使用 TAO PointPillars 的检测结果

总结

实时准确的目标检测是自治主体安全导航环境所必需的。本文展示了一个 ROS2 节点,它可以使用预处理的 TAO PointPillars 模型检测点云中的对象。(请注意,该模型的 TensorRT 引擎目前仅支持一个批次大小。)该模型直接对激光雷达输入进行推断,这与使用基于图像的方法相比具有优势。为了对激光雷达数据进行推断,必须使用根据同一激光雷达数据训练的模型。否则,除非采用统计归一化等方法,否则准确度将大幅下降。

 

Tags