triangulateLOS

Triangulate multiple line-of-sight detections

Syntax

estPos = triangulateLOS(detections)
[estPos,estCov] = triangulateLOS(detections)

Description

example

estPos = triangulateLOS(detections) estimates the position of a target in a global Cartesian coordinate frame by triangulating a set of angle-only detections. Angle-only detections are also known as line-of-sight (LOS) detections. For more details, see Algorithms.

[estPos,estCov] = triangulateLOS(detections) also returns estCov, the covariance of the error in target position. The function uses a Taylor-series approximation to estimate the error covariance.

Examples

collapse all

Load a MAT-file containing a set of line-of-sight detections stored in the variable detectionSet.

load angleOnlyDetectionFusion.mat

Plot the angle-only detections and the sensor positions. Specify a range of 5 km for plotting the direction vector. To specify the position of the origin, use the second measurement parameter because the sensor is located at the center of the platform. Convert the azimuth and elevation readings to Cartesian coordinates.

rPlot = 5000;

for i = 1:numel(detectionSet)
    originPos = detectionSet{i}.MeasurementParameters(2).OriginPosition;

    az = detectionSet{i}.Measurement(1);
    el = detectionSet{i}.Measurement(2);
    [xt,yt,zt] = sph2cart(deg2rad(az),deg2rad(el),rPlot);
        
    positionData(:,i) = originPos;
    plotData(:,3*i+(-2:0)) = [xt yt zt]'.*[1 0 NaN]+originPos;
end

plot3(positionData(1,:),positionData(2,:),positionData(3,:),'*')
hold on
plot3(plotData(1,:),plotData(2,:),plotData(3,:))

Triangulate the detections by using triangulateLOS. Plot the triangulated position.

[estPos,estCov] = triangulateLOS(detectionSet);

plot3(estPos(1),estPos(2),estPos(3),'pk','MarkerFaceColor','k')
hold off

legend('Sensor Positions','Angle-Only Detections','Triangulated Position', ...
    'location','southeast')
xlabel('x [m]')
ylabel('y [m]')
view(2)

Input Arguments

collapse all

Line-of-sight measurements, specified as a cell array of objectDetection objects. Each object has the properties listed in the table.

PropertyDefinition
TimeMeasurement time
MeasurementObject measurements
MeasurementNoiseMeasurement noise covariance matrix
SensorIndexUnique ID of the sensor
ObjectClassIDObject classification
MeasurementParametersParameters used by initialization functions of nonlinear Kalman tracking filters
ObjectAttributesAdditional information passed to tracker

Each detection must specify the MeasurementParameters property as a structure with the fields described in the table.

ParameterDefinition
Frame

Frame used to report measurements. Specify Frame as 'spherical' for the first structure.

OriginPosition

Position offset of the origin of the frame relative to the parent frame, represented as a 3-by-1 real vector.

OriginVelocity

Velocity offset of the origin of the frame relative to the parent frame, represented as a 3-by-1 real vector.

Orientation

A 3-by-3 real-valued orthonormal frame orientation matrix.

IsParentToChild

A logical scalar that indicates if Orientation is given as a frame rotation from the parent coordinate frame to the child coordinate frame. If false, then Orientation is given as a frame rotation from the child coordinate frame to the parent coordinate frame.

HasElevation

A logical scalar that indicates if elevation is included in the measurements. This parameter is true by default.

HasAzimuthA logical scalar that indicates if azimuth is included in the measurements. This parameter is true by default. If specified as a field, it must be set to true.
HasRangeA logical scalar that indicates if range is included in the measurements. This parameter must be specified as a field and set to false.
HasVelocity

A logical scalar that indicates if velocity is included in the measurements. This parameter is false by default. If specified as a field, it must be set to false.

The function provides default values for fields left unspecified.

Output Arguments

collapse all

Estimated position of the target, returned as a 3-by-1 vector.

Estimated error covariance of the target position, returned as a 3-by-3 matrix.

Algorithms

Multiple angle-only or line-of-sight measurements result in lines in space. These lines might or might not intersect because of measurement noise. triangulateLOS uses a suboptimal linear least-squares method to minimize the distance of miss between multiple detections. The formulation makes these assumptions:

  • All detections report measurements with approximately the same accuracy in azimuth and elevation (if measured).

  • The distances from the different sensors to the triangulated target are all of the same order.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

See Also

Classes

System Objects

Introduced in R2018b