objectDetection ФорматЭти примеры показывают, как преобразовать фактические обнаружения в собственном формате датчика в objectDetection объекты. objectDetection является стандартным форматом ввода для большинства фильтров и трекеров на панели инструментов Sensor Fusion and Tracking. Пять примеров постепенно показывают, как настроить objectDetection с различными сценариями отслеживания.
Пример 1 конфигурирует обнаружение в неподвижной прямоугольной рамке.
Пример 2 конфигурирует обнаружение в движущейся прямоугольной рамке.
Пример 3 конфигурирует обнаружение в движущейся сферической рамке.
Пример 4 показывает, как экспрессировать детекции, полученные последовательными вращениями.
В примере 5 показано, как настроить обнаружение 3-D.
Один objectDetection отчет должен содержать основную информацию об обнаружении: Time и Measurement. Он также может содержать другие ключевые свойства, включая MeasurementNoise, SensorIndex, ObjectClassID, ObjectAttributes, и MeasurementParameters. Настройка MeasurementParameters правильно, чтобы фильтр или трекер могли интерпретировать измерение, имеет решающее значение при создании objectDetection. В первом примере показана базовая настройка objectDetection. Остальные примеры посвящены правильной настройке MeasurementParameters.
Рассмотрим сценарий отслеживания 2-D со стационарной башней и грузовиком. Башня, расположенная у истока сценарного каркаса, оснащена радиолокационным датчиком. При t = 0 секунд грузовик в положении (10,20,0) метров движется в положительном направлении X со скоростью 5 м/с.

Радиолокационный датчик выводит 3-D результаты измерений положения и скорости в кадре сценария, поэтому результаты измерений можно записать следующим образом:
measurement1 = [10;20;0;5;0;0]; % [x;y;z;vx;vy;vz]Можно указать дополнительные свойства, такие как MeasurmentNoise, SensorIndex, ObjectClassID, и ObjectAttributes для objectDetection объект. Например, если стандартное отклонение шума измерения положения и скорости равно 10 м и 1 м/с соответственно, можно определить ковариационную матрицу погрешности измерения как:
measurementNoise1 = diag([10*ones(3,1);ones(3,1)]);
Создание objectDetection используя эти значения.
time1 = 0; % detection time detect1 = objectDetection(time1,measurement1,'MeasurementNoise',measurementNoise1)
detect1 =
objectDetection with properties:
Time: 0
Measurement: [6x1 double]
MeasurementNoise: [6x6 double]
SensorIndex: 1
ObjectClassID: 0
MeasurementParameters: {}
ObjectAttributes: {}
Рассмотрим сценарий отслеживания 2-D с эго-автомобилем и грузовиком. При = 0 секунд автомобиль располагается на (20,10,0) метрах относительно рамы сценария. Автомобиль движется со скоростью 5 м/с в направлении Y сценарной рамы. Локальный (передний) кадр эго-автомобиля {, y} поворачивается от кадра сценария на угол 90 градусов. Как и в предыдущем примере, грузовик в положении (10,20,0) метров движется в положительном направлении X со скоростью 5 м/с.

Тем временем эго-автомобиль наблюдает за грузовиком в собственной локальной рамке, {, y}. На практике измерение можно получить непосредственно из сенсорной системы эго-автомобиля. На рисунке измерения грузовика [10; 10; 0 -5; -5; 0] относительно кадра {x, y} в порядке [x;y;z;vx;vy;vz].
measurement2 = [10; 10; 0; -5; -5; 0]; % [x;y;z;vx;vy;vz]Чтобы задать обнаружение объекта, необходимо указать преобразование координат из прямоугольного кадра сценария {, Y} в локальный прямоугольный кадр xy}. Вы можете использовать MeasurementParameters имущество objectDetection для задания этих параметров преобразования. В преобразовании кадр сценария является родительским кадром, а локальный кадр ego car - дочерним кадром.
Frame свойство устанавливает тип нижестоящего кадра в 'rectangular'(в этом примере) илиspherical'.
OriginPosition свойство задает положение начала дочернего фрейма относительно родительского фрейма.
OriginVelocity свойство задает скорость начала дочернего кадра по отношению к родительскому кадру.
MP2 = struct();
MP2.Frame = 'rectangular';
MP2.OriginPosition =[20; 10; 0];
MP2.OriginVelocity = [0; 5; 0]; Задайте поворот с помощью матрицы поворота, преобразованной из углов Эйлера. Набор IsParentToChild true, чтобы указать поворот от родительского кадра к дочернему кадру.
rotAngle2 = [90 0 0]; % [yaw,pitch,row] rotQuat2 = quaternion(rotAngle2,'Eulerd','ZYX','frame'); rotMatrix2 = rotmat(rotQuat2,'frame'); MP2.Orientation = rotMatrix2; MP2.IsParentToChild = true;
Укажите измерения.
Набор HasElevation и HasAzimuth оба для false, так как дочерняя рамка является прямоугольной.
Набор HasRange кому true для включения измерения положения.
Набор HasVelocity кому true обеспечение возможности измерения скорости.
MP2.HasElevation = false; MP2.HasAzimuth = false; MP2.HasRange = true; MP2.HasVelocity = true;
Создать objectDetection и укажите MeasurementParameters собственность.
time2 = 0;
detection2 = objectDetection(time2,measurement2,'MeasurementParameters',MP2)detection2 =
objectDetection with properties:
Time: 0
Measurement: [6x1 double]
MeasurementNoise: [6x6 double]
SensorIndex: 1
ObjectClassID: 0
MeasurementParameters: [1x1 struct]
ObjectAttributes: {}
Для проверки обнаружения объектов можно использовать cvmeas функция измерения для регенерации измерения. cvmeas функция может принимать в качестве входных данных фактическое состояние цели и параметры измерения. Ввод состояния cvmeas находится в порядке [x;vx;y;vy;z;vz]. Как показано в следующих выходных данных, результаты согласуются с measurement2.
state2 =[10;5;20;0;0;0]; % [x;vx;y;vy;z;vz] cvmeas2 = cvmeas(state2,MP2)% [x;y;z;vx;vy;vz]
cvmeas2 = 6×1
10.0000
10.0000
0
-5.0000
-5.0000
0
Рассмотрим предыдущий сценарий слежения, только теперь измерение получается сканирующим радаром со сферическим выходным кадром. Направление визирования РЛС совпадает с направлением Y (то же, что и направление x) при = 0 секунд.

Поскольку относительная скорость между грузовиком и автомобилем находится в направлении прямой видимости, измерение осуществляется в порядке [азимут; отметка; диапазон; range-rate], можно получить следующим образом:
measurement3 =[45; 0; 10/sind(45); -5/sind(45)]; % [az;el;rng;rr]. Units in degrees.Задайте параметры измерения.
MP3 = struct(); MP3.Frame = 'spherical'; % The child frame is spherical. MP3.OriginPosition = [20; 10; 0]; MP3.OriginVelocity = [0; 5; 0]; % Specify rotation. rotAngle3 = [90 0 0]; rotQuat3 = quaternion(rotAngle3,'Eulerd','ZYX','frame'); rotMatrix3 = rotmat(rotQuat3,'frame'); MP3.Orientation = rotMatrix3; MP3.IsParentToChild = true;
Набор HasElevation и HasAzimuth кому true для вывода углов азимута и места в сферической дочерней раме. Набор HasRange и HasVelocity оба для true для вывода диапазона и скорости диапазона соответственно.
MP3.HasElevation = true; MP3.HasAzimuth = true; MP3.HasRange = true; MP3.HasVelocity = true;
Создать objectDetection объект.
time3 = 0;
detection3 = objectDetection(time3,measurement3,'MeasurementParameters',MP3)detection3 =
objectDetection with properties:
Time: 0
Measurement: [4x1 double]
MeasurementNoise: [4x4 double]
SensorIndex: 1
ObjectClassID: 0
MeasurementParameters: [1x1 struct]
ObjectAttributes: {}
Проверка результатов с помощью cvmeas. Результаты согласуются с measurement3.
state3 = [10;5;20;0;0;0]; % [x;vx;y;vy;z;vz] cvmeas3 = cvmeas(state3,MP3) % [az;el;rng;rr]
cvmeas3 = 4×1
45.0000
0
14.1421
-7.0711
Рассмотрим предыдущий сценарий слежения, только теперь направление визирования РЛС поворачивается на 45 градусов от направления x локальной рамы автомобиля.

Новыми измерениями, выраженными в новом сферическом кадре {′y ′}, являются:
measurement4 = [0; 0; 10/sind(45); -5/sind(45)]; % [az;el;rng;rr]Для параметров измерения можно задать поворот в виде поворота на 135 градусов от кадра сценария к новому сферическому кадру. В качестве альтернативы можно задать два последовательных поворота: прямоугольный {, Y} на прямоугольный xy} и прямоугольный {, y} на {′, y ′}. Для иллюстрации функции преобразования нескольких кадров, поддерживаемой MeasurementParameters свойство, в этом примере используется последний подход.
Первый набор параметров измерения точно такой же, как MP2 используется в примере 2. MP2 учитывается поворот от прямоугольной {, Y} к прямоугольной xy}. Для второго набора параметров измерений,MP4необходимо указать только поворот на 45 градусов от прямоугольной {, y} к сферической y ′}.
MP4 = struct(); MP4.Frame = 'spherical'; MP4.OriginPosition =[0; 0; 0]; % Colocated positions. MP4.OriginVelocity = [0; 0; 0]; % Same origin velocities. % Specify rotation. rotAngle4 = [45 0 0]; rotQuat4 = quaternion(rotAngle4,'Eulerd','ZYX','frame'); rotMatrix4 = rotmat(rotQuat4,'frame'); MP4.Orientation = rotMatrix4; MP4.IsParentToChild = true; % Specify outputs in the spherical child frame. MP4.HasElevation = true; MP4.HasAzimuth = true; MP4.HasRange = true; MP4.HasVelocity = true;
Создание комбинированного MeasurementParameters вход, MPc.
MPc =[MP4 MP2];
Создать objectDetection объект.
time4 = 0;
detection4 = objectDetection(time4,measurement4,'MeasurementParameters',MPc)detection4 =
objectDetection with properties:
Time: 0
Measurement: [4x1 double]
MeasurementNoise: [4x4 double]
SensorIndex: 1
ObjectClassID: 0
MeasurementParameters: [1x2 struct]
ObjectAttributes: {}
Проверка результатов с помощью cvmeas. Результат согласуется с measurement4.
state4 = [10;5;20;0;0;0]; % [x;vx;y;vy;z;vz] cvmeas4 = cvmeas(state4,MPc) % [az;el;rr;rrate]
cvmeas4 = 4×1
0.0000
0
14.1421
-7.0711
Рассмотрим беспилотный летательный аппарат (БПЛА), контролирующий регион. При = 0 секунд БПЛА находится в положении (5,5, -1) км относительно глобального кадра северо-восточнее вниз (NED). Скорость БПЛА составляет (-50, -100,5) м/с. Ориентация корпуса БПЛА {, y, z} относительно глобального кадра NED задается как (-120,2,2) градусов по рысканию, тангажу и крену. При этом автомобиль на позиции (1,1,0) км движется на восток со скоростью 30 м/с. БПЛА измеряет автомобиль с помощью радиолокационной системы, выровненной с собственной осью кузова.

На основе этой информации задайте кинематические параметры для преобразования измерений.
Укажите тип кадра, исходное положение и начальную скорость корпуса БПЛА.
MP5 = struct();
MP5.Frame = 'spherical';
MP5.OriginPosition = [5000; 5000; -1000];
MP5.OriginVelocity = [-50; -100; 5]; Укажите поворот от кадра NED к корпусу БПЛА.
Rot_angle5 = [-120 2 2]; % [yaw,pitch,roll] Rot_quat5 = quaternion(Rot_angle5,'Eulerd','ZYX','frame'); Rot_matrix5 = rotmat(Rot_quat5,'frame'); MP5.Orientation = Rot_matrix5; MP5.IsParentToChild = true;
Задайте выходные измерения в сферической рамке.
MP5.HasElevation = true; MP5.HasAzimuth = true; MP5.HasRange = true; MP5.HasVelocity = true;
Получить замер можно непосредственно из радиолокационной системы на БПЛА. Используйте cvmeas функция - получение измерения. Измерение выполняется в порядке [азимут; отметка; дальность; дальность].
car_state5 = [1000;0;1000;30;0;0]; % [x;vx;y;vy;z;vz].
measurement5 = cvmeas(car_state5,MP5);
meas_az5 = measurement5(1)meas_az5 = -14.6825
meas_el5 = measurement5(2)
meas_el5 = 12.4704
meas_rng5 = measurement5(3)
meas_rng5 = 5.7446e+03
meas_rr5 = measurement5(4)
meas_rr5 = -126.2063
Угол места определяется как угол от плоскости xy до направления z. Именно поэтому угол возвышения положителен для цели на земле относительно БПЛА. Это соглашение используется во всей панели инструментов.
Измеренный шум для азимута, отметки, дальности и дальности составляет [1,1,20,2] соответственно. Кроме того, индекс радара равен 2, и радар может классифицировать обнаруженный объект как 1 для типа 'car'.
index5 = 2; covariance5 = diag([1;1;20;2]); classID5 = 1;
Создание objectDetection объект для обнаружения.
time5 = 0; detection = objectDetection(time5,measurement5,'SensorIndex',index5,... 'MeasurementNoise',covariance5,'ObjectClassID',classID5,'MeasurementParameters',MP5)
detection =
objectDetection with properties:
Time: 0
Measurement: [4x1 double]
MeasurementNoise: [4x4 double]
SensorIndex: 2
ObjectClassID: 1
MeasurementParameters: [1x1 struct]
ObjectAttributes: {}