001    package edu.nrao.sss.model.resource;
002    
003    /**
004     * A TelescopeMotionModel.
005     * Things we need to know:
006     * <ul>
007     * <li>Previous location of antenna</li>
008     * <li>Desired new location</li>
009     * <li>axis 1 and 2 movement rates</li>
010     * <li>axis 1 and 2 acceleration (and maybe decceleration too)</li>
011     * <li>antenna settling time</li>
012     * <li>min setup time.  Slew time must be &gt;= this value regardless of mechanical movement time.</li>
013     * <li>min and max values for each axis</li>
014     * </ul>
015     */
016    public interface TelescopeMotionModel
017    {
018      /**
019       * May pass in SkyPos objects later.  Problem is their time dependence.
020       * Assuming args are in radians.
021       */
022      public double calculateSlewTime(double[] from, double[] to);
023    
024      /**
025       * returns the maximum speed the antenna can slew on axis {@code axisNumber} in radians/s.
026       */
027      public double getMaximumSlewRate(int axisNumber);
028    
029      /**
030       * returns the acceleration the antenna can slew on axis {@code axisNumber} in radians/s/s.
031       */
032      public double getSlewAcceleration(int axisNumber);
033    
034      /**
035       * returns the minimum angle the antenna can move to on axis {@code axisNumber} in radians.
036       */
037      public double getMinimumAngle(int axisNumber);
038    
039      /**
040       * returns the maximum angle the antenna can move to on axis {@code axisNumber} in radians.
041       */
042      public double getMaximumAngle(int axisNumber);
043    
044      /**
045       * returns the amount of time it takes for the Antenna to settle into
046       * position in seconds.  This should include <em>any and all</em> time from the point
047       * the antenna stops moving to when it is ready to actually collect data.
048       */
049      public double getSettlingTime();
050    
051      /**
052       * returns the minimum amount of time it takes to setup an antenna regardless
053       * of the time it takes to physically move (in seconds).
054       */
055      public double getMinimumSetupTime();
056    }