From acdf4a226f000f74b50cfa480e0994a69521ae1b Mon Sep 17 00:00:00 2001 From: Robert Lefebvre Date: Thu, 14 May 2015 21:04:41 -0400 Subject: [PATCH] Copter: RCMAP Fix, remove RC_Channel references from AP_Motors objects. And a few function renaming to follow changes in AP_Motors. Also add new throttle channel setter functionality. Remove RC7 object from Tricopter. Add special Tricopter param handling. --- ArduCopter/ArduCopter.pde | 13 ++++++++----- ArduCopter/Log.pde | 8 ++++---- ArduCopter/Parameters.pde | 5 +++++ ArduCopter/land_detector.pde | 2 +- ArduCopter/radio.pde | 2 +- 5 files changed, 19 insertions(+), 11 deletions(-) diff --git a/ArduCopter/ArduCopter.pde b/ArduCopter/ArduCopter.pde index 5c50c8f3bf..0ac8b04bce 100644 --- a/ArduCopter/ArduCopter.pde +++ b/ArduCopter/ArduCopter.pde @@ -428,15 +428,15 @@ static struct { #endif #if FRAME_CONFIG == HELI_FRAME // helicopter constructor requires more arguments -static MOTOR_CLASS motors(*channel_roll, *channel_pitch, *channel_throttle, *channel_yaw, g.rc_7, g.rc_8, g.heli_servo_1, g.heli_servo_2, g.heli_servo_3, g.heli_servo_4, MAIN_LOOP_RATE); +static MOTOR_CLASS motors(g.rc_7, g.rc_8, g.heli_servo_1, g.heli_servo_2, g.heli_servo_3, g.heli_servo_4, MAIN_LOOP_RATE); #elif FRAME_CONFIG == TRI_FRAME // tri constructor requires additional rc_7 argument to allow tail servo reversing -static MOTOR_CLASS motors(*channel_roll, *channel_pitch, *channel_throttle, *channel_yaw, g.rc_7, MAIN_LOOP_RATE); +static MOTOR_CLASS motors(MAIN_LOOP_RATE); #elif FRAME_CONFIG == SINGLE_FRAME // single constructor requires extra servos for flaps -static MOTOR_CLASS motors(*channel_roll, *channel_pitch, *channel_throttle, *channel_yaw, g.single_servo_1, g.single_servo_2, g.single_servo_3, g.single_servo_4, MAIN_LOOP_RATE); +static MOTOR_CLASS motors(g.single_servo_1, g.single_servo_2, g.single_servo_3, g.single_servo_4, MAIN_LOOP_RATE); #elif FRAME_CONFIG == COAX_FRAME // single constructor requires extra servos for flaps -static MOTOR_CLASS motors(*channel_roll, *channel_pitch, *channel_throttle, *channel_yaw, g.single_servo_1, g.single_servo_2, MAIN_LOOP_RATE); +static MOTOR_CLASS motors(g.single_servo_1, g.single_servo_2, MAIN_LOOP_RATE); #else -static MOTOR_CLASS motors(*channel_roll, *channel_pitch, *channel_throttle, *channel_yaw, MAIN_LOOP_RATE); +static MOTOR_CLASS motors(MAIN_LOOP_RATE); #endif //////////////////////////////////////////////////////////////////////////////// @@ -1065,6 +1065,9 @@ static void one_hz_loop() // check the user hasn't updated the frame orientation motors.set_frame_orientation(g.frame_orientation); + + // set all throttle channel settings + motors.set_throttle_range(g.throttle_min, channel_throttle->radio_min, channel_throttle->radio_max); } // update assigned functions and enable auxiliar servos diff --git a/ArduCopter/Log.pde b/ArduCopter/Log.pde index 51fab8e9fa..4409f32070 100644 --- a/ArduCopter/Log.pde +++ b/ArduCopter/Log.pde @@ -411,16 +411,16 @@ static void Log_Write_Rate() time_ms : hal.scheduler->millis(), control_roll : (float)rate_targets.x, roll : (float)(ahrs.get_gyro().x * AC_ATTITUDE_CONTROL_DEGX100), - roll_out : (float)(motors.get_roll()), + roll_out : (motors.get_roll()), control_pitch : (float)rate_targets.y, pitch : (float)(ahrs.get_gyro().y * AC_ATTITUDE_CONTROL_DEGX100), - pitch_out : (float)(motors.get_pitch()), + pitch_out : (motors.get_pitch()), control_yaw : (float)rate_targets.z, yaw : (float)(ahrs.get_gyro().z * AC_ATTITUDE_CONTROL_DEGX100), - yaw_out : (float)(motors.get_yaw()), + yaw_out : (motors.get_yaw()), control_accel : (float)accel_target.z, accel : (float)(-(ahrs.get_accel_ef_blended().z + GRAVITY_MSS) * 100.0f), - accel_out : (float)(motors.get_throttle_out()) + accel_out : (motors.get_throttle()) }; DataFlash.WriteBlock(&pkt_rate, sizeof(pkt_rate)); } diff --git a/ArduCopter/Parameters.pde b/ArduCopter/Parameters.pde index afb5e10255..5250b29e66 100644 --- a/ArduCopter/Parameters.pde +++ b/ArduCopter/Parameters.pde @@ -976,6 +976,11 @@ const AP_Param::Info var_info[] PROGMEM = { // @Path: ../libraries/AP_Motors/AP_MotorsCoax.cpp GOBJECT(motors, "MOT_", AP_MotorsCoax), +#elif FRAME_CONFIG == TRI_FRAME + // @Group: MOT_ + // @Path: ../libraries/AP_Motors/AP_MotorsTri.cpp + GOBJECT(motors, "MOT_", AP_MotorsTri), + #else // @Group: MOT_ // @Path: ../libraries/AP_Motors/AP_Motors_Class.cpp diff --git a/ArduCopter/land_detector.pde b/ArduCopter/land_detector.pde index 76571f92c5..6f7d0ba5ea 100644 --- a/ArduCopter/land_detector.pde +++ b/ArduCopter/land_detector.pde @@ -46,7 +46,7 @@ static void update_land_detector() // we've sensed movement up or down so reset land_detector land_detector = 0; // if throttle output is high then clear landing flag - if (motors.get_throttle_out() > get_non_takeoff_throttle()) { + if (motors.get_throttle() > get_non_takeoff_throttle()) { set_land_complete(false); } } diff --git a/ArduCopter/radio.pde b/ArduCopter/radio.pde index 13d0bb9bd8..de6bab0030 100644 --- a/ArduCopter/radio.pde +++ b/ArduCopter/radio.pde @@ -54,7 +54,7 @@ static void init_rc_out() motors.set_update_rate(g.rc_speed); motors.set_frame_orientation(g.frame_orientation); motors.Init(); // motor initialisation - motors.set_min_throttle(g.throttle_min); + motors.set_throttle_range(g.throttle_min, channel_throttle->radio_min, channel_throttle->radio_max); for(uint8_t i = 0; i < 5; i++) { delay(20);