前言
本文主要参考MATLAB自动驾驶工具箱的案例《Sensor Fusion Using Synthetic Radar and Vision Data》进行学习,基于雷达和传感器数据实现传感器融合。
本示例首先展示了如何生成场景,仿真传感器检测,使用传感器融合算法跟踪仿真车辆。使用场景生成和仿真而不是传感器录制数据的优点是可以生成稀少的和潜在危险事件,以用于测试车辆的算法。
本示例覆盖生成同步数据的所有流程,使用MATLAB的Driving Scenario Designer APP,具体使用可以参考 Create Driving Scenario Interactively and Generate Synthetic Sensor Data。
生成场景
生成场景包括生成道路网络,定义车辆,行驶路线,并移动车辆。本示例中,通过左侧道路车辆超过自车场景来测试车辆跟踪的传感器融合算法。仿真场景为高速场景,额外车辆也包括前车和后车。
首先我们生成空白的驾驶场景,参考MATLAB drivingScenario
% Define an empty scenario.
scenario = drivingScenario; % Create driving scenario
scenario.SampleTime = 0.01; %Properties includes SampleTime,StopTime,SimulationTime, IsRunning, Actors,Barriers;
添加一个500m长的双车道高速路,道路由一系列3D空间中的车道中心点定义,并在道路右侧添加护栏。参考:road,barrier
% Add road to driving scenario
roadCenters = [0 0; 50 0; 100 0; 250 20; 500 40];
mainRoad = road(scenario, roadCenters, 'lanes',lanespec(2));
barrier(scenario,mainRoad);
创建自车和三辆其他道路车辆,包括:一辆车自左车道超越自车,一辆在自车前方行驶,一辆在自车后方行驶。所有车辆按照车道轨迹点行驶,超车车辆从右侧开始,移动到左侧,超车后返回右侧车道。参考:vehicle,trajectory。
% Create the ego vehicle that travels at 25 m/s along the road. Place the
% vehicle on the right lane by subtracting off half a lane width (1.8 m)
% from the centerline of the road.
egoCar = vehicle(scenario, 'ClassID', 1);
trajectory(egoCar, roadCenters(2:end,:) - [0 1.8], 25); % On right lane
% Add a car in front of the ego vehicle
leadCar = vehicle(scenario, 'ClassID', 1);
trajectory(leadCar, [70 0; roadCenters(3:end,:)] - [0 1.8], 25); % On right lane
% Add a car that travels at 35 m/s along the road and passes the ego vehicle
passingCar = vehicle(scenario, 'ClassID', 1);
waypoints = [0 -1.8; 50 1.8; 100 1.8; 250 21.8; 400 32.2; 500 38.2];
trajectory(passingCar, waypoints, 35);
% Add a car behind the ego vehicle
chaseCar = vehicle(scenario, 'ClassID', 1);
trajectory(chaseCar, [25 0; roadCenters(2:end,:)] - [0 1.8], 25); % On right lane
定义雷达和摄像头传感器
本示例中,自车配置六个雷达和2个摄像头的覆盖车身360°FOV(可视范围)。自车车前和车后配置的是长距离毫米波雷达和摄像头,车侧前后左右各配置一个90°FOV的短距离毫米波雷达。前侧雷达覆盖车辆前向值车辆中部,后侧雷达覆盖车辆中部至车辆后部。参考:drivingRadarDataGenerator
sensors = cell(8,1);
% Front-facing long-range radar sensor at the center of the front bumper of the car.
sensors{
1} = drivingRadarDataGenerator('SensorIndex', 1, 'RangeLimits', [0 174], ...
'MountingLocation', [egoCar.Wheelbase + egoCar.FrontOverhang, 0, 0.2], 'FieldOfView', [20, 5]);
% Rear-facing long-range radar sensor at the center of the rear bumper of the car.
sensors{
2} = drivingRadarDataGenerator('SensorIndex', 2, 'MountingAngles', [180 0 0], ...
'MountingLocation', [-egoCar.RearOverhang, 0, 0.2], 'RangeLimits', [0 30], 'FieldOfView', [20, 5]);
% Rear-left-facing short-range radar sensor at the left rear wheel well of the car.
sensors{
3} = drivingRadarDataGenerator('SensorIndex', 3, 'MountingAngles', [120 0 0], ...
'MountingLocation', [0, egoCar.Width/2, 0.2], 'RangeLimits', [0 30], 'ReferenceRange', 50, ...
'FieldOfView',