|
|
|
@ -216,7 +216,7 @@ static void write_debug_log(const char *msg, float dt, float x_est[2], float y_e
@@ -216,7 +216,7 @@ static void write_debug_log(const char *msg, float dt, float x_est[2], float y_e
|
|
|
|
|
fclose(f); |
|
|
|
|
} |
|
|
|
|
#else |
|
|
|
|
#define write_debug_log(...) |
|
|
|
|
#define write_debug_log(...) |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
@ -380,6 +380,7 @@ int position_estimator_inav_thread_main(int argc, char *argv[])
@@ -380,6 +380,7 @@ int position_estimator_inav_thread_main(int argc, char *argv[])
|
|
|
|
|
orb_advert_t vehicle_global_position_pub = NULL; |
|
|
|
|
|
|
|
|
|
struct position_estimator_inav_params params; |
|
|
|
|
memset(¶ms, 0, sizeof(params)); |
|
|
|
|
struct position_estimator_inav_param_handles pos_inav_param_handles; |
|
|
|
|
/* initialize parameter handles */ |
|
|
|
|
inav_parameters_init(&pos_inav_param_handles); |
|
|
|
@ -595,7 +596,7 @@ int position_estimator_inav_thread_main(int argc, char *argv[])
@@ -595,7 +596,7 @@ int position_estimator_inav_thread_main(int argc, char *argv[])
|
|
|
|
|
flow_gyrospeed[0] = flow.gyro_x_rate_integral/(float)flow.integration_timespan*1000000.0f; |
|
|
|
|
flow_gyrospeed[1] = flow.gyro_y_rate_integral/(float)flow.integration_timespan*1000000.0f; |
|
|
|
|
flow_gyrospeed[2] = flow.gyro_z_rate_integral/(float)flow.integration_timespan*1000000.0f; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//moving average
|
|
|
|
|
if (n_flow >= 100) { |
|
|
|
|
gyro_offset_filtered[0] = flow_gyrospeed_filtered[0] - att_gyrospeed_filtered[0]; |
|
|
|
@ -617,7 +618,7 @@ int position_estimator_inav_thread_main(int argc, char *argv[])
@@ -617,7 +618,7 @@ int position_estimator_inav_thread_main(int argc, char *argv[])
|
|
|
|
|
att_gyrospeed_filtered[2] = (att.yawspeed + n_flow * att_gyrospeed_filtered[2]) / (n_flow + 1); |
|
|
|
|
n_flow++; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*yaw compensation (flow sensor is not in center of rotation) -> params in QGC*/ |
|
|
|
|
yaw_comp[0] = params.flow_module_offset_x * (flow_gyrospeed[2] - gyro_offset_filtered[2]); |
|
|
|
@ -841,7 +842,7 @@ int position_estimator_inav_thread_main(int argc, char *argv[])
@@ -841,7 +842,7 @@ int position_estimator_inav_thread_main(int argc, char *argv[])
|
|
|
|
|
|
|
|
|
|
} else if (t > ref_init_start + ref_init_delay) { |
|
|
|
|
ref_inited = true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* set position estimate to (0, 0, 0), use GPS velocity for XY */ |
|
|
|
|
x_est[0] = 0.0f; |
|
|
|
|
x_est[1] = gps.vel_n_m_s; |
|
|
|
@ -981,7 +982,7 @@ int position_estimator_inav_thread_main(int argc, char *argv[])
@@ -981,7 +982,7 @@ int position_estimator_inav_thread_main(int argc, char *argv[])
|
|
|
|
|
/* use flow if it's valid and (accurate or no GPS available) */ |
|
|
|
|
bool use_flow = flow_valid && (flow_accurate || !use_gps_xy); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool can_estimate_xy = (eph < max_eph_epv) || use_gps_xy || use_flow || use_vision_xy || use_mocap; |
|
|
|
|
|
|
|
|
|
bool dist_bottom_valid = (t < lidar_valid_time + lidar_valid_timeout); |
|
|
|
@ -1147,7 +1148,7 @@ int position_estimator_inav_thread_main(int argc, char *argv[])
@@ -1147,7 +1148,7 @@ int position_estimator_inav_thread_main(int argc, char *argv[])
|
|
|
|
|
if (!(isfinite(z_est[0]) && isfinite(z_est[1]))) { |
|
|
|
|
write_debug_log("BAD ESTIMATE AFTER Z CORRECTION", dt, x_est, y_est, z_est, x_est_prev, y_est_prev, z_est_prev, |
|
|
|
|
acc, corr_gps, w_xy_gps_p, w_xy_gps_v, corr_mocap, w_mocap_p, |
|
|
|
|
corr_vision, w_xy_vision_p, w_z_vision_p, w_xy_vision_v);
|
|
|
|
|
corr_vision, w_xy_vision_p, w_z_vision_p, w_xy_vision_v); |
|
|
|
|
memcpy(z_est, z_est_prev, sizeof(z_est)); |
|
|
|
|
memset(corr_gps, 0, sizeof(corr_gps)); |
|
|
|
|
memset(corr_vision, 0, sizeof(corr_vision)); |
|
|
|
@ -1274,7 +1275,7 @@ int position_estimator_inav_thread_main(int argc, char *argv[])
@@ -1274,7 +1275,7 @@ int position_estimator_inav_thread_main(int argc, char *argv[])
|
|
|
|
|
buf_ptr = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* publish local position */ |
|
|
|
|
local_pos.xy_valid = can_estimate_xy; |
|
|
|
|
local_pos.v_xy_valid = can_estimate_xy; |
|
|
|
|