예제 #1
0
 def testRisingEdgeDetectionComplex(self):
     #sin from 0 to 6.5 pi
     sinEndsRising = [2.5 * sin(math.pi * float(i) / 4) for i in range(27)]
     for element in sinEndsRising:
         global_time.updateDelta(0.1)
         self.hpd.update(element)
         self.assertEquals(self.hpd.getEdgeType(), self.hpd.RISING_EDGE)
예제 #2
0
 def testConvergenceDetection(self):
     convergent_sequence=[(2.5-float(i)/50)*sin(math.pi*float(i)/10) 
                 for i in range(101) ]
     for element in convergent_sequence:
         global_time.updateDelta(0.1)
         self.hpd.update(element)
     self.assertTrue( self.hpd.hasConverged() )
예제 #3
0
 def testFallingEdgeDetectionComplex(self):
     #-sin from 0 to 6.5 pi
     sinEndsFalling=[-2.5*sin(math.pi*float(i)/4) for i in range(27)]
     for element in sinEndsFalling:
         global_time.updateDelta(0.1)
         self.hpd.update(element)
     self.assertEquals(self.hpd.getEdgeType(), self.hpd.FALLING_EDGE)
예제 #4
0
 def testLimitCycleDetection(self):
     lc_sequence=[2.5*sin(math.pi*float(i)/10) 
                 for i in range(201)]
     for element in lc_sequence:
         global_time.updateDelta(0.1)
         self.hpd.update(element)
     self.assertTrue( self.hpd.isLimitCycle() )
예제 #5
0
 def testConvergingDetection(self):
     converging_sequence=[(11-float(i)/4)*sin(math.pi*float(i)/10) 
                 for i in range(41)]
     for element in converging_sequence:
         global_time.updateDelta(0.1)
         self.hpd.update(element)
     self.assertTrue( self.hpd.isConverging() )
예제 #6
0
 def testInstabilityDetection(self):
     unstable_sequence=[float(i)/4*sin(math.pi*float(i)/10) 
                 for i in range(41)]
     for element in unstable_sequence:
         global_time.updateDelta(0.1)
         self.hpd.update(element)
     self.assertTrue( self.hpd.isUnstable() )
예제 #7
0
 def testNanGetsSanitized(self):
     try:
         global_time.updateDelta(0.1)
         self.pid.update(float("nan"), 2)
         self.assertTrue(False)
     except ValueError as error:
         self.assertTrue("cannot be NaN" in str(error))
예제 #8
0
 def testMaxMovementRateBounded(self):
     self.pid.max_movement_rate = 100
     try:
         global_time.updateDelta(0.1)
         self.pid.update(20, 2)
         self.assertTrue(False)
     except ValueError as error:
         self.assertTrue("unsafe rate" in str(error))
예제 #9
0
 def testInstabilityDetection(self):
     unstable_sequence = [
         float(i) / 4 * sin(math.pi * float(i) / 10) for i in range(41)
     ]
     for element in unstable_sequence:
         global_time.updateDelta(0.1)
         self.hpd.update(element)
         self.assertTrue(self.hpd.isUnstable())
예제 #10
0
 def testUpdateITerm(self):
     self.pid.kp = 0
     self.pid.kd = 0
     global_time.updateDelta(0.1)
     small = self.pid.update(.1, 0)
     global_time.updateDelta(0.1)
     large = self.pid.update(.1, 0)
     self.assertTrue(small < large)
예제 #11
0
 def testConvergingDetection(self):
     converging_sequence = [
         (11 - float(i) / 4) * sin(math.pi * float(i) / 10)
         for i in range(41)
     ]
     for element in converging_sequence:
         global_time.updateDelta(0.1)
         self.hpd.update(element)
         self.assertTrue(self.hpd.isConverging())
예제 #12
0
 def testConvergenceDetection(self):
     convergent_sequence = [
         (2.5 - float(i) / 50) * sin(math.pi * float(i) / 10)
         for i in range(101)
     ]
     for element in convergent_sequence:
         global_time.updateDelta(0.1)
         self.hpd.update(element)
         self.assertTrue(self.hpd.hasConverged())
예제 #13
0
 def testUpdateDTerm(self):
     self.pid.kp = 0
     self.pid.ki = 0
     global_time.updateDelta(0.1)
     large = self.pid.update(.1, 0)
     self.pid.prev_error = .2
     global_time.updateDelta(0.1)
     small = self.pid.update(.1, 0)
     self.assertTrue(small < large)
예제 #14
0
 def testRisingEdgeHysteresis(self):
     #tests that a falling edge which does not hit hysteretic
     #limits is not detected
     two_cycle_rising=[-2.5*sin(math.pi*float(i)/10 ) for i in range(16)]
     short_falling_edge=[ (2.5-float(i)/20) for i in range(10)]
     two_cycle_rising.extend(short_falling_edge)
     for element in two_cycle_rising:
         global_time.updateDelta(0.1)
         self.hpd.update(element)
     self.assertEquals(self.hpd.getEdgeType(), self.hpd.RISING_EDGE)
예제 #15
0
 def testRisingEdgeHysteresis(self):
     #tests that a falling edge which does not hit hysteretic
     #limits is not detected
     two_cycle_rising = [
         -2.5 * sin(math.pi * float(i) / 10) for i in range(16)
     ]
     short_falling_edge = [(2.5 - float(i) / 20) for i in range(10)]
     two_cycle_rising.extend(short_falling_edge)
     for element in two_cycle_rising:
         global_time.updateDelta(0.1)
         self.hpd.update(element)
         self.assertEquals(self.hpd.getEdgeType(), self.hpd.RISING_EDGE)
예제 #16
0
 def testIsDone(self):
     print "testing isDone"
     self.path = array([[0, 1, 1, 1], [1, 2, 2, 2], [2, 9, 9, 9], [3, 28, 28, 28]])
     self.path = self.path.transpose()
     self.mock_leg_model.getFootPos().AndReturn([0, 0, 0])
     self.mock_leg_model.jointAnglesFromFootPos(ReturnTrue(self.path))
     mox.Replay(self.mock_leg_model)
     ifm = InterpolatedFootMove(self.mock_leg_model, self.path)
     ifm.update()
     self.assertFalse(ifm.isDone())
     global_time.updateDelta(4)
     ifm.update()
     self.assertTrue(ifm.isDone())
     mox.Verify(self.mock_leg_model)
예제 #17
0
 def testIsDone(self):
     print "testing isDone"
     self.path = array([[0, 1, 1, 1], [1, 2, 2, 2], [2, 9, 9, 9],
                        [3, 28, 28, 28]])
     self.path = self.path.transpose()
     self.mock_leg_model.getFootPos().AndReturn([0, 0, 0])
     self.mock_leg_model.jointAnglesFromFootPos(ReturnTrue(self.path))
     mox.Replay(self.mock_leg_model)
     ifm = InterpolatedFootMove(self.mock_leg_model, self.path)
     ifm.update()
     self.assertFalse(ifm.isDone())
     global_time.updateDelta(4)
     ifm.update()
     self.assertTrue(ifm.isDone())
     mox.Verify(self.mock_leg_model)
예제 #18
0
 def testCubic(self):
     print "testing cubic interpolation"
     self.path = array([[0, 1, 1, 1], [1, 2, 2, 2], [2, 9, 9, 9],
                        [3, 28, 28, 28]])
     self.path = self.path.transpose()
     self.mock_leg_model.getFootPos().AndReturn([0, 0, 0])
     self.mock_leg_model.jointAnglesFromFootPos(
         ArraysEqual(array([.0, .0, .0])))
     self.mock_leg_model.jointAnglesFromFootPos(
         ArraysEqual(array([.001, .001, .001])))
     self.mock_leg_model.jointAnglesFromFootPos(
         ArraysEqual(array([.008, .008, .008])))
     self.mock_leg_model.jointAnglesFromFootPos(
         ArraysEqual(array([.027, .027, .027])))
     self.mock_leg_model.jointAnglesFromFootPos(
         ArraysEqual(array([.064, .064, .064])))
     mox.Replay(self.mock_leg_model)
     ifm = InterpolatedFootMove(self.mock_leg_model, self.path)
     print "TEST 1"
     #target_foot_pos = array([ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3])
     print "expected target_foot_pos = ", array([.0, .0, .0])
     self.assertFalse(ifm.isDone())
     ifm.update()
     global_time.updateDelta(0.1)
     print "TEST 2"
     #target_foot_pos = array([ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3])
     print "expected target_foot_pos = ", array([.001, .001, .001])
     ifm.update()
     global_time.updateDelta(0.1)
     print "TEST 3"
     #target_foot_pos = array([ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3])
     print "expected target_foot_pos = ", array([.008, .008, .008])
     ifm.update()
     global_time.updateDelta(0.1)
     print "TEST 4"
     #target_foot_pos = array([ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3])
     print "expected target_foot_pos = ", array([.027, .027, .027])
     ifm.update()
     global_time.updateDelta(0.1)
     print "TEST 5"
     #target_foot_pos = array([ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3])
     print "expected target_foot_pos = ", array([.064, .064, .064])
     ifm.update()
     mox.Verify(self.mock_leg_model)
예제 #19
0
 def testCubic(self):
     print "testing cubic interpolation"
     self.path = array([[0, 1, 1, 1], [1, 2, 2, 2], [2, 9, 9, 9], [3, 28, 28, 28]])
     self.path = self.path.transpose()
     self.mock_leg_model.getFootPos().AndReturn([0, 0, 0])
     self.mock_leg_model.jointAnglesFromFootPos(ArraysEqual(array([.0, .0, .0])))
     self.mock_leg_model.jointAnglesFromFootPos(ArraysEqual(array([.001, .001, .001])))
     self.mock_leg_model.jointAnglesFromFootPos(ArraysEqual(array([.008, .008, .008])))
     self.mock_leg_model.jointAnglesFromFootPos(ArraysEqual(array([.027, .027, .027])))
     self.mock_leg_model.jointAnglesFromFootPos(ArraysEqual(array([.064, .064, .064])))
     mox.Replay(self.mock_leg_model)
     ifm = InterpolatedFootMove(self.mock_leg_model, self.path)
     print "TEST 1"
     #target_foot_pos = array([ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3])
     print "expected target_foot_pos = ", array([.0, .0, .0])
     self.assertFalse(ifm.isDone())
     ifm.update()
     global_time.updateDelta(0.1)
     print "TEST 2"
     #target_foot_pos = array([ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3])
     print "expected target_foot_pos = ", array([.001, .001, .001])
     ifm.update()
     global_time.updateDelta(0.1)
     print "TEST 3"
     #target_foot_pos = array([ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3])
     print "expected target_foot_pos = ", array([.008, .008, .008])
     ifm.update()
     global_time.updateDelta(0.1)
     print "TEST 4"
     #target_foot_pos = array([ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3])
     print "expected target_foot_pos = ", array([.027, .027, .027])
     ifm.update()
     global_time.updateDelta(0.1)
     print "TEST 5"
     #target_foot_pos = array([ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3, ifm.stop_watch.getTime()**3])
     print "expected target_foot_pos = ", array([.064, .064, .064])
     ifm.update()
     mox.Verify(self.mock_leg_model)
예제 #20
0
 def _step(self, time, signal):
     global_time.updateDelta(time)
     return self.filter.update(signal)
예제 #21
0
파일: filters.py 프로젝트: ifreecarve/Main
 def _test_update(self, signal):
     """
     Increments time by 10 ms and then calculates the response.
     """
     global_time.updateDelta(0.01)
     return self.update(signal)
예제 #22
0
 def testRisingEdgeDetectionFromInit(self):
     risingsequence = [float(i) / 10 for i in range(25)]
     for element in risingsequence:
         global_time.updateDelta(0.1)
         self.hpd.update(element)
         self.assertEquals(self.hpd.getEdgeType(), self.hpd.RISING_EDGE)
예제 #23
0
 def testFallingEdgeDetection(self):
     fallingsequence = [-float(i) / 10 for i in range(25)]
     for element in fallingsequence:
         global_time.updateDelta(0.1)
         self.hpd.update(element)
         self.assertEquals(self.hpd.getEdgeType(), self.hpd.FALLING_EDGE)
예제 #24
0
 def testFallingEdgeDetection(self):
     fallingsequence=[-float(i)/10 for i in range(25)]
     for element in fallingsequence:
         global_time.updateDelta(0.1)
         self.hpd.update(element)
     self.assertEquals(self.hpd.getEdgeType(), self.hpd.FALLING_EDGE)
예제 #25
0
 def testRisingEdgeDetectionFromInit(self):
     risingsequence=[float(i)/10 for i in range(25)]
     for element in risingsequence:
         global_time.updateDelta(0.1)
         self.hpd.update(element)
     self.assertEquals(self.hpd.getEdgeType(), self.hpd.RISING_EDGE)
예제 #26
0
 def testLimitCycleDetection(self):
     lc_sequence = [2.5 * sin(math.pi * float(i) / 10) for i in range(201)]
     for element in lc_sequence:
         global_time.updateDelta(0.1)
         self.hpd.update(element)
         self.assertTrue(self.hpd.isLimitCycle())
예제 #27
0
 def testUpdateNoop(self):
     global_time.updateDelta(0.1)
     self.assertEquals(0, self.pid.update(0, 0))
예제 #28
0
 def testUpdateSmallPositiveError(self):
     global_time.updateDelta(0.1)
     self.assertTrue(0 < self.pid.update(.1, 0))
예제 #29
0
 def testUpdateSmallNegativeError(self):
     global_time.updateDelta(0.1)
     self.assertTrue(0 > self.pid.update(-.1, 0))
예제 #30
0
 def _step(self, time, signal):
     global_time.updateDelta(time)
     return self.filter.update(signal)
예제 #31
0
 def _test_update(self, signal):
     """
     Increments time by 10 ms and then calculates the response.
     """
     global_time.updateDelta(0.01)
     return self.update(signal)