/// <summary>
        /// Creates the plan connecting coordinates by ramped lines.
        /// </summary>
        /// <param name="trajectory">Trajectory which plan will be created.</param>
        /// <returns>The created plan.</returns>
        public PlanBuilder CreateRampedPlan(Trajectory4D trajectory)
        {
            var planBuilder = new PlanBuilder();

            iterateDistances(trajectory, (p, u, v, x, y) => planBuilder.AddRampedLineUVXY(u, v, x, y, Configuration.MaxPlaneAcceleration, Configuration.MaxPlaneSpeed));
            return(planBuilder);
        }
示例#2
0
        /// <summary>
        /// Creates the plan connecting coordinates constant speed without acceleration.
        /// </summary>
        /// <param name="trajectory">Trajectory which plan will be created.</param>
        /// <returns>The created plan.</returns>
        public PlanBuilder CreateConstantPlan(Trajectory4D trajectory)
        {
            var planBuilder = new PlanBuilder();

            iterateDistances(trajectory, (p, x, y) => planBuilder.AddConstantSpeedTransitionXY(x, y, _transitionSpeed));
            return(planBuilder);
        }
        /// <summary>
        /// Creates the plan connecting coordinates constant speed without acceleration.
        /// </summary>
        /// <param name="trajectory">Trajectory which plan will be created.</param>
        /// <returns>The created plan.</returns>
        public PlanBuilder CreateConstantPlan(Trajectory4D trajectory, IEnumerable <Tuple <Speed, Speed> > segmentSpeeds = null)
        {
            if (segmentSpeeds == null)
            {
                segmentSpeeds = new Tuple <Speed, Speed> [0];
            }

            var speeds = new Queue <Tuple <Speed, Speed> >(segmentSpeeds);

            var planBuilder = new PlanBuilder();

            iterateDistances(trajectory, (p, u, v, x, y) =>
            {
                var speedUV = _transitionSpeed;
                var speedXY = _transitionSpeed;
                if (speeds.Any())
                {
                    var speed = speeds.Dequeue();
                    speedUV   = speed.Item1;
                    speedXY   = speed.Item2;
                }

                planBuilder.AddConstantSpeedTransitionUVXY(u, v, speedUV, x, y, speedXY);
            });
            return(planBuilder);
        }
示例#4
0
        /// <summary>
        /// Draws coordinates from a provider by a continuous speed
        /// </summary>
        /// <param name="provider">Provider which creates coordinates.</param>
        /// <param name="speed">Speed of drawing</param>
        public static PlanBuilder DrawContinuousLines(CoordinateProvider provider, Speed speed = null)
        {
            if (speed == null)
            {
                speed = Constants.MaxPlaneSpeed;
            }

            var points     = provider();
            var trajectory = new Trajectory4D(points);

            var planner = new StraightLinePlanner(speed);

            return(planner.CreateContinuousPlan(trajectory));
        }
示例#5
0
        /// <summary>
        /// Draws coordinates from a provider by a constant speed
        /// </summary>
        /// <param name="provider">Provider which creates coordinates.</param>
        /// <param name="speed">Speed of drawing</param>
        public static PlanBuilder DrawByConstantSpeed(CoordinateProvider provider, Speed speed = null)
        {
            if (speed == null)
            {
                speed = Constants.ReverseSafeSpeed;
            }

            var points     = provider();
            var trajectory = new Trajectory4D(points);

            var planner = new StraightLinePlanner(speed);

            return(planner.CreateConstantPlan(trajectory));
        }
示例#6
0
        /// <summary>
        /// Draws coordinates from a provider by a constant speed
        /// </summary>
        /// <param name="provider">Provider which creates coordinates.</param>
        /// <param name="speed">Speed of drawing</param>
        public static PlanBuilder DrawByRampedLines(CoordinateProvider provider, Speed speed = null)
        {
            if (speed == null)
            {
                speed = Configuration.MaxPlaneSpeed;
            }

            var points     = provider();
            var trajectory = new Trajectory4D(points);

            var planner = new StraightLinePlanner(speed);

            return(planner.CreateRampedPlan(trajectory));
        }
示例#7
0
        /// <summary>
        /// Creates the plan connecting coordinates by lines with continuous speed.
        /// </summary>
        /// <param name="trajectory">Trajectory which plan will be created.</param>
        /// <returns>The created plan.</returns>
        public PlanBuilder CreateContinuousPlan(Trajectory4D trajectory)
        {
            var pointSpeeds = createPointSpeeds(trajectory.Points);

            var planBuilder = new PlanBuilder();

            var currentSpeed = Speed.Zero;

            iterateDistances(trajectory, (p, x, y) =>
            {
                var targetSpeedF = pointSpeeds[p];
                var targetSpeed  = new Speed((int)(targetSpeedF), Configuration.TimerFrequency);
                planBuilder.AddLineXY(x, y, currentSpeed, Configuration.MaxPlaneAcceleration, targetSpeed);
                currentSpeed = targetSpeed;
            });

            return(planBuilder);
        }
示例#8
0
        private void iterateDistances(Trajectory4D trajectory, Action <Point4Dstep, int, int> planner)
        {
            Point4Dstep lastPoint = null;

            foreach (var point in trajectory.Points)
            {
                if (lastPoint == null)
                {
                    lastPoint = point;
                    continue;
                }

                var distanceX = point.X - lastPoint.X;
                var distanceY = point.Y - lastPoint.Y;

                planner(point, distanceX, distanceY);
                lastPoint = point;
            }
        }