objectDetection
ФорматЭти примеры показывают, как преобразовать фактические обнаружения в собственном формате датчика в objectDetection
объекты. objectDetection
стандартный формат ввода для большинства фильтров и средств отслеживания в Fusion Датчика и тулбоксе Отслеживания. Эти пять примеров прогрессивно показывают, как настроить objectDetection
с варьировавшимися сценариями отслеживания.
Пример 1 конфигурирует обнаружение в стационарной прямоугольной системе координат.
Пример 2 конфигурирует обнаружение в движущейся прямоугольной системе координат.
Пример 3 конфигурирует обнаружение в движущейся сферической системе координат.
Пример 4 показывает, как описать обнаружения, полученные последовательными вращениями.
Пример 5 показывает, как сконфигурировать 3-D обнаружения.
objectDetection
отчет должен содержать основную информацию об обнаружении: Time
и Measurement
. Это может также содержать другие ключевые свойства, включая MeasurementNoise
, SensorIndex
, ObjectClassID
, ObjectAttributes
, и MeasurementParameters
. Подготовка MeasurementParameters
правильно так, чтобы фильтр или средство отслеживания могут интерпретировать измерение, крайне важно для создания objectDetection
. Первый пример показывает основную настройку objectDetection
. Остающиеся примеры фокусируются о том, как правильно настроить MeasurementParameters
.
Рассмотрите 2D сценарий отслеживания со стационарной башней и грузовиком. Башня, расположенная в начале координат системы координат сценария, оборудована радарным датчиком. В = 0 секунд, грузовик в положении (10,20,0) метры перемещается в положительном направление со скоростью 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: {}
Рассмотрите 2D сценарий отслеживания с автомобилем эго и грузовиком. В = 0 секунд, автомобиль расположен в (20,10,0) метры относительно системы координат сценария. Автомобиль перемещается со скоростью 5 м/с в направление системы координат сценария. Локальная (прямая) система координат автомобиля эго, {,}, вращается от системы координат сценария углом 90 градусов. Как в предыдущем примере, грузовик в положении (10,20,0) метры перемещается в положительном направление со скоростью 5 м/с.
Между тем автомобиль эго наблюдает грузовик в своей собственной локальной системе координат, {,}. На практике можно получить измерение непосредственно из системы датчика автомобиля эго. От фигуры измерения грузовика [10; 10; 0 - 5;-5; 0] относительно {,} структурируют в порядке [x;y;z;vx;vy;vz
].
measurement2 = [10; 10; 0; -5; -5; 0]; % [x;y;z;vx;vy;vz]
Чтобы задать обнаружение объектов, необходимо задать координатное преобразование из сценария прямоугольная система координат {,} к локальной прямоугольной системе координат {,}. Можно использовать 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
Рассмотрите предыдущий сценарий отслеживания, только теперь измерение получено радаром сканирования со сферической выходной системой координат. Направление опорного направления радара выравнивается с направление (то же самое как направление) в = 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
Рассмотрите предыдущий сценарий отслеживания, только теперь направление опорного направления радара вращает 45 градусов направление локальной системы координат автомобиля.
Новые измерения, описанные в новой сферической системе координат {,}:
measurement4 = [0; 0; 10/sind(45); -5/sind(45)]; % [az;el;rng;rr]
Для параметров измерения можно задать вращение как вращение с 135 степенями от системы координат сценария до новой сферической системы координат. Альтернативно, можно задать его как два последовательных вращения: прямоугольный {,} к прямоугольному {,} и прямоугольный {,} к сферическому {,}. Чтобы проиллюстрировать несколько структурируют функцию преобразования, поддерживавшую MeasurementParameters
свойство, этот пример использует последний подход.
Первый набор параметров измерения является точно тем же самым как MP2
используемый в Примере 2. MP2
счета на вращение от прямоугольного {,} к прямоугольному {,}. Для второго набора параметров измерения, MP4
, необходимо задать только вращение на 45 градусов от прямоугольного {,} к сферическому {,}.
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
Рассмотрите беспилотное воздушное транспортное средство (UAV), контролирующее область. В = 0 секунд, UAV в положении (5,5,-1) км относительно глобального северо-востока вниз (NED) система координат. Скорость UAV (-50,-100,5) m/s. Ориентация системы координат тела UAV {,,} относительно глобальной системы координат 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: {}