diff --git a/quad/src/quad_app/control_algorithm.c b/quad/src/quad_app/control_algorithm.c index dd9425b65eb10112924773042dc7088df79f3369..22b822f80919ab18c96297fe83b71ec137eefe48 100644 --- a/quad/src/quad_app/control_algorithm.c +++ b/quad/src/quad_app/control_algorithm.c @@ -15,6 +15,8 @@ //#define USE_LIDAR +#define PX4FLOW_QUAL_MIN (100) + #define ROLL_PITCH_MAX_ANGLE 0.35 // 20 degrees #define PWM_DIFF_BOUNDS 20000 #define VRPN_REFRESH_TIME 0.01f // 10ms @@ -352,6 +354,7 @@ int control_algorithm_init(parameter_t * ps) graph_set_param_val(graph, ps->pos_time, CONST_SET, VRPN_REFRESH_TIME * (current_vrpn_id - last_vrpn_id)); last_vrpn_id = current_vrpn_id; } + // Loop time graph_set_param_val(graph, ps->angle_time, CONST_SET, get_last_loop_time()); @@ -363,6 +366,12 @@ int control_algorithm_init(parameter_t * ps) graph_set_param_val(graph, ps->gyro_x, CONST_SET, sensor_struct->gyr_x); graph_set_param_val(graph, ps->gyro_z, CONST_SET, sensor_struct->gyr_z); graph_set_param_val(graph, ps->lidar, CONST_SET, sensor_struct->lidar_altitude); + graph_set_param_val(graph, ps->flow_quality, CONST_SET, sensor_struct->optical_flow.quality); + //As per documentation, disregard frames with low quality, as they contain unreliable data + if (sensor_struct->optical_flow.quality >= PX4FLOW_QUAL_MIN) { + graph_set_param_val(graph, ps->flow_vel_x, CONST_SET, sensor_struct->optical_flow.xVel); + graph_set_param_val(graph, ps->flow_vel_y, CONST_SET, sensor_struct->optical_flow.yVel); + } // RC values graph_set_param_val(graph, ps->rc_pitch, CONST_SET, user_input_struct->pitch_angle_manual_setpoint); @@ -371,8 +380,9 @@ int control_algorithm_init(parameter_t * ps) graph_set_param_val(graph, ps->rc_throttle, CONST_SET, user_input_struct->rc_commands[THROTTLE]); // Compute VRPN blocks so they can be logged - int outputs[5] = {ps->mixer, ps->vrpn_alt, ps->vrpn_pitch, ps->vrpn_roll, ps->lidar}; - graph_compute_nodes(graph, outputs, 5); + int outputs[8] = {ps->mixer, ps->vrpn_alt, ps->vrpn_pitch, ps->vrpn_roll, ps->lidar, + ps->flow_quality, ps->flow_vel_x, ps->flow_vel_y}; + graph_compute_nodes(graph, outputs, 8); // here for now so in case any flight command is not PID controlled, it will default to rc_command value: //memcpy(raw_actuator_struct->controller_corrected_motor_commands, user_input_struct->rc_commands, sizeof(int) * 6); diff --git a/quad/src/quad_app/iic_utils.c b/quad/src/quad_app/iic_utils.c index 02d21cc83c4421c99da73301500811002c1f7020..f6b09b5b13ce93ebce27cca67e9300c593c4ae4b 100644 --- a/quad/src/quad_app/iic_utils.c +++ b/quad/src/quad_app/iic_utils.c @@ -313,7 +313,6 @@ int iic0_px4flow_update(px4flow_t *of) { //Copy into struct memcpy(&i2cFrame, buf, sizeof(i2cFrame)); - //As per documentation, disregard frames with low quality, as they contain unreliable data of->xVel = i2cFrame.flowCompX / 1000.; of->yVel = i2cFrame.flowCompY / 1000.; of->quality = i2cFrame.qual; diff --git a/quad/src/quad_app/iic_utils.h b/quad/src/quad_app/iic_utils.h index d0af4394d11a6c3ed7f211ea773612b8ad95e8fe..59ad8ed7c73580004717c6c9f4eaaffe14f3be5e 100644 --- a/quad/src/quad_app/iic_utils.h +++ b/quad/src/quad_app/iic_utils.h @@ -134,7 +134,6 @@ int iic0_lidarlite_sleep(); //////////////////////////////////////////////////////////////////////////////////////////// #define PX4FLOW_DEVICE_ADDR 0x42 -#define PX4FLOW_QUAL_MIN (100) int iic0_px4flow_write(u8 register_addr, u8 data); diff --git a/quad/src/quad_app/log_data.c b/quad/src/quad_app/log_data.c index bdc38f0eeb05714f73d334ea492ee8c6311abf21..92019f3efd502857fea0c20080000ed620743766 100644 --- a/quad/src/quad_app/log_data.c +++ b/quad/src/quad_app/log_data.c @@ -114,6 +114,9 @@ void initialize_logging(log_t* log_struct, parameter_t* ps) { addOutputToLog(log_struct, ps->vrpn_pitch, CONST_VAL, rad); addOutputToLog(log_struct, ps->vrpn_roll, CONST_VAL, rad); addOutputToLog(log_struct, ps->lidar, CONST_VAL, m); + addOutputToLog(log_struct, ps->flow_vel_x, CONST_VAL, m_s); + addOutputToLog(log_struct, ps->flow_vel_y, CONST_VAL, m_s); + addOutputToLog(log_struct, ps->flow_quality, CONST_VAL, "none"); addOutputToLog(log_struct, ps->x_set, CONST_VAL, m); addOutputToLog(log_struct, ps->y_set, CONST_VAL, m); addOutputToLog(log_struct, ps->alt_set, CONST_VAL, m);