33 lines
		
	
	
		
			986 B
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			986 B
		
	
	
	
		
			Python
		
	
	
import math
 | 
						|
import unittest
 | 
						|
import numpy as np
 | 
						|
 | 
						|
import gtsam
 | 
						|
 | 
						|
class TestScenario(unittest.TestCase):
 | 
						|
    def setUp(self):
 | 
						|
        pass
 | 
						|
 | 
						|
    def test_loop(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)
 | 
						|
        
 | 
						|
        T = 30
 | 
						|
        np.testing.assert_almost_equal(W, scenario.omega_b(T))
 | 
						|
        np.testing.assert_almost_equal(V, scenario.velocity_b(T))
 | 
						|
        np.testing.assert_almost_equal(np.cross(W, V), scenario.acceleration_b(T))
 | 
						|
        
 | 
						|
        # R = v/w, so test if loop crests at 2*R
 | 
						|
        R = v / w
 | 
						|
        T30 = scenario.pose(T)
 | 
						|
        np.testing.assert_almost_equal(np.array([-math.pi, 0, -math.pi]), T30.rotation().xyz())
 | 
						|
        self.assert_(gtsam.Point3(0, 0, 2 * R).equals(T30.translation()))
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    unittest.main()
 |