主要内容

基于网格跟踪在城市环境中使用多个激光雷达

这个例子展示了如何跟踪移动物体与多个激光雷达使用基于网格的跟踪。基于网格追踪允许早期从高分辨率传感器的融合数据如雷达和激光雷达来创建一个全局对象列表。

介绍

大多数多目标跟踪方法代表了环境作为一组离散的和未知的对象数。跟踪器的工作是评估对象的数量及其相应的州,如位置,速度,和维度,使用传感器测量。与高分辨率雷达或激光雷达等传感器跟踪算法可以配置使用point对象追踪器或扩展对象追踪器。

point对象追踪器

point对象追踪器假设每个对象可能产生最多一检测传感器。因此,当使用点目标跟踪器跟踪扩展对象,功能边界框检测首先从传感器测量中提取对象级。这些对象级特性然后从跟踪器获取融合对象级别的假说。贫困对象级提取算法在传感器水平(如不完美的集群)因此极大地影响跟踪器的性能。对这种工作流程的一个例子,请参考使用激光雷达跟踪车辆:从点云来跟踪列表(自动驾驶工具箱)

扩展对象追踪器

另一方面,扩展对象追踪过程的检测没有提取对象级假设传感器水平。扩展对象追踪器将传感器直接测量与对象级假设由跟踪维护。要做到这一点,一个类的算法通常需要复杂的测量模型对象的扩展特定于每个传感器形态。例如,引用扩展对象与激光雷达跟踪机场地面监视扩展对象的高速公路车辆跟踪雷达和摄像头(自动驾驶工具箱)学习如何配置多目标追踪博士分别对激光雷达和雷达。

基于网格的跟踪器可以被视为一种扩展对象跟踪算法使用一个动态占用网格地图的中间表示环境。在动态占用网格地图、环境使用的一组二维离散网格细胞。动态地图表示空间的占用以及运动学由一个网格单元表示。使用动态地图估计和细胞的进一步分类静态和动态过滤测量作为预处理步骤从静态对象和减少计算复杂度。

在本例中,您使用trackerGridRFS系统对象™配置基于网格的追踪。该跟踪器使用随机有限集(RFS)制定Dempster-Shafer近似[1]估计动态地图。此外,它使用一个最近邻cell-to-track协会[2]方案跟踪动态场景中的对象。初始化新的跟踪,跟踪使用集群DBSCAN算法未赋值的动态网格细胞。

设置场景和激光雷达传感器模型

本例中使用的场景是使用创建的驾驶场景设计师(自动驾驶工具箱)应用,并出口到一个MATLAB®函数。这个MATLAB函数被包裹一个helper函数helperCreateMultiLidarDrivingScenario。场景代表了一个城市的十字路口场景,包含各种各样的对象,包括行人、自行车、汽车和卡车。

自我车辆配备6均匀的激光雷达,每个水平90度的视野和垂直视场的40度。激光雷达使用的模拟lidarPointCloudGenerator(自动驾驶工具箱)系统对象。每个激光雷达有32海拔渠道和方位分辨率为0.16度。在这种配置中,每个激光雷达传感器输出约18000分扫描。每个传感器的配置。

%的可重复的结果rng (2020);%创建场景[场景,egoVehicle,激光雷达)= helperCreateMultiLidarDrivingScenario;

场景和不同的激光雷达可以可视化的数据下面的动画。为简便起见,让这个例子更容易想象,激光雷达配置为不返回点云从地面通过指定HasRoadsInputPort财产。当使用真实的数据或者从道路使用模拟数据,返回从地面和其他环境使用点云预处理必须清除。有关更多信息,请参考使用激光雷达地面飞机和障碍物检测(自动驾驶工具箱)的例子。

建立了基于网格的追踪

你定义一个基于网格的跟踪器使用trackerGridRFS跟踪动态场景中的对象。定义跟踪器的第一步是设置传感器配置trackingSensorConfiguration对象。传感器配置允许您指定每个传感器的安装跟踪坐标系。传感器配置还允许您指定检测极限——的视野和最大范围的每个传感器。在本例中,您使用模拟激光雷达传感器的属性来定义这些属性。

效用函数helperGetLidarConfig使用模拟激光雷达传感器模型并返回各自的配置。在这个例子中,目标跟踪在全球或世界坐标系统通过模拟车辆的姿势。这些信息通常是通过一个惯性导航系统获得的。作为场景中的传感器移动系统,它们的配置必须更新每一次通过指定的配置作为一个跟踪器的输入。

%存储配置的传感器sensorConfigs =细胞(元素个数(激光雷达),1);%填写传感器配置i = 1:元素个数(sensorConfigs) sensorConfigs{我}= helperGetLidarConfig(激光雷达{我},egoVehicle);结束%创建追踪。您可以定义属性使用跟踪器之前。追踪= trackerGridRFS (“SensorConfigurations”sensorConfigs,“HasSensorConfigurationsInput”,真正的);

跟踪器使用一个二维网格环境的中间表示。3定义的网格属性:它的长度,宽度,和分辨率。长度和宽度描述张成的空间网格当地X和Y方向上分别自我的工具。该决议定义网格的细胞的数量每米。在本例中,您使用120 m×120 m网格和2细胞每米。

跟踪器。GridLength = 120;%米跟踪器。GridWidth = 120;%米跟踪器。GridResolution = 2;% 1 /米

除了定义网格,你也定义自我车辆的相对位置通过指定网格的起源(左角)对自我的起源。在这个例子中,自我车辆位于网格的中心。

跟踪器。GridOriginInLocal =[追踪。GridLength / 2 -tracker.GridWidth / 2];

跟踪器使用particle-based方法来估计每个网格单元的状态和进一步分类动态或静态。它使用一个固定数量的持续粒子网格上定义现有的分销目标。它还使用固定数量的粒子样本分布对于新生儿的目标。这些出生粒子在不同采样网格细胞基于出生的概率。此外,速度和其他未知的转弯速度和加速度(适用时MotionModel跟踪器的不是常速)的颗粒均匀采样之前使用之前提供信息使用的限制。重采样步骤确保网格上的粒子数保持不变。

跟踪器。NumParticles = 1 e5;%的持久的粒子跟踪器。NumBirthParticles = 2 e4;%的出生数量的粒子跟踪器。VelocityLimits = (-15 15, -15 15);%样本出生粒子的速度(米/秒)跟踪器。BirthProbability = 0.025;%的概率出生在每个网格单元跟踪器。ProcessNoise = 5*eye(2);%过程噪声预测的粒子(ax, ay)的方差(m / s ^ 2)

跟踪器使用Dempster-Shafer方法来定义每个单元的入住率。网格的动态估计的信念入住率和自由州的网格质量。在预测过程中,占用网格单元的质量信念更新由于粒子分布的预测。的死亡率控制生存的概率( P 年代 )的粒子在衰变入住率信仰的质量和结果的预测。自由信念质量是不与粒子,自由信仰使用预先确定质量衰变,恒定的贴现因子。这个折扣因素指定的概率预测期间自由地区保持自由。

跟踪器。死亡率= 1 e - 3;%单位时间。将Ps = 0.9999 10赫兹跟踪器。FreeSpaceDiscountFactor = 1飞行;%单位时间。翻译的折现系数0.63(1依照^ dT) 10赫兹

估计每个网格单元的状态后,追踪分类每个网格单元静态或动态通过使用它的估计速度和相关的不确定性。此外,跟踪器使用动态细胞提取对象级假设使用以下技术:

每个动态网格单元与现有的跟踪是转让。动态网格单元分配给最近的追踪如果网格单元之间的负对数似和跟踪降到阈值赋值。动态网格单元在分配阈值被认为是未赋值的。跟踪器使用未赋值的网格细胞每一步启动新的轨道。因为多个未赋值的网格细胞可以属于同一个对象跟踪,DBSCAN聚类算法用于帮助在这一步。因为存在假阳性而分类细胞作为静态或动态,跟踪器过滤那些假警报在两个方面。首先,只有未赋值的细胞形成集群超过指定数量的点(MinNumPointsPerCluster),可以创建新的曲目。第二,每个跟踪初始化一个试探性的跟踪,只是确认如果它检测到M N次。

跟踪器。AssignmentThreshold = 8;%之间的最大距离或负对数似细胞和跟踪跟踪器。MinNumCellsPerCluster = 6;%最小数量的网格细胞每个集群创建新的轨道跟踪器。ClusteringThreshold = 1;%最低两个细胞之间的欧几里得距离聚类跟踪器。ConfirmationThreshold = [3 - 4];%阈值确认追踪跟踪器。DeletionThreshold = 4 [4];%阈值删除跟踪确认

你也可以通过执行动态地图估计在GPU加速仿真通过指定UseGPU跟踪器的属性。

跟踪器。UseGPU= false;

可视化

对于这个示例使用的可视化是使用一个辅助类,定义helperGridTrackingDisplay,附加的例子。可视化包含三个部分。

  • 地面实况-前视图:这个面板显示地面实况的前视图使用自我车辆追逐情节。强调动态演员在现场,以灰色显示的静态对象。

  • 激光雷达的观点:这些面板显示每个传感器的点云的回报。

  • 基于网格的追踪:这个面板显示了基于网格追踪输出。跟踪显示为框,每个注释他们的身份。轨道动态网格地图上覆盖。定义动态网格细胞的颜色根据色轮,代表场景坐标系运动的方向。静态网格细胞使用灰度表示根据他们的入住率。灰色表示的程度的概率占用的空间网格单元是免费的。跟踪的位置所示自我车辆坐标系,而速度矢量对应的速度跟踪场景框架。

显示= helperGridTrackingDisplay;

运行情况和跟踪动态对象

接下来,运行场景,模拟激光雷达传感器数据从每个激光雷达传感器,使用基于网格的追踪和处理数据。

%初始化pointCloud从每个传感器输出ptClouds =细胞(元素个数(激光雷达),1);sensorConfigs =细胞(元素个数(激光雷达),1);推进(场景)%当前仿真时间时间= scenario.SimulationTime;%的对象构成对自我tgtPoses = targetPoses (egoVehicle);%从每个传感器模拟点云i = 1:元素个数(激光雷达)[ptClouds {}, isValidTime] =步骤(激光雷达{我}、tgtPoses、时间);sensorConfigs{我}= helperGetLidarConfig(激光雷达{},egoVehicle);结束%包点云传感器追踪所需的数据格式sensorData = packAsSensorData (ptClouds、sensorConfigs、时间);%的追踪跟踪=追踪(sensorData、sensorConfigs、时间);%更新显示显示器(场景、egoVehicle激光雷达,ptClouds,追踪,追踪);drawnow;结束

结果

接下来,分析跟踪器的性能使用这个示例中使用的可视化。

基于网格的跟踪器使用动态估计网格地图细胞提取对象的痕迹。下面的动画显示了追踪的结果在这种情况下。“基于网格的追踪器”面板显示了估计的动态地图以及估计的跟踪对象。它还展示了自我的配置传感器安装在车辆蓝色圆形行业。注意到该地区,估计这些传感器封装“灰色”动态地图,代表这个地区没有观察到任何的传感器。这个补丁也作为ego-vehicle动态网格上的立场。

注意跟踪是只从动态网格中提取细胞,因此追踪能够过滤掉静态对象。还要注意,车辆进入后网格区域,其跟踪机构需要一些时间步骤。这是由于两个主要原因。首先,有一个建立延迟分类单元的动态。第二,确认阈值的对象需要一些步骤来建立一个跟踪作为确认对象。

接下来,你看看一些跟踪的历史了解的状态跟踪得到估计的动态网格的影响。

纵向移动的轨迹

下面的快照显示跟踪的历史用T1。T1跟踪代表经过自我的黄色汽车车辆在左边第一个几秒钟的仿真。注意网格细胞被这种跟踪以红色标注,表明他们在积极的X方向运动。跟踪获得跟踪的速度和航向信息使用分配网格细胞的速度分布。它还获得它的长度,宽度,和方向使用分配网格细胞的空间分布。默认的TrackUpdateFcntrackerGridRFS提取新的长度,宽度,和方向信息的空间分布相关的网格细胞每一步。这种效果可以看到在下面的快照中,长度和宽度的跟踪调整根据相关的网格细胞的边界框。可以添加一个额外的过滤方案使用预测长度,宽度,和方向的跟踪通过使用一个定制的TrackUpdateFcn

%显示快照TrackID = 1。还显示密切跟踪T3和T4%代表汽车和卡车在相反的方向移动。showSnapshots (display.GridView, 1);

图包含9轴对象。坐标轴对象1标题TrackID = 1时间= 1包含一个类型的对象的形象。坐标轴对象2标题TrackID时间= 1 = 1.5包含一个类型的对象的形象。坐标轴对象3标题TrackID = 1时间= 2包含一个类型的对象的形象。坐标轴对象4标题TrackID时间= 1 = 2.5包含一个类型的对象的形象。坐标轴对象与标题TrackID 5 = 3 = 1时间包含一个类型的对象的形象。坐标轴对象与标题TrackID 6 = 1 = 3.5包含一个类型的对象的形象。坐标轴对象与标题TrackID 7 = 1时间= 4包含一个图像类型的对象。坐标轴对象8与标题TrackID时间= 1 = 4.5包含一个类型的对象的形象。与标题TrackID坐标轴对象9 = 1 = 5包含一个类型的对象的形象。

showSnapshots (display.GridView 4);

图包含9轴对象。坐标轴对象1标题TrackID = 4时间= 3包含一个类型的对象的形象。坐标轴对象2标题TrackID = 4 = 3.5包含一个类型的对象的形象。坐标轴对象3标题TrackID = 4时间= 4包含一个图像类型的对象。轴与标题TrackID对象4 = 4 = 4.5包含一个类型的对象的形象。坐标轴对象随着时间标题TrackID = 4 = 5包含一个类型的对象的形象。6轴对象随着时间标题TrackID = 4 = 5.5包含一个类型的对象的形象。坐标轴对象7标题TrackID = 4时间= 6包含一个类型的对象的形象。坐标轴对象8与标题TrackID = 4 = 6.5包含一个类型的对象的形象。坐标轴对象9随着时间标题TrackID = 4 = 7包含一个类型的对象的形象。

接下来,仔细看看T4的历史。T4跟踪代表自我的卡车朝相反的方向。注意网格细胞代表这种跟踪的颜色为蓝色,代表估计网格单元的运动方向。也注意到,有网格细胞跟踪更进一步的追踪为静态(白色)。这些网格细胞分类错误经常发生当对象的传感器报告以前闭塞的地区,因为追踪一个建立延迟对这些细胞进行分类属性。

注意在时间= 4,当卡车和汽车接近对方,网格细胞保持各自的颜色,代表他们的估计速度方向之间的巨大差异。这也导致正确的数据网格细胞之间的联系,并预测追踪的T1和T4,这有助于解决其作为独立的跟踪对象。

横向移动的轨迹

以下代表跟踪用T7快照。这个跟踪表示车辆在横向方向上移动,当自我车辆停在十字路口。注意,这个轨道的网状细胞在紫色的颜色,代表- Y方向运动的方向。类似于其他跟踪,跟踪维护它的长度和宽度的空间分布分配网格细胞。

showSnapshots (display.GridView 7);

图包含9轴对象。坐标轴对象1标题TrackID = 7时间= 10包含一个类型的对象的形象。坐标轴对象2标题TrackID = 7时间= 10.5包含一个类型的对象的形象。坐标轴对象3标题TrackID = 7时间= 11包含一个类型的对象的形象。时间轴与标题TrackID对象4 = 7 = 11.5包含一个类型的对象的形象。坐标轴对象与标题TrackID 5 = 7时间= 12包含一个类型的对象的形象。6轴对象标题TrackID = 7时间= 12.5包含一个类型的对象的形象。坐标轴对象7标题TrackID = 7时间= 13包含一个类型的对象的形象。坐标轴对象8标题TrackID = 7时间= 13.5包含一个类型的对象的形象。坐标轴对象9与标题TrackID = 7时间= 14包含一个类型的对象的形象。

跟踪改变方向

在本例中,您使用了“常速”模型跟踪。这个运动模型假定的目标在一个恒定的速度移动,这意味着恒定的速度和方向。然而,在城市场景,这个假设通常是不准确的。为了弥补未知物体的加速度,噪音上指定的跟踪过程。下面的快照显示跟踪T2的历史。这个跟踪代表自我的车辆正前方。注意,在地面真理,这车在十字路口右转。

showSnapshots(显示。显示数据表格,2);

图包含9轴对象。坐标轴对象1标题TrackID = 2时间= 6包含一个类型的对象的形象。坐标轴对象2标题TrackID = 2次= 6.5包含一个类型的对象的形象。坐标轴对象3标题TrackID = 2次= 7包含一个类型的对象的形象。坐标轴对象4标题TrackID = 2次= 7.5包含一个类型的对象的形象。坐标轴对象与标题TrackID 5 = 2次= 8包含一个类型的对象的形象。坐标轴对象与标题TrackID 6 = 2次= 8.5包含一个类型的对象的形象。坐标轴对象7标题TrackID = 2次= 9包含一个类型的对象的形象。坐标轴对象8与标题TrackID = 2次= 9.5包含一个类型的对象的形象。坐标轴对象9与标题TrackID = 2次= 10包含一个类型的对象的形象。

注意网格细胞与此相关跟踪的颜色从红色变为紫色。同时,颜色的过渡导致一些更进一步的细胞,从而导致贫穷的估计的长度和宽度。追踪的能力保持跟踪车辆由于耦合效应的三个主要原因。首先,追踪允许指定一个赋值阈值。即使预测跟踪不结合动态网格细胞,它可以与某个阈值。其次,创建一个新的跟踪从网格细胞保持在阈值标准需要满足最小数量的细胞。第三,跟踪器删除阈值,允许将轨道滑行几步之后才删除。如果网格细胞的分类很差时,轨道能存活几个步骤,可以re-associated网格细胞。注意,更进一步的网格细胞更可观测的跟踪显示,历史上,如下所示。T8跟踪代表积极的淡蓝色的汽车旅行Y方向在十字路口右转。 This vehicle was partially occluded before the turn and had another closely traveling vehicle while making the turn.

showSnapshots (display.GridView 8);

图包含9轴对象。坐标轴对象1标题TrackID = 8时间= 8包含一个类型的对象的形象。坐标轴对象2标题TrackID = 8时间= 8.5包含一个类型的对象的形象。坐标轴对象3标题TrackID = 8时间= 9包含一个类型的对象的形象。时间轴对象4标题TrackID = 8 = 9.5包含一个类型的对象的形象。5轴对象标题TrackID = 8时间= 10包含一个类型的对象的形象。6轴对象标题TrackID = 8时间= 10.5包含一个类型的对象的形象。坐标轴对象7标题TrackID = 8时间= 11包含一个类型的对象的形象。坐标轴对象8与标题TrackID = 8时间= 11.5包含一个类型的对象的形象。坐标轴对象9与标题TrackID = 8时间= 12包含一个类型的对象的形象。

总结

在这个例子中,您学习了基本的基于网格的追踪,以及它如何可以用来跟踪动态对象在一个复杂的城市驾驶环境。您还了解了如何使用点云配置跟踪器跟踪一个物体从多个激光雷达传感器。

万博1manbetx支持功能

函数sensorData = packAsSensorData (ptCloud、配置、时间)%激光雷达仿真输出为pointCloud对象返回。的位置%属性用于提取点云的x, y, z的位置%的回报和包结构所需的信息跟踪。sensorData =结构(“SensorIndex”{},“时间”{},“测量”{},“MeasurementParameters”,{});i = 1:元素个数(ptCloud)%这个传感器的云thisPtCloud = ptCloud {};%没有迫使一个允许之间的映射数据和配置%命令输入和要求配置静态传感器。sensorData(我)。SensorIndex =款{我}.SensorIndex;%当前时间sensorData(我)。时间=时间;%测量作为3-by-N defininng的位置点sensorData(我)。测量=重塑(thisPtCloud.Location [], 3) ';%数据报告在传感器坐标系,因此测量%参数相同传感器变换参数。sensorData(我)。MeasurementParameters =款{我}.SensorTransformParameters;结束结束函数自我配置= helperGetLidarConfig(激光雷达)%定义转换从传感器到自我senToEgo =结构(“帧”fusionCoordinateFrameType (1)“OriginPosition”,(lidar.SensorLocation (:); lidar.Height],“定位”rotmat(四元数([激光雷达。偏航激光雷达。Pitch lidar.Roll],“eulerd”,“ZYX股票”,“帧”),“帧”),“IsParentToChild”,真正的);%定义转换从自我到跟踪坐标egoToScenario =结构(“帧”fusionCoordinateFrameType (1)“OriginPosition”ego.Position (:)“定位”rotmat(四元数([自我。偏航自我。Pitch ego.Roll],“eulerd”,“ZYX股票”,“帧”),“帧”),“IsParentToChild”,真正的);%使用trackingSensorConfiguration组装。配置= trackingSensorConfiguration (“SensorIndex”lidar.SensorIndex,“IsValidTime”,真的,“SensorLimits”(lidar.AzimuthLimits; 0 lidar.MaxRange),“SensorTransformParameters”(senToEgo; egoToScenario),“DetectionProbability”,0.95);结束

引用

[1]的主犯、含蓄等。“随机有限集的方法对动态占用网格地图的实时应用程序。”的International Journal of Robotics Research 37.8 (2018): 841-866.

[2]),Sascha Georg Tanzmeister, Dirk Wollherr。“基于证据的对象跟踪动态占用网格在城市环境中。”2017 IEEE Intelligent Vehicles Symposium (IV). IEEE, 2017.