iNavFlight / inav

INAV: Navigation-enabled flight control software
https://inavflight.github.io
GNU General Public License v3.0
3.18k stars 1.48k forks source link

Version 1.7.3 3D mode Arming Not Working Properly #2120

Closed KenImhof closed 4 years ago

KenImhof commented 7 years ago

In version 1.7.3 the FC will not arm unless the throttle stick is at mid-throttle when arming occurs . In all previous versions if the FC is armed at low throttle the motors will start to spin when center stick is reached. In 1.7.3 if the FC is armed at low throttle they will not start to spin when mid-throttle is reached.

digitalentity commented 7 years ago

Config dump?

KenImhof commented 7 years ago

dump

version

INAV/OMNIBUSF4V3 1.7.3 Sep 9 2017 / 10:37:25 (974440df)

resources

mixer

mixer QUADX

mmix reset

servo

servo 0 1000 2000 1500 100 -1 servo 1 1000 2000 1500 100 -1 servo 2 1000 2000 1500 100 -1 servo 3 1000 2000 1500 100 -1 servo 4 1000 2000 1500 100 -1 servo 5 1000 2000 1500 100 -1 servo 6 1000 2000 1500 100 -1 servo 7 1000 2000 1500 100 -1

servo mix

smix reset

feature

feature -RX_PPM feature -VBAT feature -RX_SERIAL feature -MOTOR_STOP feature -SERVO_TILT feature -SOFTSERIAL feature -GPS feature -TELEMETRY feature -CURRENT_METER feature -3D feature -RX_PARALLEL_PWM feature -RX_MSP feature -RSSI_ADC feature -LED_STRIP feature -DASHBOARD feature -BLACKBOX feature -CHANNEL_FORWARDING feature -TRANSPONDER feature -AIRMODE feature -SUPEREXPO feature -VTX feature -RX_SPI feature -SOFTSPI feature -PWM_SERVO_DRIVER feature -PWM_OUTPUT_ENABLE feature -OSD feature VBAT feature RX_SERIAL feature GPS feature 3D feature PWM_OUTPUT_ENABLE

beeper

beeper RUNTIME_CALIBRATION beeper HW_FAILURE beeper RX_LOST beeper RX_LOST_LANDING beeper DISARMING beeper ARMING beeper ARMING_GPS_FIX beeper BAT_CRIT_LOW beeper BAT_LOW beeper GPS_STATUS beeper RX_SET beeper ACTION_SUCCESS beeper ACTION_FAIL beeper READY_BEEP beeper MULTI_BEEPS beeper DISARM_REPEAT beeper ARMED beeper SYSTEM_INIT beeper ON_USB beeper LAUNCH_MODE

map

map TAER1234

name

name -

serial

serial 20 1 115200 38400 0 115200 serial 0 64 115200 38400 0 115200 serial 2 0 115200 38400 0 115200 serial 5 2 115200 115200 0 115200

led

led 0 0,0::C:0 led 1 0,0::C:0 led 2 0,0::C:0 led 3 0,0::C:0 led 4 0,0::C:0 led 5 0,0::C:0 led 6 0,0::C:0 led 7 0,0::C:0 led 8 0,0::C:0 led 9 0,0::C:0 led 10 0,0::C:0 led 11 0,0::C:0 led 12 0,0::C:0 led 13 0,0::C:0 led 14 0,0::C:0 led 15 0,0::C:0 led 16 0,0::C:0 led 17 0,0::C:0 led 18 0,0::C:0 led 19 0,0::C:0 led 20 0,0::C:0 led 21 0,0::C:0 led 22 0,0::C:0 led 23 0,0::C:0 led 24 0,0::C:0 led 25 0,0::C:0 led 26 0,0::C:0 led 27 0,0::C:0 led 28 0,0::C:0 led 29 0,0::C:0 led 30 0,0::C:0 led 31 0,0::C:0

color

color 0 0,0,0 color 1 0,255,255 color 2 0,0,255 color 3 30,0,255 color 4 60,0,255 color 5 90,0,255 color 6 120,0,255 color 7 150,0,255 color 8 180,0,255 color 9 210,0,255 color 10 240,0,255 color 11 270,0,255 color 12 300,0,255 color 13 330,0,255 color 14 0,0,0 color 15 0,0,0

mode_color

mode_color 0 0 1 mode_color 0 1 11 mode_color 0 2 2 mode_color 0 3 13 mode_color 0 4 10 mode_color 0 5 3 mode_color 1 0 5 mode_color 1 1 11 mode_color 1 2 3 mode_color 1 3 13 mode_color 1 4 10 mode_color 1 5 3 mode_color 2 0 10 mode_color 2 1 11 mode_color 2 2 4 mode_color 2 3 13 mode_color 2 4 10 mode_color 2 5 3 mode_color 3 0 8 mode_color 3 1 11 mode_color 3 2 4 mode_color 3 3 13 mode_color 3 4 10 mode_color 3 5 3 mode_color 4 0 7 mode_color 4 1 11 mode_color 4 2 3 mode_color 4 3 13 mode_color 4 4 10 mode_color 4 5 3 mode_color 5 0 9 mode_color 5 1 11 mode_color 5 2 2 mode_color 5 3 13 mode_color 5 4 10 mode_color 5 5 3 mode_color 6 0 6 mode_color 6 1 10 mode_color 6 2 1 mode_color 6 3 0 mode_color 6 4 0 mode_color 6 5 2 mode_color 6 6 3 mode_color 6 7 6 mode_color 6 8 0 mode_color 6 9 0 mode_color 6 10 0

aux

aux 0 0 2 1050 1275 aux 1 3 1 1675 2025 aux 2 9 1 1675 2000 aux 3 0 0 900 900 aux 4 0 0 900 900 aux 5 0 0 900 900 aux 6 0 0 900 900 aux 7 0 0 900 900 aux 8 0 0 900 900 aux 9 0 0 900 900 aux 10 0 0 900 900 aux 11 0 0 900 900 aux 12 0 0 900 900 aux 13 0 0 900 900 aux 14 0 0 900 900 aux 15 0 0 900 900 aux 16 0 0 900 900 aux 17 0 0 900 900 aux 18 0 0 900 900 aux 19 0 0 900 900

adjrange

adjrange 0 0 0 900 900 0 0 adjrange 1 0 0 900 900 0 0 adjrange 2 0 0 900 900 0 0 adjrange 3 0 0 900 900 0 0 adjrange 4 0 0 900 900 0 0 adjrange 5 0 0 900 900 0 0 adjrange 6 0 0 900 900 0 0 adjrange 7 0 0 900 900 0 0 adjrange 8 0 0 900 900 0 0 adjrange 9 0 0 900 900 0 0 adjrange 10 0 0 900 900 0 0 adjrange 11 0 0 900 900 0 0

rxrange

rxrange 0 1000 2000 rxrange 1 1000 2000 rxrange 2 1000 2000 rxrange 3 1000 2000

master

set looptime = 250 set gyro_sync = OFF set gyro_sync_denom = 2 set align_gyro = DEFAULT set gyro_hardware_lpf = 256HZ set gyro_lpf_hz = 60 set moron_threshold = 32 set gyro_notch1_hz = 0 set gyro_notch1_cutoff = 1 set gyro_notch2_hz = 0 set gyro_notch2_cutoff = 1 set vbat_adc_channel = 2 set rssi_adc_channel = 3 set current_adc_channel = 1 set airspeed_adc_channel = 0 set acc_notch_hz = 0 set acc_notch_cutoff = 1 set align_acc = DEFAULT set acc_hardware = MPU6000 set acc_lpf_hz = 15 set acczero_x = 200 set acczero_y = -50 set acczero_z = -221 set accgain_x = 4089 set accgain_y = 4155 set accgain_z = 4044 set rangefinder_hardware = NONE set align_mag = CW270FLIP set mag_hardware = HMC5883 set mag_declination = 0 set magzero_x = 81 set magzero_y = -59 set magzero_z = -115 set mag_calibration_time = 30 set baro_hardware = BMP280 set baro_use_median_filter = ON set pitot_hardware = NONE set pitot_use_median_filter = ON set pitot_noise_lpf = 0.600 set pitot_scale = 1.000 set mid_rc = 1500 set min_check = 1100 set max_check = 1900 set rssi_channel = 0 set rssi_scale = 30 set rssi_invert = OFF set rc_smoothing = ON set serialrx_provider = SPEK2048 set sbus_inversion = ON set rx_spi_rf_channel_count = 0 set spektrum_sat_bind = 0 set rx_min_usec = 885 set rx_max_usec = 2115 set serialrx_halfduplex = OFF set blackbox_rate_num = 1 set blackbox_rate_denom = 1 set blackbox_device = SDCARD set sdcard_detect_inverted = ON set min_throttle = 1000 set max_throttle = 2000 set min_command = 1000 set motor_pwm_rate = 4000 set motor_pwm_protocol = ONESHOT42 set failsafe_delay = 5 set failsafe_recovery_delay = 5 set failsafe_off_delay = 200 set failsafe_throttle = 1000 set failsafe_throttle_low_delay = 100 set failsafe_procedure = RTH set failsafe_stick_threshold = 50 set failsafe_fw_roll_angle = -200 set failsafe_fw_pitch_angle = 100 set failsafe_fw_yaw_rate = -45 set align_board_roll = 0 set align_board_pitch = 0 set align_board_yaw = 0 set gimbal_mode = NORMAL set battery_capacity = 0 set vbat_scale = 110 set vbat_max_cell_voltage = 43 set vbat_min_cell_voltage = 33 set vbat_warning_cell_voltage = 35 set current_meter_scale = 400 set current_meter_offset = 0 set multiwii_current_meter_output = OFF set current_meter_type = ADC set yaw_motor_direction = 1 set yaw_jump_prevention_limit = 200 set 3d_deadband_low = 1406 set 3d_deadband_high = 1514 set 3d_neutral = 1460 set servo_center_pulse = 1500 set servo_pwm_rate = 50 set servo_lpf_hz = 20 set flaperon_throw_offset = 200 set tri_unarmed_servo = ON set reboot_character = 82 set imu_dcm_kp = 2500 set imu_dcm_ki = 50 set imu_dcm_kp_mag = 10000 set imu_dcm_ki_mag = 0 set small_angle = 25 set fixed_wing_auto_arm = OFF set disarm_kill_switch = ON set auto_disarm_delay = 5 set gps_provider = UBLOX set gps_sbas_mode = NONE set gps_dyn_model = AIR_1G set gps_auto_config = ON set gps_auto_baud = ON set gps_min_sats = 6 set deadband = 5 set yaw_deadband = 5 set pos_hold_deadband = 20 set alt_hold_deadband = 50 set 3d_deadband_throttle = 50 set fw_autotune_overshoot_time = 100 set fw_autotune_undershoot_time = 200 set fw_autotune_threshold = 50 set fw_autotune_ff_to_p_gain = 10 set fw_autotune_ff_to_i_tc = 600 set inav_auto_mag_decl = ON set inav_gravity_cal_tolerance = 5 set inav_use_gps_velned = ON set inav_gps_delay = 200 set inav_reset_altitude = FIRST_ARM set inav_max_surface_altitude = 200 set inav_w_z_surface_p = 3.500 set inav_w_z_surface_v = 6.100 set inav_w_z_baro_p = 0.350 set inav_w_z_gps_p = 0.200 set inav_w_z_gps_v = 0.500 set inav_w_xy_gps_p = 1.000 set inav_w_xy_gps_v = 2.000 set inav_w_z_res_v = 0.500 set inav_w_xy_res_v = 0.500 set inav_w_acc_bias = 0.010 set inav_max_eph_epv = 1000.000 set inav_baro_epv = 100.000 set nav_disarm_on_landing = OFF set nav_use_midthr_for_althold = OFF set nav_extra_arming_safety = ON set nav_user_control_mode = ATTI set nav_position_timeout = 5 set nav_wp_radius = 100 set nav_wp_safe_distance = 10000 set nav_auto_speed = 300 set nav_auto_climb_rate = 500 set nav_manual_speed = 500 set nav_manual_climb_rate = 200 set nav_landing_speed = 200 set nav_land_slowdown_minalt = 500 set nav_land_slowdown_maxalt = 2000 set nav_emerg_landing_speed = 500 set nav_min_rth_distance = 500 set nav_rth_climb_first = ON set nav_rth_climb_ignore_emerg = OFF set nav_rth_tail_first = OFF set nav_rth_allow_landing = ON set nav_rth_alt_mode = AT_LEAST set nav_rth_abort_threshold = 50000 set nav_rth_altitude = 1000 set nav_mc_bank_angle = 30 set nav_mc_hover_thr = 1500 set nav_mc_auto_disarm_delay = 2000 set nav_fw_cruise_thr = 1400 set nav_fw_min_thr = 1200 set nav_fw_max_thr = 1700 set nav_fw_bank_angle = 20 set nav_fw_climb_angle = 20 set nav_fw_dive_angle = 15 set nav_fw_pitch2thr = 10 set nav_fw_loiter_radius = 5000 set nav_fw_land_dive_angle = 2 set nav_fw_launch_velocity = 300 set nav_fw_launch_accel = 1863 set nav_fw_launch_max_angle = 45 set nav_fw_launch_detect_time = 40 set nav_fw_launch_thr = 1700 set nav_fw_launch_idle_thr = 1000 set nav_fw_launch_motor_delay = 500 set nav_fw_launch_spinup_time = 100 set nav_fw_launch_timeout = 5000 set nav_fw_launch_climb_angle = 18 set telemetry_switch = OFF set telemetry_inversion = OFF set frsky_default_latitude = 0.000 set frsky_default_longitude = 0.000 set frsky_coordinates_format = 0 set frsky_unit = METRIC set frsky_vfas_precision = 0 set frsky_vfas_cell_voltage = OFF set hott_alarm_sound_interval = 5 set smartport_uart_unidir = OFF set smartport_fuel_percent = OFF set ibus_telemetry_type = 0 set ltm_update_rate = NORMAL set ledstrip_visual_beeper = OFF set osd_video_system = 0 set osd_row_shiftdown = 0 set osd_units = IMPERIAL set osd_rssi_alarm = 152 set osd_cap_alarm = 10 set osd_time_alarm = 100 set osd_alt_alarm = 0 set osd_main_voltage_pos = 2060 set osd_rssi_pos = 2071 set osd_flytimer_pos = 2423 set osd_ontime_pos = 2391 set osd_flymode_pos = 2444 set osd_throttle_pos = 2113 set osd_vtx_channel_pos = 200 set osd_crosshairs = 0 set osd_artificial_horizon = 2248 set osd_current_draw_pos = 2145 set osd_mah_drawn_pos = 2177 set osd_craft_name_pos = 84 set osd_gps_speed_pos = 55 set osd_gps_sats_pos = 2400 set osd_gps_lon = 402 set osd_gps_lat = 384 set osd_home_dir = 366 set osd_home_dist = 33 set osd_altitude_pos = 2049 set osd_vario = 182 set osd_vario_num = 247 set osd_pid_roll_pos = 322 set osd_pid_pitch_pos = 354 set osd_pid_yaw_pos = 386 set osd_power_pos = 47 set osd_air_speed = 20 set i2c_speed = 400KHZ set debug_mode = NONE set acc_task_frequency = 500 set attitude_task_frequency = 250 set async_mode = NONE set throttle_tilt_comp_str = 0 set input_filtering_mode = OFF set mode_range_logic_operator = OR set stats = OFF set stats_total_time = 0 set stats_total_dist = 0

profile

profile 1

set mc_p_pitch = 40 set mc_i_pitch = 30 set mc_d_pitch = 23 set mc_p_roll = 40 set mc_i_roll = 30 set mc_d_roll = 23 set mc_p_yaw = 85 set mc_i_yaw = 45 set mc_d_yaw = 0 set mc_p_level = 20 set mc_i_level = 15 set mc_d_level = 75 set fw_p_pitch = 5 set fw_i_pitch = 7 set fw_ff_pitch = 50 set fw_p_roll = 5 set fw_i_roll = 7 set fw_ff_roll = 50 set fw_p_yaw = 6 set fw_i_yaw = 10 set fw_ff_yaw = 60 set fw_p_level = 20 set fw_i_level = 5 set fw_d_level = 75 set max_angle_inclination_rll = 300 set max_angle_inclination_pit = 300 set dterm_lpf_hz = 40 set yaw_lpf_hz = 30 set dterm_setpoint_weight = 0.000 set fw_iterm_throw_limit = 165 set fw_reference_airspeed = 1000.000 set fw_turn_assist_yaw_gain = 1.000 set dterm_notch_hz = 0 set dterm_notch_cutoff = 1 set pidsum_limit = 500 set yaw_p_limit = 300 set iterm_ignore_threshold = 200 set yaw_iterm_ignore_threshold = 50 set rate_accel_limit_roll_pitch = 0 set rate_accel_limit_yaw = 10000 set heading_hold_rate_limit = 90 set nav_mc_pos_z_p = 50 set nav_mc_pos_z_i = 0 set nav_mc_pos_z_d = 0 set nav_mc_vel_z_p = 100 set nav_mc_vel_z_i = 50 set nav_mc_vel_z_d = 10 set nav_mc_pos_xy_p = 65 set nav_mc_pos_xy_i = 120 set nav_mc_pos_xy_d = 10 set nav_mc_vel_xy_p = 180 set nav_mc_vel_xy_i = 15 set nav_mc_vel_xy_d = 100 set nav_fw_pos_z_p = 50 set nav_fw_pos_z_i = 0 set nav_fw_pos_z_d = 0 set nav_fw_pos_xy_p = 75 set nav_fw_pos_xy_i = 5 set nav_fw_pos_xy_d = 8 set rc_expo = 70 set rc_yaw_expo = 20 set thr_mid = 50 set thr_expo = 0 set roll_rate = 20 set pitch_rate = 20 set yaw_rate = 20 set tpa_rate = 0 set tpa_breakpoint = 1500

KenImhof commented 7 years ago

Appears that this issue is being ignored. Seems to me that the person that removed the fc_core code and broke this feature in the last release should fix this problem. I can certainly add the code back, but I am not sure why it was removed to being with.

fiam commented 7 years ago

We really need a big cleanup of 3D related stuff (like making all NAV modes work with 3D mode). I plan to eventually address it, but got my plate full ATM with OSD related stuff.

KenImhof commented 7 years ago

Hi Fiam,

That would be awesome. Just let me know if I can help. I can certainly do testing and I am in the process of coming up to speed with the iNav code base.

digitalentity commented 7 years ago

@KenImhof the fact that issue is not being addressed immediately does not mean that it is ignored. Not many of us fly 3D mode. If you have found what's causing the bug - please share your findings.

digitalentity commented 7 years ago

@fiam I'm planning a complete overhaul of rcCommand-related stuff to be independent of actual pwm values (for 1.9). All of the code dealing with rcCommand will simply be requesting '75% normal thrustor20% reverse thrust`. We'll solve a lot of 3D-mode related issues in process.

KenImhof commented 7 years ago

Submitted pull request #2433 as this problem also exists in 1.8 RC2.

digitalentity commented 7 years ago

Let's define how arming in 3D mode should work.

KenImhof commented 7 years ago

My opinion is that the switch arming operations should be:

1. The FC should immediately arm when the arm switch is enabled and no disarm flags are set.

2. If the arm switch is enabled and the throttle disarm flag is set the FC should arm when the throttle disarm flag is cleared provided that no other disarm flags are set.

3. If the arm switch is enabled and all disarm flags are subsequently cleared and the throttle disarm flag is NOT the last flag cleared, the arm switch must be toggled to arm the FC.

digitalentity commented 7 years ago

IMO case 2 is unsafe. Imagine this:

  1. You flip the switch, machine doesn't arm.
  2. You forget to disable arming switch and go to pick up the quad.
  3. After you pick up the quad you accidentally move the throttle stich through the center position.
  4. Quad arms and motors start spinning.

I understand that there's too much "ifs" here, but I would prefer to be safe than sorry.

digitalentity commented 7 years ago

I would keep current behavior (only allow arming if throttle is at zero). I guess the real issue here is finding "zero" throttle on a TX without self-centering throttle stick.

Maybe we should consider adding a feedback about zero throttle? Beeper, OSD, LED or something else?

KenImhof commented 7 years ago

Case #2 is how it works in version 1.7.2 and all earlier versions. This is also how it is works in betaflight, cleanflight, madcow, etc…

Since FC only arms when the throttle output is LOW, it should be save. This is critical for 3d arming as LOW throttle is in the center so the typical 3d arming sequence is as follows:

  1. Throttle stick at the bottom (full reverse throttle).

  2. Enable arm switch.

  3. Move throttle stick to the center until the quad arms.

I also incorporated this operation into the last fc_core.c file that was send yesterday.

Thanks,

From: Konstantin Sharlaimov [mailto:notifications@github.com] Sent: Wednesday, November 1, 2017 1:51 AM To: iNavFlight/inav inav@noreply.github.com Cc: Ken Imhof KenImhof@roadrunner.com; Mention mention@noreply.github.com Subject: Re: [iNavFlight/inav] Version 1.7.3 3D mode Arming Not Working Properly (#2120)

IMO case 2 is unsafe. Imagine this:

  1. You flip the switch, machine doesn't arm.
  2. You forget to disable arming switch and go to pick up the quad.
  3. After you pick up the quad you accidentally move the throttle stich through the center position.
  4. Quad arms and motors start spinning.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/iNavFlight/inav/issues/2120#issuecomment-341036352 , or mute the thread https://github.com/notifications/unsubscribe-auth/AcdLc-yWVu39hhYjzencckC6NQYllXUtks5syDDsgaJpZM4PUBai . https://github.com/notifications/beacon/AcdLc9hxDP19i_TnPueum6bzoAz-Selrks5syDDsgaJpZM4PUBai.gif

digitalentity commented 7 years ago

1.7.2 didn't have the sophisticated pre-arming checks. We can simply remove the "sticky non-low throttle" flag for 3D mode.

EDIT: Or simply disable the "Arming switch check" for 3D mode. 1.7.2 didn't have it at all.

KenImhof commented 7 years ago

Submitted pull-request 2449. I was able to simplify the code as I now under that the existing code to clear the ARMING_DISABLED_ARM_SWITCH flag so we can ARM even when the switch is in the disarmed position is okay as the switch arming is also checked at a higher level. The problem with just removing the "sticky non-low throttle" flag for 3D mode is that the FC will arm with throttle high or as other disarm flags are cleared.

DzikuVx commented 4 years ago

arming with Throttle in the middle will stay as arming method for Reversible Motors