Beispiel #1
0
        /// <summary>
        /// Возвращает значение координат X (<paramref name="x"/>) и Y(<paramref name="y"/>) при заданном положении плеч
        /// <paramref name="lever1Ab"/> и <paramref name="lever2Ab"/> робота - манипулятора.
        /// </summary>
        public void GetXYByABValues(double lever1Ab, double lever2Ab, out double x, out double y)
        {
            double phi1 = DesignParameters.Lever1.GetAngleByABValue(lever1Ab);
            double phi2 = DesignParameters.Lever2.GetAngleByABValue(lever2Ab);

            if (!AnglesCalculation.IsAnglesAreValid(DesignParameters, new AnglesOfRotation(phi1, phi2)))
            {
                throw new DesignParametersException(string.Format("Невозможно достичь заданные координаты"));
            }

            x = AnglesCalculation.GetX(DesignParameters, phi1, phi2);
            y = AnglesCalculation.GetY(DesignParameters, phi1, phi2);
        }
Beispiel #2
0
        /// <summary>
        /// Возвращает коллекцию экземпляров класса <see cref="StepLever"/>, указывающий какое количество
        /// импульсов необходимо подать на каждое из плеч робота-манипулятора для достижения координат
        /// <paramref name="toX"/> и <paramref name="toY"/>, учитывая что текущее
        /// положение <paramref name="fromX"/> и <paramref name="fromY"/>.
        /// </summary>
        public IEnumerable <StepLever> CalculateStepLeverToXY(double fromX, double toX, double fromY, double toY)
        {
            var anglesOld = AnglesCalculation.GetAngles(DesignParameters, fromX, fromY, 0).First();
            var anglesNew = AnglesCalculation.GetAngles(DesignParameters, toX, toY, 0).First();

            var lever1from = DesignParameters.Lever1.GetABValueByAngle(anglesOld.Phi1);
            var lever1to   = DesignParameters.Lever1.GetABValueByAngle(anglesNew.Phi1);

            var lever2from = DesignParameters.Lever2.GetABValueByAngle(anglesOld.Phi2);
            var lever2to   = DesignParameters.Lever2.GetABValueByAngle(anglesNew.Phi2);

            yield return(new StepLever(LeverType.Lever1, PulseCalculation.GetPulsesCount(DesignParameters.Lever1, lever1from, lever1to)));

            yield return(new StepLever(LeverType.Lever2, PulseCalculation.GetPulsesCount(DesignParameters.Lever2, lever2from, lever2to)));
        }
Beispiel #3
0
 /// <summary>
 /// Возвращает текущее положение центра схвата по координате Y.
 /// </summary>
 /// <returns>Текущее положение центра схвата по координате Y</returns>
 public double GetCurrentY()
 {
     return(AnglesCalculation.GetCurrentY(DesignParameters));
 }
Beispiel #4
0
 /// <summary>
 /// Проверяет возможно ли переместить схват робота в заданные координаты <paramref name="x"/>, <paramref name="y"/>, <paramref name="z"/>.
 /// </summary>
 public void CheckValues(double x, double y, double z)
 {
     // В случае некорректных данных выбросит исключение.
     AnglesCalculation.GetAngles(DesignParameters, x, y, 0);
     PulseCalculation.GetPulsesCount(DesignParameters.HorizontalLever, z);
 }
Beispiel #5
0
 /// <summary>
 /// Задает текущие координаты <paramref name="x"/>, <paramref name="y"/> и <paramref name="z"/>
 /// центра схвата робота-манипулятора.
 /// </summary>
 public void SetCurrentCoordinates(ref double x, ref double y, ref double z)
 {
     x = AnglesCalculation.GetCurrentX(DesignParameters);
     y = AnglesCalculation.GetCurrentY(DesignParameters);
     z = GetCurrentZ();
 }