예제 #1
0
    def test_target_position_VI(self):
        """Yet another real-world problem case."""
        solver = TrajectorySolver(32, 1., 2.5, -5.0, -5.0, -2.5)
        try:
            spline = solver.target_position(Knot(0.0, 10.160758018493652, -5.0, 28.024999999999999),
                                            Knot(67.214868918397073, 0, 0, None))
##            self.plot_it(spline, solver, "test_target_position_VI")
##            self.validate_spline(spline, solver)
            self.assertAlmostEqual(spline.q[-1], 67.214868918397073, 5)
            self.assertAlmostEqual(spline.v[-1], 0, 5)
            self.assertAlmostEqual(spline.a[-1], 0, 5)
            self.assertTrue(spline.t[-1] - spline.t[0] < 60)
        except OptimizationError, err:
            import random
            while True:
                try:
                    new_durations = [random.random() for h in err.durations]
                    print "initial hs:", new_durations
                    solver.target_position_none(Knot(0.0, 10.160758018493652, -5.0, 28.024999999999999),
                                                Knot(67.214868918397073, 0, 0, None),
                                                new_durations)
                except OptimizationError as err:
                    print "Soln hs:", solver._soln_spline.h
                    self.plot_it(solver._soln_spline, solver, "test_remix...")
                else:
                    print "Soln hs:", solver._soln_spline.h
                    self.plot_it(solver._soln_spline, solver, "test_remix...")
                    break
예제 #2
0
 def test__no_acceleration_predict_II(self):
     """Starts with 0 vel, 0 accel. No accel prediction is mostly meaningless."""
     solver = TrajectorySolver(40, 5, 2.5, 0, -5, -2.5)
     initial = Knot(10,0,0,0)
     final = Knot(50,5,-1,None)
     spline = solver._no_acceleration_predict(initial, final)
     self.assertEqual(spline.t[-1], float('inf'))
예제 #3
0
    def test_target_velocity_VII(self):
        solver = TrajectorySolver(15, 5, 2.5, 0, -5, -2.5)
        initial = Knot(0, 14.5, 2, 0)
        final = Knot(None, 15, 0, None)
##        spline = solver.target_velocity(initial, final)
##        self.plot_it(spline, solver, "test_target_velocity_VII")
        self.assertRaises(FatalTrajectoryError, solver.target_velocity, initial, final)
예제 #4
0
 def test_target_time_XII(self):
     """Problem from testing. Unachievable."""
     solver = TrajectorySolver(15, 5, 2.5, 0, -5, -2.5)
     initial = Knot(2.0, 15.0, 0.0, 5.4795365136060168)
     final = Knot(70.901034075983588, 15.0, 0, 11.706272118671588) # ave speed of 11.065 m/s
     self.assertRaises(FatalTrajectoryError,
                       solver.target_time, initial, final )
예제 #5
0
 def test_target_time_III(self):
     """Insufficient time to achieve target due to low vehicle v_max"""
     solver = TrajectorySolver(10, 5, 2.5, 0, -5, -2.5)
     initial = Knot(0,0,0,0)
     final = Knot(1000, 0, 0, 54)
     self.assertRaises(FatalTrajectoryError,
                       solver.target_time, initial, final) # needs approx 20 m/s cruise, ignoring jerk limits
예제 #6
0
 def test_target_velocity_no_delta_v_I(self):
     """Simple case. No acceleration involved."""
     solver = TrajectorySolver(40, 5, 2.5, 0, -20, -1.25)
     initial = Knot(0, 20, 0, 0)
     final = Knot(None, 20, 0, None)
     spline = solver.target_velocity(initial, final)
     self.validate_spline(spline, solver)
     self.validate_endpoints(spline, initial, final, pos=False, time=False)
예제 #7
0
    def test_target_velocity_V(self):
        solver = TrajectorySolver(15, 10, 5.0, 0, -10, -5.0)
        initial = Knot(0, 11.51496564563041, 5.6694744752383066, 0)
        final = Knot(None, 14.732396990426981, 0, None)
        spline = solver.target_velocity(initial, final)
##        self.plot_it(spline, solver, "test_target_velocity_V")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final, pos=False, time=False)
예제 #8
0
    def test_target_position_XI(self):
        solver = TrajectorySolver(60, 10, 5, 0, -10, -5)
        initial = Knot(1.9999999896260192, 8.5068000742251115, -0.022863034988063191, 447.29479530675786)
        final = Knot(42.498999999999995, 2.3999999999999999, 0, None)
        spline = solver.target_position(initial, final, initial.vel)
##        self.plot_it(spline, solver, "test_target_position_XI")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final, time=False)
예제 #9
0
    def test_target_time_XXII(self):
        solver = TrajectorySolver(67.0, 9.0, 7.0, 0, -9.0, -7.0)
        initial = Knot(41.653999342612224, 44.0, 0.0, 5425.3539044854588)
        final = Knot(196.25800000000001, 2.3999999999999999, 0, 5432.6250864545336)
        spline = solver.target_time(initial, final)
##        self.plot_it(spline, solver, "test_target_time_XXI")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final)
예제 #10
0
 def test_target_position_amax_III(self):
     solver = TrajectorySolver(30, 5, 5, 0, -5, -5)
     initial = Knot(21.494, 0.0, 0, 0.0)
     final = Knot(57.176000000000002, 3.5, 0, None)
     spline = solver.target_position(initial, final, 25.0)
     self.plot_it(spline, solver, "test_target_position_amax_III")
     self.validate_spline(spline, solver)
     self.validate_endpoints(spline, initial, final, time=False)
예제 #11
0
    def test_target_time_XVIII(self):
        solver = TrajectorySolver(15, 10, 5.0, 0, -10, -5.0)
        initial = Knot(23.973000000002685, 15.0, 0.0, 1154.2775841472599)
        final = Knot(277.55799999999999, 15.0, 0, 1172.0256197255005)
        spline = solver.target_time(initial, final)
##        self.plot_it(spline, solver, "test_target_time_XVIII")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final)
예제 #12
0
 def test_target_time_XV(self):
     """Problem from testing."""
     solver = TrajectorySolver(15, 5, 2.5, 0, -5, -2.5)
     initial = Knot(52.500999999999998, 14.917710067720561, 0, 2924.9500320272209)
     final = Knot(643.9559999999999, 15.0, 0, 2964.5960666793744)
     spline = solver.target_time(initial, final)
     self.validate_spline(spline, solver)
     self.validate_endpoints(spline, initial, final)
예제 #13
0
    def test_target_time_XXI(self):
        solver = TrajectorySolver(20, 7.2, 5.0, 0, -7.2, -5.0)
        initial = Knot(9.8130000000001303, 18.114342061230673, 4.3424163075059123, 3.3492945162765952)
        final = Knot(709.7650000000001, 20.0, 0, 38.72843888888891)
        spline = solver.target_time(initial, final)
##        self.plot_it(spline, solver, "test_target_time_XXI")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final)
예제 #14
0
 def test_target_time_XIV(self):
     """Problem from testing."""
     solver = TrajectorySolver(15, 5, 2.5, 0, -5, -2.5)
     initial = Knot(9.9000001907348629, 0.0, 0.0, 1978.7999999999861)
     final = Knot(267.03399999999999, 15.0, 0, 2002.9280666602958)
     spline = solver.target_time(initial, final)
     self.validate_spline(spline, solver)
     self.validate_endpoints(spline, initial, final)
예제 #15
0
    def test_target_time_XX(self):
        """ Fatal Trajectory Error in simple spline. """
        solver = TrajectorySolver(60, 10, 6, 0, -10, -6.0)
        initial = Knot(35.570999922343617, 20.000000000263217, 4.5474735088646412e-13, 1660.7976499923104)
        final = Knot(2593.1289999999999, 20.0, 0, 1789.7778999999914)
        spline = solver.target_time(initial, final, 20)
##        self.plot_it(spline, solver, "test_target_time_XX")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final)
예제 #16
0
    def test_target_time_XIX(self):
        """ negative time interval in spline. """
        solver = TrajectorySolver(20, 10, 5, 0, -10, -5.0)
        initial = Knot(2,19.2506,2.737,3.452)
        final = Knot(701.952,20.0,0,39.3653)
        spline = solver.target_time(initial, final, 20)
##        self.plot_it(spline, solver, "test_target_time_XIX")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final)
예제 #17
0
    def test_target_time_XVI(self):
        """Problem from testing."""
        solver = TrajectorySolver(60, 5, 2.5, 0, -5, -2.5)
        initial = Knot(0.0, 0.0, 0, 0.0)
        final = Knot(57.926000000000002, 15.0, 0, 7.1870000000000003)
        spline = solver.target_time(initial, final)
##        self.plot_it(spline, solver, "test_target_time_XVI")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final)
예제 #18
0
    def test_target_time_V(self):
        """Very short distance, but plenty of time. Does not have a constant acceleration segment."""
        solver = TrajectorySolver(40, 5, 2.5, 0, -5, -2.5)
        initial = Knot(0,0,0,0)
        final = Knot(5,0,0,10)
        spline = solver.target_time(initial, final)
##        self.plot_it(spline, solver, "test_target_time_V")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final)
예제 #19
0
 def test_target_acceleration_II(self):
     """No change in accel"""
     solver = TrajectorySolver(40, 5, 2.5, 0, -5, -2.5)
     initial = Knot(0,0,3,0)
     final = Knot(None, None, 3, None)
     spline = solver.target_acceleration(initial, final)
     self.plot_it(spline, solver, "test_target_acceleration_I")
     self.validate_spline(spline, solver)
     self.validate_endpoints(spline, initial, final, pos=False, vel=False, time=False )
예제 #20
0
    def test_target_time_XI(self):
        """Problem from testing."""
        solver = TrajectorySolver(15, 5, 2.5, 0, -5, -2.5)
        initial = Knot(4.8999999999999986, 0.0, 0.0, 81.599999999999994)
        final = Knot(309.26081973091823, 15.0, 0, 104.90984383153337)
        spline = solver.target_time(initial, final)
##        self.plot_it(spline, solver, "test_target_time_XI")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final)
예제 #21
0
    def test_target_time_X(self):
        """Problem from testing. Initial velocity is very close to ave velocity."""
        solver = TrajectorySolver(15, 5, 2.5, 0, -5, -2.5)
        initial = Knot(47.529766162611494, 11.907670085181412, 0, 101.08822071657993)
        final = Knot(309.26081973091823, 15.0, 0, 122.74317716486676)
        spline = solver.target_time(initial, final)
##        self.plot_it(spline, solver, "test_target_time_X")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final)
예제 #22
0
    def test_target_time_I(self):
        """Uses zero for accel and velocity endpoints."""
        solver = TrajectorySolver(40, 5, 2.5, 0, -5, -2.5)
        initial = Knot(0,0,0,0)
        final = Knot(1000, 0, 0, 54)
        spline = solver.target_time(initial, final) # approx 20 m/s cruise, ignoring jerk limits
##        self.plot_it(spline, solver, "test_target_time_I")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final)
예제 #23
0
    def test_target_time_II(self):
        """Non-zero endpoints"""
        solver = TrajectorySolver(40, 5, 2.5, 0, -5, -2.5)
        initial = Knot(100, 10 , 3, 50)
        final = Knot(1000, 2, -1, 100)
        spline = solver.target_time(initial, final)
##        self.plot_it(spline, solver, "test_target_time_II")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final)
예제 #24
0
    def test_target_time_VII(self):
        """A problem that cropped up during testing."""
        solver = TrajectorySolver(60, 5, 2.5, 0, -5, -2.5)
        initial = Knot(93.318734132069295, 16.0, 0.0, 5.2)
        final = Knot(307.3406064472577, 16.0, 0, 18.95297859206239)
        spline = solver.target_time(initial, final)
##        self.plot_it(spline, solver, "test_target_time_VII")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final)
예제 #25
0
    def test_target_time_VI(self):
        """Vehicle needs to exactly maintain current speed to achieve target time"""
        solver = TrajectorySolver(40, 5, 2.5, 0, -5, -2.5)
        initial = Knot(0,40,0,0)
        final = Knot(1000,40,0,25)
        spline = solver.target_time(initial, final)
##        self.plot_it(spline, solver, "test_target_time_VI")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final)
예제 #26
0
    def test_target_time_XIII(self):
        """Cruise velocity is very near to initial and final velocities."""
        solver = TrajectorySolver(15, 5, 2.5, 0, -5, -2.5)
        initial = Knot(52.5, 14.99716768771842, 0, 1530.8197971206223)
        final = Knot(267.03399999999999, 15.0, 0, 1545.1247333079007)
        spline = solver.target_time(initial, final)
##        self.plot_it(spline, solver, "test_target_time_XIII")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final)
예제 #27
0
    def test_target_time_VIII(self):
        """Another problem that occured during testing"""
        solver = TrajectorySolver(60, 5, 2.5, 0, -5, -2.5)
        initial = Knot(42.629766162611496, 7.8664068437709354, 0, 47.65161563986365)
        final = Knot(351.8905858935297, 15.0, 0, 73.876510498199906)
        spline = solver.target_time(initial, final)
##        self.plot_it(spline, solver, "test_target_time_VIII")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final)
예제 #28
0
    def test_target_time_IV(self):
        """Vehicle needs to slow down to achieve target time"""
        solver = TrajectorySolver(40, 5, 2.5, 0, -5, -2.5)
        initial = Knot(0,40,0,0)
        final = Knot(1000,40,0,54)
        spline = solver.target_time(initial, final)
##        self.plot_it(spline, solver, "test_target_time_IV")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final)
예제 #29
0
    def test__no_acceleration_predict_III(self):
        """Has initial vel, no initial accel. Accelerates."""
        solver = TrajectorySolver(40, 5, 2.5, 0, -5, -2.5)
        initial = Knot(10,2,0,0)
        final = Knot(50,10,0,None)
        spline = solver._no_acceleration_predict(initial, final)
##        self.plot_it(spline, solver, "_no_acceleration_predict_III")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final, time=False)
예제 #30
0
    def test_target_time_IX(self):
        """Problem from testing. Initial velocity is close to the cruise velocity."""
        solver = TrajectorySolver(60, 5, 2.5, 0, -5, -2.5)
        initial = Knot(47.529766162611494, 7.8664068437709354, 0, 43.972657903425244)
        final = Knot(309.26081973091823, 15.0, 0, 75.376510498199906)
        spline = solver.target_time(initial, final)
##        self.plot_it(spline, solver, "test_target_time_IX")
        self.validate_spline(spline, solver)
        self.validate_endpoints(spline, initial, final)