27 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Matlab
		
	
	
		
		
			
		
	
	
			27 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Matlab
		
	
	
|  | function [ finalPose, finalVelocityGlobal ] = integrateIMUTrajectory_bodyFrame( ... | ||
|  |     initialPoseGlobal, initialVelocityGlobal, acc_omegaIMU, deltaT, velocity1Body) | ||
|  | 
 | ||
|  | % Before integrating in the body frame we need to compensate for the Coriolis  | ||
|  | % effect | ||
|  | acc_body =  acc_omegaIMU(1:3) - Point3(cross(acc_omegaIMU(4:6), velocity1Body)).vector; | ||
|  | % after compensating for coriolis this will be essentially zero | ||
|  | % since we are moving at constant body velocity  | ||
|  | 
 | ||
|  | import gtsam.*; | ||
|  | %% Integrate in the body frame | ||
|  | % Integrate rotations | ||
|  | imu2in1 = Rot3.Expmap(acc_omegaIMU(4:6) * deltaT); | ||
|  | % Integrate positions | ||
|  | finalPositionBody = velocity1Body * deltaT + 0.5 * acc_body * deltaT * deltaT; | ||
|  | finalVelocityBody = velocity1Body + acc_body * deltaT;  | ||
|  | 
 | ||
|  | %% Express the integrated quantities in the global frame | ||
|  | finalVelocityGlobal = initialVelocityGlobal + (initialPoseGlobal.rotation().rotate(Point3(finalVelocityBody)).vector() ); | ||
|  | finalPosition = initialPoseGlobal.translation().vector() + initialPoseGlobal.rotation().rotate( Point3(finalPositionBody)).vector() ; | ||
|  | finalRotation = initialPoseGlobal.rotation.compose(imu2in1); | ||
|  | % Include position and rotation in a pose | ||
|  | finalPose = Pose3(finalRotation, Point3(finalPosition) ); | ||
|  | 
 | ||
|  | end | ||
|  | 
 |