27 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Matlab
		
	
	
			
		
		
	
	
			27 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Matlab
		
	
	
function [ acc_omega ] = calculateIMUMeasurement(omega1Body, omega2Body, velocity1Body, velocity2Body, deltaT, imuFrame)
 | 
						|
%CALCULATEIMUMEASUREMENT Calculate measured body frame acceleration in
 | 
						|
%frame 1 and measured angular rates in frame 1.
 | 
						|
 | 
						|
import gtsam.*;
 | 
						|
 | 
						|
% Calculate gyro measured rotation rate by transforming body rotation rate
 | 
						|
% into the IMU frame.
 | 
						|
measuredOmega = imuFrame.rotation.unrotate(Point3(omega1Body)).vector;
 | 
						|
 | 
						|
% Transform both velocities into IMU frame, accounting for the velocity
 | 
						|
% induced by rigid body rotation on a lever arm (Coriolis effect).
 | 
						|
velocity1inertial = imuFrame.rotation.unrotate( ...
 | 
						|
    Point3(velocity1Body + cross(omega1Body, imuFrame.translation.vector))).vector;
 | 
						|
 | 
						|
imu2in1 = Rot3.Expmap(measuredOmega * deltaT);
 | 
						|
velocity2inertial = imu2in1.rotate(imuFrame.rotation.unrotate( ...
 | 
						|
    Point3(velocity2Body + cross(omega2Body, imuFrame.translation.vector)))).vector;
 | 
						|
 | 
						|
% Acceleration in IMU frame
 | 
						|
measuredAcc = (velocity2inertial - velocity1inertial) / deltaT;
 | 
						|
 | 
						|
acc_omega = [ measuredAcc; measuredOmega ];
 | 
						|
 | 
						|
end
 | 
						|
 |