Interface GroupLocInfo

All Known Implementing Classes:
TMGroupLocInfo

public interface GroupLocInfo
Provides information useful for localisation from groups of detections.

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 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

      ArrayList<ArrayList<Double>> 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

      ArrayList<ArrayList<Double>> 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

      PamVector[] getWorldVectors(int side)
      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

      PamVector[] getWorldVectorErrors(int side)
      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

      ArrayList<ArrayList<double[]>> 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

      PamVector latLongToMetres(LatLong ll)
      Parameters:
      ll - - the GPS Co-Ordinate
      rotate -
      Returns:
    • metresToLatLong

      LatLong metresToLatLong(PamVector pt)
      Convert a point in your Cartesian Co-ordinate frame
      Parameters:
      pt - - a point
      isRotated -
      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

      long getBeamTime(LatLong locLatLong)
      Get the beam time. This is the time at whihc the hydrophones are closest to a localisation result
      Returns:
      the beam time
    • getBeamLatLong

      GpsData getBeamLatLong(LatLong locLatLong)
      Get the beam latitude and longitude.
      Parameters:
      locLatLong -
      Returns: