@ -80,11 +80,10 @@ void Localizer::build_live_location(cereal::LiveLocationKalman::Builder& fix) {
VectorXd vel_ecef = predicted_state . segment < STATE_ECEF_VELOCITY_LEN > ( STATE_ECEF_VELOCITY_START ) ;
VectorXd vel_ecef_std = predicted_std . segment < STATE_ECEF_VELOCITY_ERR_LEN > ( STATE_ECEF_VELOCITY_ERR_START ) ;
VectorXd fix_pos_geo_vec = this - > get_position_geodetic ( ) ;
//fix_pos_geo_std = np.abs(coord.ecef2geodetic(fix_ecef + fix_ecef_std) - fix_pos_geo)
VectorXd orientation_ecef = quat2euler ( vector2quat ( predicted_state . segment < STATE_ECEF_ORIENTATION_LEN > ( STATE_ECEF_ORIENTATION_START ) ) ) ;
VectorXd orientation_ecef_std = predicted_std . segment < STATE_ECEF_ORIENTATION_ERR_LEN > ( STATE_ECEF_ORIENTATION_ERR_START ) ;
MatrixXdr orientation_ecef_cov = predicted_cov . block < STATE_ECEF_ORIENTATION_ERR_LEN , STATE_ECEF_ORIENTATION_ERR_LEN > ( STATE_ECEF_ORIENTATION_ERR_START , STATE_ECEF_ORIENTATION_ERR_START ) ;
MatrixXdr device_from_ecef = euler2rot ( orientation_ecef ) . transpose ( ) ;
//VectorXd calibrated_orientation_ecef = rot2euler(device_from_ecef);
VectorXd calibrated_orientation_ecef = rot2euler ( ( this - > calib_from_device * device_from_ecef ) . transpose ( ) ) ;
VectorXd acc_calib = this - > calib_from_device * predicted_state . segment < STATE_ACCELERATION_LEN > ( STATE_ACCELERATION_START ) ;
@ -116,11 +115,10 @@ void Localizer::build_live_location(cereal::LiveLocationKalman::Builder& fix) {
VectorXd vel_calib_std = rotate_cov ( this - > calib_from_device , vel_device_cov ) . diagonal ( ) . array ( ) . sqrt ( ) ;
VectorXd orientation_ned = ned_euler_from_ecef ( fix_ecef_ecef , orientation_ecef ) ;
//orientation_ned_std = ned_euler_from_ecef(fix_ecef, orientation_ecef + orientation_ecef_std) - orientation_ned
VectorXd orientation_ned_std = rotate_cov ( this - > converter - > ecef2ned_matrix , orientation_ecef_cov ) . diagonal ( ) . array ( ) . sqrt ( ) ;
VectorXd calibrated_orientation_ned = ned_euler_from_ecef ( fix_ecef_ecef , calibrated_orientation_ecef ) ;
VectorXd nextfix_ecef = fix_ecef + vel_ecef ;
VectorXd ned_vel = this - > converter - > ecef2ned ( ( ECEF ) { . x = nextfix_ecef ( 0 ) , . y = nextfix_ecef ( 1 ) , . z = nextfix_ecef ( 2 ) } ) . to_vector ( ) - converter - > ecef2ned ( fix_ecef_ecef ) . to_vector ( ) ;
//ned_vel_std = self.converter->ecef2ned(fix_ecef + vel_ecef + vel_ecef_std) - self.converter->ecef2ned(fix_ecef + vel_ecef)
VectorXd accDevice = predicted_state . segment < STATE_ACCELERATION_LEN > ( STATE_ACCELERATION_START ) ;
VectorXd accDeviceErr = predicted_std . segment < STATE_ACCELERATION_ERR_LEN > ( STATE_ACCELERATION_ERR_START ) ;
@ -130,6 +128,7 @@ void Localizer::build_live_location(cereal::LiveLocationKalman::Builder& fix) {
Vector3d nans = Vector3d ( NAN , NAN , NAN ) ;
// TODO fill in NED and Calibrated stds
// write measurements to msg
init_measurement ( fix . initPositionGeodetic ( ) , fix_pos_geo_vec , nans , this - > gps_mode ) ;
init_measurement ( fix . initPositionECEF ( ) , fix_ecef , fix_ecef_std , this - > gps_mode ) ;
@ -139,7 +138,7 @@ void Localizer::build_live_location(cereal::LiveLocationKalman::Builder& fix) {
init_measurement ( fix . initAccelerationDevice ( ) , accDevice , accDeviceErr , true ) ;
init_measurement ( fix . initOrientationECEF ( ) , orientation_ecef , orientation_ecef_std , this - > gps_mode ) ;
init_measurement ( fix . initCalibratedOrientationECEF ( ) , calibrated_orientation_ecef , nans , this - > calibrated & & this - > gps_mode ) ;
init_measurement ( fix . initOrientationNED ( ) , orientation_ned , nans , this - > gps_mode ) ;
init_measurement ( fix . initOrientationNED ( ) , orientation_ned , orie nt atio n_ned_ std , this - > gps_mode ) ;
init_measurement ( fix . initCalibratedOrientationNED ( ) , calibrated_orientation_ned , nans , this - > calibrated & & this - > gps_mode ) ;
init_measurement ( fix . initAngularVelocityDevice ( ) , angVelocityDevice , angVelocityDeviceErr , true ) ;
init_measurement ( fix . initVelocityCalibrated ( ) , vel_calib , vel_calib_std , this - > calibrated ) ;