コード例 #1
0
        private async Task ExecuteStep(Vector2 direction, float angle, LegFlags forwardMovingLegs, float distance = 1f, float liftHeight = 2)
        {
            _rotationalOdometry += angle;
            angle = angle / 4;
            if (forwardMovingLegs != LegFlags.LfRrCross && forwardMovingLegs != LegFlags.RfLrCross)
            {
                throw new ArgumentException($"{nameof(forwardMovingLegs)} has to be {nameof(LegFlags.RfLrCross)} or {nameof(LegFlags.LfRrCross)}");
            }
            LegFlags backwardsMovingLegs = forwardMovingLegs == LegFlags.LfRrCross ? LegFlags.RfLrCross : LegFlags.LfRrCross;
            var      legShift            = distance / 4;

            // Lift
            var nextStep = RelaxedStance
                           .Transform(new Vector3(legShift * direction.X, legShift * direction.Y, liftHeight), forwardMovingLegs)
                           .Rotate(new Angle(-angle), forwardMovingLegs)
                           .Transform(new Vector3(-legShift * direction.X, -legShift * direction.Y, 0), backwardsMovingLegs)
                           .Rotate(new Angle(angle), backwardsMovingLegs);

            await ExecuteMove(nextStep);

            // Lower
            nextStep = nextStep
                       .Transform(new Vector3(legShift * direction.X, legShift * direction.Y, -liftHeight), forwardMovingLegs)
                       .Rotate(new Angle(-angle), forwardMovingLegs)
                       .Transform(new Vector3(-legShift * direction.X, -legShift * direction.Y, 0), backwardsMovingLegs)
                       .Rotate(new Angle(angle), backwardsMovingLegs);
            await ExecuteMove(nextStep);

            // Move all
            nextStep = nextStep.Transform(new Vector3(-legShift * direction.X * 2, -legShift * direction.Y * 2, 0));
            await ExecuteMove(nextStep);

            _odometry += Vector2.Transform(direction * distance, Quaternion.CreateFromAxisAngle(Vector3.UnitZ, _rotationalOdometry.DegreeToRad()));
        }
コード例 #2
0
 private async Task StepToRelaxed(LegFlags legsToAlign, float liftHeight = 2)
 {
     if (legsToAlign != LegFlags.LfRrCross && legsToAlign != LegFlags.RfLrCross)
     {
         throw new ArgumentException($"{nameof(legsToAlign)} has to be {nameof(LegFlags.RfLrCross)} or {nameof(LegFlags.LfRrCross)}");
     }
     await ExecuteMove(RelaxedStance
                       .Transform(new Vector3(0, 0, liftHeight), legsToAlign));
     await ExecuteMove(RelaxedStance);
 }