Interface GroupLocInfo
- All Known Implementing Classes:
TMGroupLocInfo
Often multiple detections are required for localisation to be possible e.g. target motion localisation. Before localisation is attempted multiple calculations need to be performed, e.g. converting all positions of the hydrophone array to x y z, calculating array rotation, creating a list of time delays.
There are three main pieces of information supplied by GroupLocInfo. More maybe added in the future.
Hydrophone/Reciever Positions Hydrophones can be in a latitude and longitude and Cartesian co-ordinate frame depending on the localisation algorithm. GroupLocInfo allows easy conversation between these two systems for geo-referencing results. GroupLocInfo must have reciever positions implemented
Time Delays (Optional) Time delays are often the raw measurement used in localisation. A list of time delays for every detection is supplied using the indexM1 and indexM2 convention in AbstractLocalisation . Time delays can be used along with hydrophone positions to calculate locations. Time delays are considered a more 'raw' measurement than bearings and thus are not sorted for ambiguity etc.
Bearings (Optional) Bearings can be considered a step up from time delays. Now dealing with a data which has already been partially localised. To achieve maximum flexibility vectors can be returned which correspond to a particular ambiguity. Bearings may be calculated from time delays, beam forming, particle velocity sensors etc. It does necessarily follow that a groupLoc info with bearings also has time delay measurements. GroupLocInfo is used to calculate these values before they are passed to a more generic localisation algortihm.
- Author:
- Jamie Macaulay
-
Method Summary
Modifier and TypeMethodDescriptionint
getAmbiguityCount
(int dim) Get the number of ambiguities expected from bearings.getBeamLatLong
(LatLong locLatLong) Get the beam latitude and longitude.long
getBeamTime
(LatLong locLatLong) Get the beam time.int
The number of detections to be used in this target motion.The GPS point which corresponds to (0,0,0) in the cartesian system.Returns the positions of the hydrophones for every detection, relative to (0,0,0) for every pamDetection.Returns the origin of the hydrophone array for each detection point- this is in meters relative to 0,0,0;Returns the parent detection which contains sub detections which will be used in a group localisation.int
Get a bitmap of hydrophones channels used in the localisation.Get the Euler angles for each detection.Returns the time delay errors for each detection.Returns the time delays for each detection.Get a time for the detection (usually an average of all the individual detectiopns)getWorldVectorErrors
(int side) The error for world vectorsgetWorldVectors
(int side) The real world vectors for each detection.Convert a point in your Cartesian Co-ordinate frame
-
Method Details
-
getParentDetection
SuperDetection getParentDetection()Returns the parent detection which contains sub detections which will be used in a group localisation.- Returns:
- a parent detection which should contain two or more sub detections.
-
getDetectionCount
int getDetectionCount()The number of detections to be used in this target motion.- Returns:
- the number of detections we have in total getCurrentDetection().size();
-
getTimeDelays
Returns the time delays for each detection. The number of time delays per detection is going to be based on the number of hydrophones in the array.- Returns:
- a list of time delays. Each ArrayList
corresponds to the time delays calculated from a PamDetection. Time delays are related to channel numbers by the indexM1 and indexM2 functions in AbstractLocalisation.
-
getTimeDelayErrors
Returns the time delay errors for each detection. This should be based on the uncertainty in spacing between hydrophones for target motion analysis.- Returns:
- a list of time delay errors. Each ArrayList
corresponds to the time delays calculated from a PamDetection. Time delays are related to channel numbers by the indexM1 and indexM2 functions in AbstractLocalisation.
-
getWorldVectors
The real world vectors for each detection. There may be an ambiguity in the vectors in which case each AbstractLocalisation will contain two world vectors per detections e.g. for a stereo array there are two bearings whilst for a 3D towed array there would usually be only one three dimensional bearing. A list of vectors corresponding to one ambiguity is returned here.- Returns:
- a 2D array of world vectors corresponding to each ambiguity in the currentDetectionsGroup. The size of the array is the same as the number of sub detections. A bearing may be null if not used. If side> the no. ambiguities null is returned
-
getWorldVectorErrors
The error for world vectors- Returns:
- the error for world vectors The size of the array is the same as the number of sub detections. A bearing may be null if not used. If side> the no. ambiguities null is returned
-
getAmbiguityCount
int getAmbiguityCount(int dim) Get the number of ambiguities expected from bearings. Solving a loclaisation for different numbers of dimensions can introduce a different number of ambiguities.- Returns:
- the number of ambiguities e.g. for stereo towed array will usually be 2.
-
getOrigins
PamVector[] getOrigins()Returns the origin of the hydrophone array for each detection point- this is in meters relative to 0,0,0;- Returns:
- the vector of a PamDetections origin were (0,0,0) is the origin.
-
getHydrophonePos
Returns the positions of the hydrophones for every detection, relative to (0,0,0) for every pamDetection.- Returns:
- a list of hydrophone positions. Each invalid input: '<'ArrayListinvalid input: '<'double[]> corresponds to the hydrophone positions for one PamDetection.
-
getRotationVectors
PamQuaternion[] getRotationVectors()Get the Euler angles for each detection. It assumed that the hydrophones within a single PamDetection (usually referred to as a group) will be from rigid array, hence share the same rotation angles.Note on Rotation Angles: We need to know the position and depth of the array but we also must know the rotation of the array. It would be nice to store the rotation as vector, however a unit vector cannot describe fully the rotation of the array. e.g say we have the unit vector (-0.71 0.0 0.71), this would describe a heading of 270 and pitch of 45 degrees. However this unit vector tells us nothing about the roll (tilt) of the array. This is because we had to start off with a unit vector (0,1,0) to rotate to begin with. We can transform co-ordinate systems all we want but a unit vector will only ever tell us two Euler angles. Hence we have to store euler angles as a PamQuaternion (a 4 element vector) not a PamVector (a 3 element vector).
- Returns:
- An array of PamQuaternion angles representing each PamDetection. If a quaternion is null the array is assumed to have no rotation.
- See Also:
-
getGPSReference
LatLong getGPSReference()The GPS point which corresponds to (0,0,0) in the cartesian system.- Returns:
- the lat long which has been used for the (0,0,0) reference.
-
latLongToMetres
- Parameters:
ll
- - the GPS Co-Ordinaterotate
-- Returns:
-
metresToLatLong
Convert a point in your Cartesian Co-ordinate frame- Parameters:
pt
- - a pointisRotated
-- Returns:
-
getReferenceHydrophones
int getReferenceHydrophones()Get a bitmap of hydrophones channels used in the localisation.- Returns:
- a bitmap of hydrophone positions of all channels used.
-
getTimeMillis
Long getTimeMillis()Get a time for the detection (usually an average of all the individual detectiopns)- Returns:
- the time in millis
-
getBeamTime
Get the beam time. This is the time at whihc the hydrophones are closest to a localisation result- Returns:
- the beam time
-
getBeamLatLong
Get the beam latitude and longitude.- Parameters:
locLatLong
-- Returns:
-