Преобразуйте обнаружения в objectDetection Формат

Эти примеры показывают, как преобразовать фактические обнаружения в собственном формате датчика в objectDetection объекты. objectDetection стандартный формат ввода для большинства фильтров и средств отслеживания в Fusion Датчика и тулбоксе Отслеживания. Эти пять примеров прогрессивно показывают, как настроить objectDetection с варьировавшимися сценариями отслеживания.

  • Пример 1 конфигурирует обнаружение в стационарной прямоугольной системе координат.

  • Пример 2 конфигурирует обнаружение в движущейся прямоугольной системе координат.

  • Пример 3 конфигурирует обнаружение в движущейся сферической системе координат.

  • Пример 4 показывает, как описать обнаружения, полученные последовательными вращениями.

  • Пример 5 показывает, как сконфигурировать 3-D обнаружения.

objectDetection отчет должен содержать основную информацию об обнаружении: Time и Measurement. Это может также содержать другие ключевые свойства, включая MeasurementNoise, SensorIndex, ObjectClassID, ObjectAttributes, и MeasurementParameters. Подготовка MeasurementParameters правильно так, чтобы фильтр или средство отслеживания могут интерпретировать измерение, крайне важно для создания objectDetection. Первый пример показывает основную настройку objectDetection. Остающиеся примеры фокусируются о том, как правильно настроить MeasurementParameters.

Пример 1: преобразуйте обнаружения в стационарной прямоугольной системе координат

Рассмотрите 2D сценарий отслеживания со стационарной башней и грузовиком. Башня, расположенная в начале координат системы координат сценария, оборудована радарным датчиком. В 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: преобразуйте обнаружения в перемещении прямоугольной системы координат

Рассмотрите 2D сценарий отслеживания с автомобилем эго и грузовиком. В t= 0 секунд, автомобиль расположен в (20,10,0) метры относительно системы координат сценария. Автомобиль перемещается со скоростью 5 м/с в Y направление системы координат сценария. Локальная (прямая) система координат автомобиля эго, {x,y}, вращается от системы координат сценария углом 90 градусов. Как в предыдущем примере, грузовик в положении (10,20,0) метры перемещается в положительном X направление со скоростью 5 м/с.

Между тем автомобиль эго наблюдает грузовик в своей собственной локальной системе координат, {x,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]

Чтобы задать обнаружение объектов, необходимо задать координатное преобразование из сценария прямоугольная система координат {X,Y} к локальной прямоугольной системе координат {x,y}. Можно использовать MeasurementParameters свойство objectDetection задавать эти параметры преобразования. В преобразовании система координат сценария является родительской системой координат и автомобилем эго, локальная система координат является дочерней системой координат.

  • Frame наборы свойств дочерний тип системы координат к 'rectangular'(в этом примере) или 'spherical'.

  • OriginPosition наборы свойств положение источника дочерней системы координат относительно родительской системы координат.

  • OriginVelocity наборы свойств скорость источника дочерней системы координат относительно родительской системы координат.

MP2 = struct();

MP2.Frame = 'rectangular'; 
MP2.OriginPosition =[20; 10; 0]; 
MP2.OriginVelocity = [0; 5; 0]; 

Задайте вращение с помощью матрицы вращения, преобразованной от Углов Эйлера. Установите IsParentToChild к истине, чтобы указать на вращение от родительской системы координат до дочерней системы координат.

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

Пример 3: преобразуйте обнаружения в перемещении сферической системы координат

Рассмотрите предыдущий сценарий отслеживания, только теперь измерение получено радаром сканирования со сферической выходной системой координат. Направление опорного направления радара выравнивается с Y направление (то же самое как x направление) в t = 0 секунд.

Начиная с относительной скорости между грузовиком и автомобилем находится в направлении угла обзора, измерении, которое находится в порядке [азимут; вертикальное изменение; область значений; уровень области значений], может быть получен можно следующим образом:

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

Пример 4: преобразуйте обнаружения между тремя системами координат

Рассмотрите предыдущий сценарий отслеживания, только теперь направление опорного направления радара вращает 45 градусов x направление локальной системы координат автомобиля.

Новые измерения, описанные в новой сферической системе координат {x,y}:

measurement4 = [0; 0; 10/sind(45); -5/sind(45)]; % [az;el;rng;rr]

Для параметров измерения можно задать вращение как вращение с 135 степенями от системы координат сценария до новой сферической системы координат. Альтернативно, можно задать его как два последовательных вращения: прямоугольный {X,Y} к прямоугольному {x,y} и прямоугольный {x,y} к сферическому {x,y}. Чтобы проиллюстрировать несколько структурируют функцию преобразования, поддерживавшую MeasurementParameters свойство, этот пример использует последний подход.

Первый набор параметров измерения является точно тем же самым как MP2 используемый в Примере 2. MP2 счета на вращение от прямоугольного {X,Y} к прямоугольному {x,y}. Для второго набора параметров измерения, MP4, необходимо задать только вращение на 45 градусов от прямоугольного {x,y} к сферическому {x,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

Пример 5: преобразуйте 3D обнаружения

Рассмотрите беспилотное воздушное транспортное средство (UAV), контролирующее область. В t = 0 секунд, UAV в положении (5,5,-1) км относительно глобального северо-востока вниз (NED) система координат. Скорость UAV (-50,-100,5) m/s. Ориентация системы координат тела UAV {x,y,z} относительно глобальной системы координат NED дан как (-120,2,2) степени в области рыскания, тангажа и крена. В то же время автомобиль в положении (1,1,0) км перемещается на восток со скоростью 30 м/с, UAV измеряет автомобиль с помощью радиолокационной системы, выровненной с ее собственной связанной осью.

На основе этой информации задайте кинематические параметры для преобразования измерения.

Задайте тип системы координат, положение источника и скорость источника системы координат тела UAV.

MP5 = struct();

MP5.Frame = 'spherical'; 
MP5.OriginPosition = [5000; 5000; -1000]; 
MP5.OriginVelocity = [-50; -100; 5]; 

Задайте вращение от системы координат NED до системы координат тела UAV.

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;

Можно получить измерение непосредственно из радиолокационной системы на UAV. Используйте 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 направления. Именно поэтому угол возвышения положителен для цели относительно земли относительно UAV. Это соглашение используется в тулбоксе.

Шум измерения для азимута, вертикального изменения, области значений и уровня области значений [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: {}