def __init__(self, twist=None, bias=None, dt=1e-2): """Initialize with given twist, a pair(angularVelocityVector, velocityVector).""" # setup interactive plotting plt.ion() # Setup loop as default scenario if twist is not None: (W, V) = twist else: # default = loop with forward velocity 2m/s, while pitching up # with angular velocity 30 degree/sec (negative in FLU) W = np.array([0, -math.radians(30), 0]) V = np.array([2, 0, 0]) self.scenario = gtsam.ConstantTwistScenario(W, V) self.dt = dt self.maxDim = 5 self.labels = list('xyz') self.colors = list('rgb') # Create runner self.g = 10 # simple gravity constant self.params = self.defaultParams(self.g) if bias is not None: self.actualBias = bias else: accBias = np.array([0, 0.1, 0]) gyroBias = np.array([0, 0, 0]) self.actualBias = gtsam.imuBias_ConstantBias(accBias, gyroBias) self.runner = gtsam.ScenarioRunner( self.scenario, self.params, self.dt, self.actualBias)
def __init__(self, twist: Optional[np.ndarray] = None, bias: Optional[gtsam.imuBias.ConstantBias] = None, params: Optional[gtsam.PreintegrationParams] = None, dt: float = 1e-2): """Initialize with given twist, a pair(angularVelocityVector, velocityVector).""" # setup interactive plotting plt.ion() # Setup loop as default scenario if twist is not None: (W, V) = twist else: # default = loop with forward velocity 2m/s, while pitching up # with angular velocity 30 degree/sec (negative in FLU) W = np.array([0, -np.radians(30), 0]) V = np.array([2, 0, 0]) self.scenario = gtsam.ConstantTwistScenario(W, V) self.dt = dt self.maxDim = 5 self.labels = list('xyz') self.colors = list('rgb') if params: self.params = params else: # Default params with simple gravity constant self.params = self.defaultParams(g=GRAVITY) if bias is not None: self.actualBias = bias else: accBias = np.array([0, 0.1, 0]) gyroBias = np.array([0, 0, 0]) self.actualBias = gtsam.imuBias.ConstantBias(accBias, gyroBias) # Create runner self.runner = gtsam.ScenarioRunner(self.scenario, self.params, self.dt, self.actualBias) fig, self.axes = plt.subplots(4, 3) fig.set_tight_layout(True)
def test_loop_runner(self): # Forward velocity 2m/s # Pitch up with angular velocity 6 degree/sec (negative in FLU) v = 2 w = math.radians(6) W = np.array([0, -w, 0]) V = np.array([v, 0, 0]) scenario = gtsam.ConstantTwistScenario(W, V) dt = 0.1 params = gtsam.PreintegrationParams.MakeSharedU(self.g) bias = gtsam.imuBias.ConstantBias() runner = gtsam.ScenarioRunner(scenario, params, dt, bias) # Test specific force at time 0: a is pointing up t = 0.0 a = w * v np.testing.assert_almost_equal(np.array([0, 0, a + self.g]), runner.actualSpecificForce(t))