Browse Source

Folder structure cleanup, added APM tooltips

QGC4.4
lm 14 years ago
parent
commit
359faf28d4
  1. 216
      files/parameter_tooltips/MAV_AUTOPILOT_ARDUPILOTMEGA-MAV_TYPE_FIXED_WING.txt
  2. 0
      files/parameter_tooltips/MAV_AUTOPILOT_PIXHAWK-MAV_TYPE_FIXED_WING.txt
  3. 0
      files/parameter_tooltips/MAV_AUTOPILOT_PIXHAWK-MAV_TYPE_QUADROTOR.txt
  4. 0
      files/vehicles/Ascent_Park_Glider/ascent-park-glider.skp
  5. 0
      files/vehicles/Multiplex_EasyGlider/multiplex-easyglider.skp
  6. 0
      files/vehicles/Multiplex_TwinStar/multiplex-twinstar.skp
  7. 0
      files/vehicles/Walkera_4G6_Coaxial_Helicopter/walkera-4g6.skp
  8. 20534
      models/cessna.osg
  9. 4
      src/comm/MAVLinkSimulationLink.cc
  10. 2
      src/comm/MAVLinkSimulationMAV.cc
  11. 17
      src/uas/QGCUASParamManager.h
  12. 89
      src/uas/UAS.cc
  13. 4
      src/uas/UAS.h
  14. 6
      src/uas/UASInterface.h
  15. 105
      src/ui/QGCParamWidget.cc
  16. 14
      src/ui/QGCParamWidget.h
  17. 2
      src/ui/uas/UASControlWidget.cc

216
files/parameter_tooltips/MAV_AUTOPILOT_ARDUPILOTMEGA-MAV_TYPE_FIXED_WING.txt

@ -0,0 +1,216 @@
== MAVLink Parameters ==
|| *EEPROM variable name* || *Min* || *Max* || *Default* || *Multiplier* || *Enabled (0 = no, 1 = yes)* || *Comment* ||
||MAH|| || ||1|| || || ||
||CURRENT_ENABLE|| || ||1|| || || ||
||AOA|| || ||1|| || || ||
||MAG_ENABLE|| || ||1|| || || ||
||HDNG2RLL_P||0||5||0.7||1||1||NAV_ROLL_P - Navigation control gains. Tuning values for the navigation control PID loops. The P term is the primary tuning value. This determines how the control deflection varies in proportion to the required correction.||
||HDNG2RLL_I||0||1||0.01||1||1||NAV_ROLL_I - Navigation control gains. Tuning values for the navigation control PID loops. The I term is used to control drift.||
||HDNG2RLL_D||0||1||0.02||1||1||NAV_ROLL_D - Navigation control gains. Tuning values for the navigation control PID loops. The D term is used to control overshoot. Avoid adjusting this term if you are not familiar with tuning PID loops.||
||HDNG2RLL_IMAX||0||3000||500||100||1||NAV_ROLL_INT_MAX_CENTIDEGREE - In Degrees - Maximum control offset due to the integral. This prevents the control output from being overdriven due to a persistent offset (e.g. native flight AoA). If you find this value is insufficient consider adjusting the AOA parameter.||
||RLL2SRV_P||0||5||0.4||1||1||SERVO_ROLL_P - Attitude control gains - Tuning values for the attitude control PID loops. The P term is the primary tuning value. This determines how the control deflection varies in proportion to the required correction.||
||RLL2SRV_I||0||1||0||1||1||SERVO_ROLL_I - Attitude control gains - Tuning values for the attitude control PID loops. The I term is used to help control surfaces settle. This value should normally be kept low.||
||RLL2SRV_D||0||1||0||1||1||SERVO_ROLL_D - Attitude control gains - Tuning values for the attitude control PID loops. The D term is used to control overshoot. Avoid using or adjusting this term if you are not familiar with tuning PID loops. It should normally be zero for most aircraft.||
||RLL2SRV_IMAX||0||3000||500||100||1||SERVO_ROLL_INT_MAX_CENTIDEGREE - In Degrees - Maximum control offset due to the integral. This prevents the control output from being overdriven due to a persistent offset (e.g. crosstracking). Default is 5 degrees.||
||PTCH2SRV_P||0||5||0.6||1||1||SERVO_PITCH_P - Attitude control gains - Tuning values for the attitude control PID loops. The P term is the primary tuning value. This determines how the control deflection varies in proportion to the required correction.||
||PTCH2SRV_I||0||1||0||1||1||SERVO_PITCH_I - Attitude control gains - Tuning values for the attitude control PID loops. The I term is used to help control surfaces settle. This value should normally be kept low.||
||PTCH2SRV_D||0||1||0||1||1||SERVO_PITCH_D - Attitude control gains - Tuning values for the attitude control PID loops. The D term is used to control overshoot. Avoid using or adjusting this term if you are not familiar with tuning PID loops. It should normally be zero for most aircraft.||
||PTCH2SRV_IMAX||0||3000||500||100||1||SERVO_PITCH_INT_MAX_CENTIDEGREE - In Degrees - Maximum control offset due to the integral. This prevents the control output from being overdriven due to a persistent offset (e.g. crosstracking). Default is 5 degrees.||
||ARSPD2PTCH_P||0||5||0.65||1||1||NAV_PITCH_ASP_P - P. I and D terms for pitch adjustments made to maintain airspeed.||
||ARSPD2PTCH_I||0||1||0||1||1||NAV_PITCH_ASP_I - P. I and D terms for pitch adjustments made to maintain airspeed.||
||ARSPD2PTCH_D||0||1||0||1||1||NAV_PITCH_ASP_D - P. I and D terms for pitch adjustments made to maintain airspeed.||
||ARSPD2PTCH_IMA||0||3000||500||100||1||NAV_PITCH_ASP_INT_MAX_CMSEC - In Degrees - Maximum pitch offset due to the integral. This limits the control output from being overdriven due to a persistent offset (eg. inability to maintain the programmed airspeed).||
||YW2SRV_P||0||5||0||1||1||SERVO_YAW_P - P. I and D terms for the YAW control. Note units of this control loop are unusual. PID input is in m/s**2||
||YW2SRV_I||0||1||0||1||1||SERVO_YAW_I - P. I and D terms for the YAW control. Note units of this control loop are unusual. PID input is in m/s**2||
||YW2SRV_D||0||1||0||1||1||SERVO_YAW_D - P. I and D terms for the YAW control. Note units of this control loop are unusual. PID input is in m/s**2||
||YW2SRV_IMAX||0||3000||0||100||1||SERVO_YAW_INT_MAX - Maximum control offset due to the integral. This prevents the control output from being overdriven due to a persistent offset (e.g. crosstracking).||
||ENRGY2THR_P||0||5||0.5||1||1||THROTTLE_TE_P - P. I and D terms for throttle adjustments made to control altitude.||
||ENRGY2THR_I||0||1||0||1||1||THROTTLE_TE_I - P. I and D terms for throttle adjustments made to control altitude.||
||ENRGY2THR_D||0||1||0||1||1||THROTTLE_TE_D - P. I and D terms for throttle adjustments made to control altitude.||
||ENRGY2THR_IMAX||0||100||20||1||1||THROTTLE_TE_INT_MAX - In Percent - Maximum throttle input due to the integral term. This limits the throttle from being overdriven due to a persistent offset (e.g. inability to maintain the programmed altitude).||
||ALT2PTCH_P||0||5||0.65||1||1||NAV_PITCH_ALT_P - P. I and D terms for pitch adjustments made to maintain altitude.||
||ALT2PTCH_I||0||1||0||1||1||NAV_PITCH_ALT_I - P. I and D terms for pitch adjustments made to maintain altitude.||
||ALT2PTCH_D||0||1||0||1||1||NAV_PITCH_ALT_D - P. I and D terms for pitch adjustments made to maintain altitude.||
||ALT2PTCH_IMAX||0||3000||500||100||1||NAV_PITCH_ALT_INT_MAX_CM - In Meters - Maximum pitch offset due to the integral. This limits the control output from being overdriven due to a persistent offset (eg. inability to maintain the programmed altitude).||
||KFF_PTCHCOMP||-3||3||0.2||0.01||1||PITCH_COMP - In Percent - Adds pitch input to compensate for the loss of lift due to roll control.||
||KFF_RDDRMIX||-3||3||0.5||0.01||1||RUDDER_MIX - Roll to yaw mixing. This allows for co-ordinated turns.||
||KFF_PTCH2THR||-3||3||0||1||1||P_TO_T - Pitch to throttle feed-forward gain.||
||KFF_THR2PTCH||-3||3||0||1||1||T_TO_P - Throttle to pitch feed-forward gain.||
||XTRK_GAIN_SC||0||100||100||100||1||XTRACK_GAIN_SCALED - Default value is 1.0 degrees per metre. Values lower than 0.001 will disable crosstrack compensation.||
||ALT_MIX||0||1||1||0.01||1||ALTITUDE_MIX - In Percent - Configures the blend between GPS and pressure altitude. 0 = GPS altitude, 1 = Press alt, 0.5 = half and half, etc.||
||ARSPD_RATIO||0||5||1.9936||1||1||AIRSPEED_RATIO - Adjust AIRSPEED_RATIO in small increments to calibrate the airspeed sensor relative to your GPS. The calculation and default value are optimized for speeds around 12 m/s||
||WP_RADIUS||0||200||30||1||1||WP_RADIUS_DEFAULT - When the user performs a factory reset on the APM, sets the waypoint radius (the radius from a target waypoint within which the APM will consider itself to have arrived at the waypoint) to this value in meters. This is mainly intended to allow users to start using the APM without programming a mission first.||
||WP_LOITER_RAD||0||200||60||1||1||LOITER_RADIUS_DEFAULT - When the user performs a factory reset on the APM, sets the loiter radius (the distance the APM will attempt to maintain from a waypoint while loitering) to this value in meters. This is mainly intended to allow users to start using the APM without programming a mission first.||
||ARSPD_FBW_MIN||5||50||6||1||1||AIRSPEED_FBW_MIN - In m/s - Airspeed corresponding to minimum and maximum throttle in Fly By Wire B mode.||
||ARSPD_FBW_MAX||5||50||22||1||1||AIRSPEED_FBW_MAX - In m/s - Airspeed corresponding to minimum and maximum throttle in Fly By Wire B mode. AIRSPEED_FBW_MAX also sets the maximum airspeed that the cruise airspeed can be ""nudged"" to in AUTO mode when ENABLE_STICK_MIXING is set. In AUTO the cruise airspeed can be increased between AIRSPEED_CRUISE and AIRSPEED_FBW_MAX by positioning the throttle stick in the top 1/2 of its range. Throttle stick in the bottom 1/2 provide regular AUTO control.||
||THR_MIN||0||100||0||1||1||THROTTLE_MIN - The minimum throttle setting to which the autopilot will reduce the throttle while descending. The default is zero, which is suitable for aircraft with a steady power-off glide. Increase this value if your aircraft needs throttle to maintain a stable descent in level flight.||
||THR_MAX||0||100||75||1||1||THROTTLE_MAX - The maximum throttle setting the autopilot will apply. The default is 75%. Reduce this value if your aicraft is overpowered or has complex flight characteristics at high throttle settings.||
||THR_FAILSAFE||0||0||1|| || ||THROTTLE_FAILSAFE - The throttle failsafe allows you to configure a software failsafe activated by a setting on the throttle input channel (channel 3). This can be used to achieve a failsafe override on loss of radio control without having to sacrifice one of your FLIGHT_MODE settings as the throttle failsafe overrides the switch-selected mode. Throttle failsafe is enabled by setting THROTTLE_FAILSAFE to 1.||
||THR_FS_ACTION||0||2||1||1|| ||THROTTLE_FAILSAFE_ACTION - The FAILSAFE_ACTION setting determines what APM will do when throttle failsafe mode is entered while flying in AUTO mode. This is important in order to avoid accidental failsafe behaviour when flying waypoints that take the aircraft temporarily out of radio range. If FAILSAFE_ACTION is 1 when failsafe is entered in AUTO or LOITER modes the aircraft will head for home in RTL mode. If the throttle channel moves back up it will return to AUTO or LOITER mode. The default behavior is to ignore throttle failsafe in AUTO and LOITER modes.||
||TRIM_THROTTLE||0||90||45||1||1||THROTTLE_CRUISE - In Percent - The approximate throttle setting to achieve AIRSPEED_CRUISE in level flight. The default is 45% which is reasonable for a modestly powered aircraft.||
||TRIM_AUTO||0||1||1||1||1||AUTO_TRIM - !ArduPilot Mega can update its trim settings by looking at the radio inputs when switching out of MANUAL mode. This allows you to manually trim your aircraft before switching to an assisted mode but it also means that you should avoid switching out of MANUAL while you have any control stick deflection.||
||FLTMODE_CH||5||8||8||1||1||FLIGHT_MODE_CHANNEL - Flight modes assigned to the control channel, and the input channel that is read for the control mode. Use a servo tester or the !ArduPilotMega_demo test program to check your switch settings. ATTENTION: Some !ArduPilot Mega boards have radio channels marked 0-7 and others have them marked the standard 1-8. The FLIGHT_MODE_CHANNEL option uses channel numbers 1-8 (and defaults to 8). If you only have a three-position switch or just want three modes set your switch to produce 1165, 1425, and 1815 microseconds and configure FLIGHT_MODE 1 & 2, 3 & 4 and 5 & 6 to be the same. This is the default. If you have FLIGHT_MODE_CHANNEL set to 8 (the default) and your control channel connected to input channel 8, the hardware failsafe mode will activate for any control input over 1750ms.||
||FLIGHT_MODE_1||0||14||11||1|| ||FLIGHT_MODE_1 - The following standard flight modes are available: MANUAL = Full manual control via the hardware multiplexer. STABILIZE = Tries to maintain level flight but can be overridden with radio control inputs. FLY_BY_WIRE_A = Autopilot style control via user input with manual throttle. FLY_BY_WIRE_B = Autopilot style control via user input, aispeed controlled with throttle. RTL = Returns to the Home location and then LOITERs at a safe altitude. AUTO = Autonomous flight based on programmed waypoints.||
||FLIGHT_MODE_2||0||14||11||1|| ||FLIGHT_MODE_2||
||FLIGHT_MODE_3||0||14||5||1|| ||FLIGHT_MODE_3||
||FLIGHT_MODE_4||0||14||5||1|| ||FLIGHT_MODE_4||
||FLIGHT_MODE_5||0||14||0||1|| ||FLIGHT_MODE_5||
||FLIGHT_MODE_6||0||14||0||1|| ||FLIGHT_MODE_6||
||RC1_MIN||900||2100||1500||1||1||PWM_RC1_MIN - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit||
||RC1_MAX||900||2100||1500||1||1||PWM_RC1_MAX - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit||
||RC1_TRIM||900||2100||1200||1||1||PWM_RC1_TRIM - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit||
||RC2_MIN||900||2100||1500||1||1||PWM_RC2_MIN - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit||
||RC2_MAX||900||2100||1500||1||1||PWM_RC2_MAX - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit||
||RC2_TRIM||900||2100||1200||1||1||PWM_RC2_TRIM - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit||
||RC3_MIN||900||2100||1500||1||1||PWM_RC3_MIN - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit||
||RC3_MAX||900||2100||1500||1||1||PWM_RC3_MAX - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit ||
||RC3_TRIM||900||2100||1500||1||1||PWM_RC3_TRIM - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit ||
||RC4_MIN||900||2100||1500||1||1||PWM_RC4_MIN - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit ||
||RC4_MAX||900||2100||1500||1||1||PWM_RC4_MAX - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit ||
||RC4_TRIM||900||2100||1200||1||1||PWM_RC4_TRIM - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit ||
||RC5_MIN||900||2100||1500||1||1||PWM_CH5_MIN - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit ||
||RC5_MAX||900||2100||1500||1||1||PWM_CH5_MAX - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit ||
||RC5_MAX||900||2100||1500||1||1||PWM_CH5_MAX - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit ||
||RC5_TRIM||900||2100||1500||1||1||PWM_CH5_TRIM - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit ||
||RC6_MIN||900||2100||1500||1||1||PWM_CH6_MIN - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit ||
||RC6_MAX||900||2100||1500||1||1||PWM_CH6_MAX - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit ||
||RC6_TRIM||900||2100||1500||1||1||PWM_CH6_TRIM - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit ||
||RC7_MIN||900||2100||1500||1||1||PWM_CH7_MIN - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit ||
||RC7_MAX||900||2100||1500||1||1||PWM_CH7_MAX - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit ||
||RC7_TRIM||900||2100||1500||1||1||PWM_CH7_TRIM - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit ||
||RC8_MIN||900||2100||1500||1||1||PWM_CH8_MIN - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit ||
||RC8_MAX||900||2100||1500||1||1||PWM_CH8_MAX - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit ||
||RC8_TRIM||900||2100||1500||1||1||PWM_CH8_TRIM - Radio Settings - all radio settings represent the period of the pulse width modulated signal. Typically 1000 ms is the lower limit, 1500 is neutral, and 2000 is the upper limit ||
||IMU_OFFSET_0||0||0||0|| || ||IMU_OFFSET_0 - IMU Calibration||
||IMU_OFFSET_1||0||0||0|| || ||IMU_OFFSET_1 - IMU Calibration||
||IMU_OFFSET_2||0||0||0|| || ||IMU_OFFSET_2 - IMU Calibration||
||IMU_OFFSET_3||0||0||0|| || ||IMU_OFFSET_3 - IMU Calibration||
||IMU_OFFSET_4||0||0||0|| || ||IMU_OFFSET_4 - IMU Calibration||
||IMU_OFFSET_5||0||0||0|| || ||IMU_OFFSET_5 - IMU Calibration||
||YAW_MODE|| || ||0|| || ||YAW_MODE||
||WP_MODE|| || ||0|| || ||WP_MODE||
||WP_TOTAL||0||255|| ||0|| ||WP_TOTAL||
||WP_INDEX||0||255|| ||0|| ||WP_INDEX||
||CONFIG|| || ||1|| || ||CONFIG_OPTIONS||
||SWITCH_ENABLE||0||1||1||1||1||REVERS_SWITCH_ENABLE - 0 = Off, 1 = On, Enables/Disables physical reverse switches on APM board||
||FIRMWARE_VER|| || ||0|| || ||FIRMWARE_VER||
||LOG_BITMASK||0||65535||334||1||1||LOG_BITMASK||
||TRIM_ELEVON||900||2100||1500||1||1||TRIM_ELEVON||
||THR_FS_VALUE||850||1000||950||1||1||THROTTLE_FS_VALUE - If the throttle failsafe is enabled, THROTTLE_FS_VALUE sets the channel value below which the failsafe engages. The default is 975ms, which is a very low throttle setting. Most transmitters will let you trim the manual throttle position up so that you cannot engage the failsafe with a regular stick movement. Configure your receiver's failsafe setting for the throttle channel to the absolute minimum, and use the !ArduPilotMega_demo program to check that you cannot reach that value with the throttle control. Leave a margin of at least 50 microseconds between the lowest throttle setting and THROTTLE_FS_VALUE.||
||TRIM_ARSPD_CM||500||5000||1200||100||1||AIRSPEED_CRUISE_CM - The speed in metres per second to maintain during cruise. The default is 10m/s, which is a conservative value suitable for relatively small, light aircraft.||
||GND_TEMP||-10||50||28||1||1||GND_TEMP - Ground Temperature||
||AP_OFFSET|| || ||0|| || ||AP_OFFSET||
||TRIM_PITCH_CD|| || ||0|| || ||TRIM_PITCH_CD||
||ALT_HOLD_RTL||0||20000||10000||100||1||ALT_HOLD_HOME_CM - When the user performs a factory reset on the APM. Sets the flag for weather the current altitude or ALT_HOLD_HOME altitude should be used for Return To Launch. Also sets the value of USE_CURRENT_ALT in meters. This is mainly intended to allow users to start using the APM without programming a mission first.||
||XTRK_ANGLE_CD||0||6000||3000||100||1||XTRACK_ENTRY_ANGLE_CENTIDEGREE - Maximum angle used to correct for track following.||
||ROLL_SRV_MAX||0||100||4500||100||0||ROLL_SERVO_MAX_CENTIDEGREE||
||PITCH_SRV_MAX||0||100||4500||100||0||PITCH_SERVO_MAX_CENTIDEGREE||
||RUDER_SRV_MAX||0||100||4500||100||0||RUDDER_SERVO_MAX_CENTIDEGREE||
||LIM_ROLL_CD||0||6000||4500||100||1||HEAD_MAX_CENTIDEGREE - The maximum commanded bank angle in either direction. The default is 45 degrees. Decrease this value if your aircraft is not stable or has difficulty maintaining altitude in a steep bank.||
||LIM_PITCH_MAX||0||6000||1500||100||1||PITCH_MAX_CENTIDEGREE - The maximum commanded pitch up angle. The default is 15 degrees. Care should be taken not to set this value too large, as the aircraft may stall||
||LIM_PITCH_MIN||-6000||0||-2500||100||1||PITCH_MIN_CENTIDEGREE - The maximum commanded pitch down angle. Note that this value must be negative. The default is -25 degrees. Care should be taken not to set this value too large as it may result in overspeeding the aircraft.||
||GND_ALT_CM||0||500000||0||100||1||GND_ALT_CM||
||GND_ABS_PRESS|| || ||0|| || ||GND_ABS_PRESS||
||COMPASS_DEC||-1.57075||1.57075||0||1|| ||COMPASS_DEC - Compass Declination||
||SR0_EXT_STAT||0||50||3||1||1||TELEMETRY_ENABLE Port 0 - Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS||
||SR0_EXTRA1||0||50||10||1||1||TELEMETRY_ENABLE Port 0 - Enable MSG_ATTITUDE||
||SR0_EXTRA2||0||50||3||1||1||TELEMETRY_ENABLE Port 0 - Enable MSG_VFR_HUD||
||SR0_EXTRA3||0||50||3||1||1||TELEMETRY_ENABLE Port 0 - Not currently used||
||SR0_POSITION||0||50||3||1||1||TELEMETRY_ENABLE Port 0 - Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages||
||SR0_RAW_CTRL||0||50||3||1||1||TELEMETRY_ENABLE Port 0 - Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT||
||SR0_RAW_SENS||0||50||3||1||1||TELEMETRY_ENABLE Port 0 - Enable IMU_RAW, GPS_RAW, GPS_STATUS packets||
||SR0_RC_CHAN||0||50||3||1||1||TELEMETRY_ENABLE Port 0 - Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW||
||SR3_EXT_STAT||0||50||0||1||1||TELEMETRY_ENABLE Port 3 - Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS||
||SR3_EXTRA1||0||50||0||1||1||TELEMETRY_ENABLE Port 3 - Enable MSG_ATTITUDE||
||SR3_EXTRA2||0||50||0||1||1||TELEMETRY_ENABLE Port 3 - Enable MSG_VFR_HUD||
||SR3_EXTRA3||0||50||0||1||1||TELEMETRY_ENABLE Port 3 - Not currently used||
||SR3_POSITION||0||50||0||1||1||TELEMETRY_ENABLE Port 3 - Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages||
||SR3_RAW_CTRL||0||50||0||1||1||TELEMETRY_ENABLE Port 3 - Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT||
||SR3_RAW_SENS||0||50||0||1||1||TELEMETRY_ENABLE Port 3 - Enable IMU_RAW, GPS_RAW, GPS_STATUS packets||
||SR3_RC_CHAN||0||50||0||1||1||TELEMETRY_ENABLE Port 3 - Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW||
||MAG_ENABLE||0||1||0||1||1||MAG_ENABLE - 0 = Off, 1 = On, Magnetometer Enable||
||ARSPD_ENABLE||0||1||0||1||1||AIRSPEED_ENABLE - 0 = Off, 1 = On, Airspeed Sensor Enable||
||BATT_CAPACITY||0||10000||1760||1||1||BATTERY_MAH - Battery capacity in mAh||
||BATT_MONITOR||0||4||0||1||1||BATTERY_MONITOR - The value should be set to 0 to disable battery monitoring, 1 to measure cell voltages for a 3 cell lipo, 2 to measure cell voltages for a 4 cell lipo, 3 to measure the total battery voltage (only) on input 1, or 4 to measure total battery voltage on input 1 and current on input 2. ||
||FS_GCS_ENABL||0||1||0||1||1||FS_GCS_ENABLE - 0 = Off, 1 = On, If the GCS heartbeat is lost for 20 seconds, the plane will Return to Launch||
||FS_LONG_ACTN||0||1||0||1||1||FS_LONG_ACTION - 0 = Off, 1 = On, If heartbeat is lost for 20 srconds, the plane will Return to Launch||
||FS_SHORT_ACTN||0||1||0||1||1||FS_SHORT_ACTION - 0 = Off, 1 = On, If heartbeat is lost for 1.5 seconds, the plane will circle until heartbeat is found again or 20 seconds has passed||
||SYSID_MYGCS||0||255||255||1||1||SYSID_MYGCS - The system ID of the GCS||
||SYSID_THISMAV||0||255||1||1||1||SYSID_THISMAV - The system ID of the MAVlink vehicle||
||AOA|| || ||0|| ||
||ACR_PIT_D|| || ||1|| || ||Description coming soon||
||ACR_PIT_I|| || ||1|| || ||Description coming soon||
||ACR_PIT_IMAX|| || ||1|| || ||Description coming soon||
||ACR_PIT_P|| || ||1|| || ||Description coming soon||
||ACR_RLL_D|| || ||1|| || ||Description coming soon||
||ACR_RLL_I|| || ||1|| || ||Description coming soon||
||ACR_RLL_IMAX|| || ||1|| || ||Description coming soon||
||ACR_RLL_P|| || ||1|| || ||Description coming soon||
||ACR_YAW_D|| || ||1|| || ||Description coming soon||
||ACR_YAW_I|| || ||1|| || ||Description coming soon||
||ACR_YAW_IMAX|| || ||1|| || ||Description coming soon||
||ACR_YAW_P|| || ||1|| || ||Description coming soon||
||ESC|| || ||1|| || ||ESC_CALIBRATE_MODE||
||FRAME|| || ||1|| || ||FRAME_ORIENTATION ||
||LOITER_RADIUS|| || ||1|| || ||Description coming soon||
||NAV_LAT_D|| || ||1|| || ||Description coming soon||
||NAV_LAT_I|| || ||1|| || ||Description coming soon||
||NAV_LAT_IMAX|| || ||1|| || ||Description coming soon||
||NAV_LAT_P|| || ||1|| || ||Description coming soon||
||NAV_LON_D|| || ||1|| || ||Description coming soon||
||NAV_LON_I|| || ||1|| || ||Description coming soon||
||NAV_LON_IMAX|| || ||1|| || ||Description coming soon||
||NAV_LON_P|| || ||1|| || ||Description coming soon||
||NAV_WP_D|| || ||1|| || ||Description coming soon||
||NAV_WP_I|| || ||1|| || ||Description coming soon||
||NAV_WP_IMAX|| || ||1|| || ||Description coming soon||
||NAV_WP_P|| || ||1|| || ||Description coming soon||
||PITCH_MAX|| || ||1|| || ||Description coming soon||
||SONAR_ENABLE||0||1||0||1||1||SONAR_ENABLE - 0 = Off, 1 = On, Sonar Enable||
||STB_PIT_D|| || ||1|| || ||Description coming soon||
||STB_PIT_I|| || ||1|| || ||Description coming soon||
||STB_PIT_IMAX|| || ||1|| || ||Description coming soon||
||STB_PIT_P|| || ||1|| || ||Description coming soon||
||STB_RLL_D|| || ||1|| || ||Description coming soon||
||STB_RLL_I|| || ||1|| || ||Description coming soon||
||STB_RLL_IMAX|| || ||1|| || ||Description coming soon||
||STB_RLL_P|| || ||1|| || ||Description coming soon||
||STB_YAW_D|| || ||1|| || ||Description coming soon||
||STB_YAW_I|| || ||1|| || ||Description coming soon||
||STB_YAW_IMAX|| || ||1|| || ||Description coming soon||
||STB_YAW_P|| || ||1|| || ||Description coming soon||
||THR_BAR_D|| || ||1|| || ||Description coming soon||
||THR_BAR_I|| || ||1|| || ||Description coming soon||
||THR_BAR_IMAX|| || ||1|| || ||Description coming soon||
||THR_BAR_P|| || ||1|| || ||Description coming soo||
||THR_SON_D|| || ||1|| || ||Description coming soon||
||THR_SON_I|| || ||1|| || ||Description coming soon||
||THR_SON_IMAX|| || ||1|| || ||Description coming soon||
||THR_SON_P|| || ||1|| || ||Description coming soon||
||WP_MODE|| || ||1|| || ||Description coming soon||
||WP_MUST_INDEX|| || ||1|| || ||Description coming soon||
||XTRACK_ANGLE|| || ||1|| || ||Description coming soon||
||XTRK_GAIN|| || ||1|| || ||Description coming soon||
||ARSPD_OFFSET|| || ||0|| || ||Description coming soon||
||ELEVON_CH1_REV||0||1||0||1||1||ELEVON_CHANNEL1_REVERSE - Channel Reversing (Future use on APM board 2.0) - Does not override dip switches||
||ELEVON_CH2_REV||0||1||0||1||1||ELEVON_CHANNEL2_REVERSE - Channel Reversing (Future use on APM board 2.0) - Does not override dip switches||
||ELEVON_MIXING||0||1||0||1||1||ELEVON_MIXING - 0 = Disabled, 1 = Enabled||
||ELEVON_REVERSE||0||1||0||1||1||ELEVON_REVERSE - Channel Reversing (Future use on APM board 2.0) - Does not override dip switches||
||INVERTEDFLT_CH||0||8||0||1||1||INVERTED_FLIGHT_CHANNEL - Channel to select inverted flight mode, 0 = Disabled||
||RC1_REV||0||1||1||1||1||RC_CHANNEL1_REVERSE - Channel Reversing (Future use on APM board 2.0) - Does not override dip switches||
||RC2_REV||0||1||1||1||1||RC_CHANNEL2_REVERSE - Channel Reversing (Future use on APM board 2.0) - Does not override dip switches||
||RC3_REV||0||1||1||1||1||RC_CHANNEL3_REVERSE - Channel Reversing (Future use on APM board 2.0) - Does not override dip switches||
||RC4_REV||0||1||1||1||1||RC_CHANNEL4_REVERSE - Channel Reversing (Future use on APM board 2.0) - Does not override dip switches||
||RC5_REV||0||1||1||1||1||RC_CHANNEL5_REVERSE - Channel Reversing (Future use on APM board 2.0) - Does not override dip switches||
||RC6_REV||0||1||1||1||1||RC_CHANNEL6_REVERSE - Channel Reversing (Future use on APM board 2.0) - Does not override dip switches||
||RC7_REV||0||1||1||1||1||RC_CHANNEL7_REVERSE - Channel Reversing (Future use on APM board 2.0) - Does not override dip switches||
||RC8_REV||0||1||1||1||1||RC_CHANNEL8_REVERSE - Channel Reversing (Future use on APM board 2.0) - Does not override dip switches||
||SYSID_SW_MREV|| || ||0|| || ||Description coming soon||
||SYSID_SW_TYPE|| || ||0|| || ||Description coming soon||
||THR_SLEWRATE||0||100||0||1||1||THROTTLE_SLEW_RATE - 0 = Disabled, otherwise it limits throttle movement rate. Units are % per second. This is a test feature and may go away.||
||FLTMODE1||0||20||1||1|| ||FLIGHT_MODE_1 - Mode switch setting 1 - APM: 0 = Manual, 2 = Stabilize, 5 - Fly-By-Wire-A, 6 = Fly-By-Wire-B, 7 = Fly-By-Wire-C, 10 = Auto - Mission, 11 = RTL, 12 = Loiter, 13 = Take-off, 14 = Land, 15= Guided; ACM2: 0 = Stabilize, 2 = Acro, 3 = Simple, 4 = Auto, 5 = Guided, 6 = Loiter, 7 = RTL||
||FLTMODE2||0||20||1||1|| ||FLIGHT_MODE_2 - Mode switch setting 2 - APM: 0 = Manual, 2 = Stabilize, 5 - Fly-By-Wire-A, 6 = Fly-By-Wire-B, 7 = Fly-By-Wire-C, 10 = Auto - Mission, 11 = RTL, 12 = Loiter, 13 = Take-off, 14 = Land, 15= Guided; ACM2: 0 = Stabilize, 2 = Acro, 3 = Simple, 4 = Auto, 5 = Guided, 6 = Loiter, 7 = RTL||
||FLTMODE3||0||20||1||1|| ||FLIGHT_MODE_3 - Mode switch setting 3 - APM: 0 = Manual, 2 = Stabilize, 5 - Fly-By-Wire-A, 6 = Fly-By-Wire-B, 7 = Fly-By-Wire-C, 10 = Auto - Mission, 11 = RTL, 12 = Loiter, 13 = Take-off, 14 = Land, 15= Guided; ACM2: 0 = Stabilize, 2 = Acro, 3 = Simple, 4 = Auto, 5 = Guided, 6 = Loiter, 7 = RTL||
||FLTMODE4||0||20||1||1|| ||FLIGHT_MODE_4 - Mode switch setting 4 - APM: 0 = Manual, 2 = Stabilize, 5 - Fly-By-Wire-A, 6 = Fly-By-Wire-B, 7 = Fly-By-Wire-C, 10 = Auto - Mission, 11 = RTL, 12 = Loiter, 13 = Take-off, 14 = Land, 15= Guided; ACM2: 0 = Stabilize, 2 = Acro, 3 = Simple, 4 = Auto, 5 = Guided, 6 = Loiter, 7 = RTL||
||FLTMODE5||0||20||1||1|| ||FLIGHT_MODE_5 - Mode switch setting 5 - APM: 0 = Manual, 2 = Stabilize, 5 - Fly-By-Wire-A, 6 = Fly-By-Wire-B, 7 = Fly-By-Wire-C, 10 = Auto - Mission, 11 = RTL, 12 = Loiter, 13 = Take-off, 14 = Land, 15= Guided; ACM2: 0 = Stabilize, 2 = Acro, 3 = Simple, 4 = Auto, 5 = Guided, 6 = Loiter, 7 = RTL||
||FLTMODE6||0||20||1||1|| ||FLIGHT_MODE_6 - Mode switch setting 6 - APM: 0 = Manual, 2 = Stabilize, 5 - Fly-By-Wire-A, 6 = Fly-By-Wire-B, 7 = Fly-By-Wire-C, 10 = Auto - Mission, 11 = RTL, 12 = Loiter, 13 = Take-off, 14 = Land, 15= Guided; ACM2: 0 = Stabilize, 2 = Acro, 3 = Simple, 4 = Auto, 5 = Guided, 6 = Loiter, 7 = RTL||

0
files/parameter_tooltips/MAV_AUTOPILOT_PIXHAWK-MAV_TYPE_QUADROTOR.csv → files/parameter_tooltips/MAV_AUTOPILOT_PIXHAWK-MAV_TYPE_FIXED_WING.txt

0
files/parameter_tooltips/MAV_AUTOPILOT_PIXHAWK-MAV_TYPE_FIXED_WING.csv → files/parameter_tooltips/MAV_AUTOPILOT_PIXHAWK-MAV_TYPE_QUADROTOR.txt

0
models/ascent-park-glider.skp → files/vehicles/Ascent_Park_Glider/ascent-park-glider.skp

0
models/multiplex-easyglider.skp → files/vehicles/Multiplex_EasyGlider/multiplex-easyglider.skp

0
models/multiplex-twinstar.skp → files/vehicles/Multiplex_TwinStar/multiplex-twinstar.skp

0
models/walkera-4g6.skp → files/vehicles/Walkera_4G6_Coaxial_Helicopter/walkera-4g6.skp

20534
models/cessna.osg

File diff suppressed because it is too large Load Diff

4
src/comm/MAVLinkSimulationLink.cc

@ -66,10 +66,12 @@ MAVLinkSimulationLink::MAVLinkSimulationLink(QString readFile, QString writeFile
onboardParams.insert("PID_ROLL_K_P", 0.5f); onboardParams.insert("PID_ROLL_K_P", 0.5f);
onboardParams.insert("PID_PITCH_K_P", 0.5f); onboardParams.insert("PID_PITCH_K_P", 0.5f);
onboardParams.insert("PID_YAW_K_P", 0.5f); onboardParams.insert("PID_YAW_K_P", 0.5f);
onboardParams.insert("PID_XY_K_P", 0.5f); onboardParams.insert("PID_XY_K_P", 100.0f);
onboardParams.insert("PID_ALT_K_P", 0.5f); onboardParams.insert("PID_ALT_K_P", 0.5f);
onboardParams.insert("SYS_TYPE", 1); onboardParams.insert("SYS_TYPE", 1);
onboardParams.insert("SYS_ID", systemId); onboardParams.insert("SYS_ID", systemId);
onboardParams.insert("RC4_REV", 0);
onboardParams.insert("RC5_REV", 1);
// Comments on the variables can be found in the header file // Comments on the variables can be found in the header file

2
src/comm/MAVLinkSimulationMAV.cc

@ -68,7 +68,7 @@ void MAVLinkSimulationMAV::mainloop()
// 1 Hz execution // 1 Hz execution
if (timer1Hz <= 0) { if (timer1Hz <= 0) {
mavlink_message_t msg; mavlink_message_t msg;
mavlink_msg_heartbeat_pack(systemid, MAV_COMP_ID_IMU, &msg, MAV_TYPE_FIXED_WING, MAV_AUTOPILOT_PIXHAWK, MAV_MODE_GUIDED, MAV_FLIGHT_MODE_AUTO_MISSION, MAV_STATE_ACTIVE, MAV_SAFETY_ARMED, 0xFF); mavlink_msg_heartbeat_pack(systemid, MAV_COMP_ID_IMU, &msg, MAV_TYPE_FIXED_WING, MAV_AUTOPILOT_ARDUPILOTMEGA, MAV_MODE_GUIDED, MAV_FLIGHT_MODE_AUTO_MISSION, MAV_STATE_ACTIVE, MAV_SAFETY_ARMED, 0xFF);
link->sendMAVLinkMessage(&msg); link->sendMAVLinkMessage(&msg);
planner.handleMessage(msg); planner.handleMessage(msg);

17
src/uas/QGCUASParamManager.h

@ -4,6 +4,7 @@
#include <QWidget> #include <QWidget>
#include <QMap> #include <QMap>
#include <QTimer> #include <QTimer>
#include <QVariant>
class UASInterface; class UASInterface;
@ -16,10 +17,10 @@ public:
QList<QString> getParameterNames(int component) const { QList<QString> getParameterNames(int component) const {
return parameters.value(component)->keys(); return parameters.value(component)->keys();
} }
QList<float> getParameterValues(int component) const { QList<QVariant> getParameterValues(int component) const {
return parameters.value(component)->values(); return parameters.value(component)->values();
} }
float getParameterValue(int component, const QString& parameter) const { QVariant getParameterValue(int component, const QString& parameter) const {
return parameters.value(component)->value(parameter); return parameters.value(component)->value(parameter);
} }
@ -29,23 +30,23 @@ public:
virtual void requestParameterUpdate(int component, const QString& parameter) = 0; virtual void requestParameterUpdate(int component, const QString& parameter) = 0;
signals: signals:
void parameterChanged(int component, QString parameter, float value); void parameterChanged(int component, QString parameter, QVariant value);
void parameterChanged(int component, int parameterIndex, float value); void parameterChanged(int component, int parameterIndex, QVariant value);
void parameterListUpToDate(int component); void parameterListUpToDate(int component);
public slots: public slots:
/** @brief Write one parameter to the MAV */ /** @brief Write one parameter to the MAV */
virtual void setParameter(int component, QString parameterName, float value) = 0; virtual void setParameter(int component, QString parameterName, QVariant value) = 0;
/** @brief Request list of parameters from MAV */ /** @brief Request list of parameters from MAV */
virtual void requestParameterList() = 0; virtual void requestParameterList() = 0;
protected: protected:
UASInterface* mav; ///< The MAV this widget is controlling UASInterface* mav; ///< The MAV this widget is controlling
QMap<int, QMap<QString, float>* > changedValues; ///< Changed values QMap<int, QMap<QString, QVariant>* > changedValues; ///< Changed values
QMap<int, QMap<QString, float>* > parameters; ///< All parameters QMap<int, QMap<QString, QVariant>* > parameters; ///< All parameters
QVector<bool> received; ///< Successfully received parameters QVector<bool> received; ///< Successfully received parameters
QMap<int, QList<int>* > transmissionMissingPackets; ///< Missing packets QMap<int, QList<int>* > transmissionMissingPackets; ///< Missing packets
QMap<int, QMap<QString, float>* > transmissionMissingWriteAckPackets; ///< Missing write ACK packets QMap<int, QMap<QString, QVariant>* > transmissionMissingWriteAckPackets; ///< Missing write ACK packets
bool transmissionListMode; ///< Currently requesting list bool transmissionListMode; ///< Currently requesting list
QMap<int, bool> transmissionListSizeKnown; ///< List size initialized? QMap<int, bool> transmissionListSizeKnown; ///< List size initialized?
bool transmissionActive; ///< Missing packets, working on list? bool transmissionActive; ///< Missing packets, working on list?

89
src/uas/UAS.cc

@ -743,21 +743,74 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message)
QByteArray bytes((char*)value.param_id, MAVLINK_MSG_PARAM_VALUE_FIELD_PARAM_ID_LEN); QByteArray bytes((char*)value.param_id, MAVLINK_MSG_PARAM_VALUE_FIELD_PARAM_ID_LEN);
QString parameterName = QString(bytes); QString parameterName = QString(bytes);
int component = message.compid; int component = message.compid;
float val = value.param_value; mavlink_param_union_t val;
val.param_float = value.param_value;
// Convert to machine order if necessary
//#if MAVLINK_NEED_BYTE_SWAP
// buffer[bindex] = (b>>24)&0xff;
// buffer[bindex+1] = (b>>16)&0xff;
// buffer[bindex+2] = (b>>8)&0xff;
// buffer[bindex+3] = (b & 0xff);
//#else
// Insert component if necessary // Insert component if necessary
if (!parameters.contains(component)) if (!parameters.contains(component))
{ {
parameters.insert(component, new QMap<QString, float>()); parameters.insert(component, new QMap<QString, QVariant>());
} }
// Insert parameter into registry // Insert parameter into registry
if (parameters.value(component)->contains(parameterName)) parameters.value(component)->remove(parameterName); if (parameters.value(component)->contains(parameterName)) parameters.value(component)->remove(parameterName);
parameters.value(component)->insert(parameterName, val);
// Insert with correct type
switch (value.param_type)
{
case MAV_DATA_TYPE_FLOAT:
parameters.value(component)->insert(parameterName, val.param_float);
// Emit change
emit parameterChanged(uasId, message.compid, parameterName, val.param_float);
emit parameterChanged(uasId, message.compid, value.param_count, value.param_index, parameterName, val.param_float);
break;/*
case MAV_DATA_TYPE_UINT8:
parameters.value(component)->insert(parameterName, val.param_uint8);
// Emit change
emit parameterChanged(uasId, message.compid, parameterName, val.param_uint8);
emit parameterChanged(uasId, message.compid, value.param_count, value.param_index, parameterName, val.param_uint8);
break;
case MAV_DATA_TYPE_INT8:
parameters.value(component)->insert(parameterName, val.param_int8);
// Emit change
emit parameterChanged(uasId, message.compid, parameterName, val.param_int8);
emit parameterChanged(uasId, message.compid, value.param_count, value.param_index, parameterName, val.param_int8);
break;
case MAV_DATA_TYPE_UINT16:
parameters.value(component)->insert(parameterName, val.param_uint16);
// Emit change
emit parameterChanged(uasId, message.compid, parameterName, val.param_uint16);
emit parameterChanged(uasId, message.compid, value.param_count, value.param_index, parameterName, val.param_uint16);
break;
case MAV_DATA_TYPE_INT16:
parameters.value(component)->insert(parameterName, val.param_int16);
// Emit change
emit parameterChanged(uasId, message.compid, parameterName, val.param_int16);
emit parameterChanged(uasId, message.compid, value.param_count, value.param_index, parameterName, val.param_int16);
break;*/
case MAV_DATA_TYPE_UINT32:
parameters.value(component)->insert(parameterName, val.param_uint32);
// Emit change
emit parameterChanged(uasId, message.compid, parameterName, val.param_uint32);
emit parameterChanged(uasId, message.compid, value.param_count, value.param_index, parameterName, val.param_uint32);
break;
case MAV_DATA_TYPE_INT32:
parameters.value(component)->insert(parameterName, val.param_int32);
// Emit change // Emit change
emit parameterChanged(uasId, message.compid, parameterName, val); emit parameterChanged(uasId, message.compid, parameterName, val.param_int32);
emit parameterChanged(uasId, message.compid, value.param_count, value.param_index, parameterName, val); emit parameterChanged(uasId, message.compid, value.param_count, value.param_index, parameterName, val.param_int32);
break;
default:
qCritical() << "INVALID DATA TYPE USED AS PARAMETER VALUE: " << value.param_type;
}
} }
break; break;
case MAVLINK_MSG_ID_COMMAND_ACK: case MAVLINK_MSG_ID_COMMAND_ACK:
@ -1868,13 +1921,35 @@ void UAS::enableExtra3Transmission(int rate)
* @param id Name of the parameter * @param id Name of the parameter
* @param value Parameter value * @param value Parameter value
*/ */
void UAS::setParameter(const int component, const QString& id, const float value) void UAS::setParameter(const int component, const QString& id, const QVariant& value)
{ {
if (!id.isNull()) if (!id.isNull())
{ {
mavlink_message_t msg; mavlink_message_t msg;
mavlink_param_set_t p; mavlink_param_set_t p;
p.param_value = value; mavlink_param_union_t union_value;
// Assign correct value based on QVariant
switch (value.type())
{
case QVariant::Int:
union_value.param_int32 = value.toInt();
p.param_type = MAV_DATA_TYPE_INT32;
break;
case QVariant::UInt:
union_value.param_uint32 = value.toUInt();
p.param_type = MAV_DATA_TYPE_UINT32;
break;
case QMetaType::Float:
union_value.param_float = value.toFloat();
p.param_type = MAV_DATA_TYPE_FLOAT;
break;
default:
qCritical() << "ABORTED PARAM SEND, NO VALID QVARIANT TYPE";
return;
}
p.param_value = union_value.param_float;
p.target_system = (uint8_t)uasId; p.target_system = (uint8_t)uasId;
p.target_component = (uint8_t)component; p.target_component = (uint8_t)component;

4
src/uas/UAS.h

@ -200,7 +200,7 @@ protected: //COMMENTS FOR TEST UNIT
QImage image; ///< Image data of last completely transmitted image QImage image; ///< Image data of last completely transmitted image
quint64 imageStart; quint64 imageStart;
QMap<int, QMap<QString, float>* > parameters; ///< All parameters QMap<int, QMap<QString, QVariant>* > parameters; ///< All parameters
bool paramsOnceRequested; ///< If the parameter list has been read at least once bool paramsOnceRequested; ///< If the parameter list has been read at least once
int airframe; ///< The airframe type int airframe; ///< The airframe type
bool attitudeKnown; ///< True if attitude was received, false else bool attitudeKnown; ///< True if attitude was received, false else
@ -459,7 +459,7 @@ public slots:
void requestParameter(int component, int parameter); void requestParameter(int component, int parameter);
/** @brief Set a system parameter */ /** @brief Set a system parameter */
void setParameter(const int component, const QString& id, const float value); void setParameter(const int component, const QString& id, const QVariant& value);
/** @brief Write parameters to permanent storage */ /** @brief Write parameters to permanent storage */
void writeParametersToStorage(); void writeParametersToStorage();

6
src/uas/UASInterface.h

@ -255,7 +255,7 @@ public slots:
* @warning The length of the ID string is limited by the MAVLink format! Take care to not exceed it * @warning The length of the ID string is limited by the MAVLink format! Take care to not exceed it
* @param value Value of the parameter, IEEE 754 single precision floating point * @param value Value of the parameter, IEEE 754 single precision floating point
*/ */
virtual void setParameter(const int component, const QString& id, const float value) = 0; virtual void setParameter(const int component, const QString& id, const QVariant& value) = 0;
/** /**
* @brief Add a link to the list of current links * @brief Add a link to the list of current links
@ -395,8 +395,8 @@ signals:
void waypointSelected(int uasId, int id); void waypointSelected(int uasId, int id);
void waypointReached(UASInterface* uas, int id); void waypointReached(UASInterface* uas, int id);
void autoModeChanged(bool autoMode); void autoModeChanged(bool autoMode);
void parameterChanged(int uas, int component, QString parameterName, float value); void parameterChanged(int uas, int component, QString parameterName, QVariant value);
void parameterChanged(int uas, int component, int parameterCount, int parameterId, QString parameterName, float value); void parameterChanged(int uas, int component, int parameterCount, int parameterId, QString parameterName, QVariant value);
void patternDetected(int uasId, QString patternPath, float confidence, bool detected); void patternDetected(int uasId, QString patternPath, float confidence, bool detected);
void letterDetected(int uasId, QString letter, float confidence, bool detected); void letterDetected(int uasId, QString letter, float confidence, bool detected);
/** /**

105
src/ui/QGCParamWidget.cc

@ -123,11 +123,11 @@ QGCParamWidget::QGCParamWidget(UASInterface* uas, QWidget *parent) :
tree->setExpandsOnDoubleClick(true); tree->setExpandsOnDoubleClick(true);
// Connect signals/slots // Connect signals/slots
connect(this, SIGNAL(parameterChanged(int,QString,float)), mav, SLOT(setParameter(int,QString,float))); connect(this, SIGNAL(parameterChanged(int,QString,QVariant)), mav, SLOT(setParameter(int,QString,QVariant)));
connect(tree, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(parameterItemChanged(QTreeWidgetItem*,int))); connect(tree, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(parameterItemChanged(QTreeWidgetItem*,int)));
// New parameters from UAS // New parameters from UAS
connect(uas, SIGNAL(parameterChanged(int,int,int,int,QString,float)), this, SLOT(addParameter(int,int,int,int,QString,float))); connect(uas, SIGNAL(parameterChanged(int,int,int,int,QString,QVariant)), this, SLOT(addParameter(int,int,int,int,QString,QVariant)));
// Connect retransmission guard // Connect retransmission guard
connect(this, SIGNAL(requestParameter(int,int)), uas, SLOT(requestParameter(int,int))); connect(this, SIGNAL(requestParameter(int,int)), uas, SLOT(requestParameter(int,int)));
@ -150,7 +150,7 @@ void QGCParamWidget::loadParameterInfoCSV(const QString& autopilot, const QStrin
{ {
QDir appDir = QDir::current(); QDir appDir = QDir::current();
appDir.cd("files/parameter_tooltips"); appDir.cd("files/parameter_tooltips");
QString fileName = QString("MAV_AUTOPILOT_%1-MAV_TYPE_%2.csv").arg(autopilot).arg(airframe); QString fileName = QString("MAV_AUTOPILOT_%1-MAV_TYPE_%2.txt").arg(autopilot).arg(airframe);
QString filePath = appDir.filePath(fileName); QString filePath = appDir.filePath(fileName);
QFile paramMetaFile(filePath); QFile paramMetaFile(filePath);
@ -168,15 +168,23 @@ void QGCParamWidget::loadParameterInfoCSV(const QString& autopilot, const QStrin
QTextStream in(&paramMetaFile); QTextStream in(&paramMetaFile);
// First line is header // First line is header
// there might be more lines, but the first
// line is assumed to be at least header
QString header = in.readLine(); QString header = in.readLine();
// Ignore top-level comment lines
while (header.startsWith('#') || header.startsWith('/') || header.startsWith('='))
{
header = in.readLine();
}
bool charRead = false; bool charRead = false;
QString separator = ""; QString separator = "";
QList<QChar> sepCandidates; QList<QChar> sepCandidates;
sepCandidates << '\t'; sepCandidates << '\t';
sepCandidates << ','; sepCandidates << ',';
sepCandidates << ';'; sepCandidates << ';';
sepCandidates << ' '; //sepCandidates << ' ';
sepCandidates << '~'; sepCandidates << '~';
sepCandidates << '|'; sepCandidates << '|';
@ -203,6 +211,15 @@ void QGCParamWidget::loadParameterInfoCSV(const QString& autopilot, const QStrin
} }
} }
bool stripFirstSeparator = false;
bool stripLastSeparator = false;
// Figure out if the lines start with the separator (e.g. wiki syntax)
if (header.startsWith(separator)) stripFirstSeparator = true;
// Figure out if the lines end with the separator (e.g. wiki syntax)
if (header.endsWith(separator)) stripLastSeparator = true;
QString out = separator; QString out = separator;
out.replace("\t", "<tab>"); out.replace("\t", "<tab>");
qDebug() << " Separator: \"" << out << "\""; qDebug() << " Separator: \"" << out << "\"";
@ -214,6 +231,14 @@ void QGCParamWidget::loadParameterInfoCSV(const QString& autopilot, const QStrin
{ {
QString line = in.readLine(); QString line = in.readLine();
//qDebug() << "LINE PRE-STRIP" << line;
// Strip separtors if necessary
if (stripFirstSeparator) line.remove(0, separator.length());
if (stripLastSeparator) line.remove(line.length()-separator.length(), line.length()-1);
//qDebug() << "LINE POST-STRIP" << line;
// Keep empty parts here - we still have to act on them // Keep empty parts here - we still have to act on them
QStringList parts = line.split(separator, QString::KeepEmptyParts); QStringList parts = line.split(separator, QString::KeepEmptyParts);
@ -281,11 +306,11 @@ void QGCParamWidget::addComponent(int uas, int component, QString componentName)
tree->update(); tree->update();
// Create map in parameters // Create map in parameters
if (!parameters.contains(component)) { if (!parameters.contains(component)) {
parameters.insert(component, new QMap<QString, float>()); parameters.insert(component, new QMap<QString, QVariant>());
} }
// Create map in changed parameters // Create map in changed parameters
if (!changedValues.contains(component)) { if (!changedValues.contains(component)) {
changedValues.insert(component, new QMap<QString, float>()); changedValues.insert(component, new QMap<QString, QVariant>());
} }
} }
} }
@ -295,7 +320,7 @@ void QGCParamWidget::addComponent(int uas, int component, QString componentName)
* @param component id of the component * @param component id of the component
* @param parameterName human friendly name of the parameter * @param parameterName human friendly name of the parameter
*/ */
void QGCParamWidget::addParameter(int uas, int component, int paramCount, int paramId, QString parameterName, float value) void QGCParamWidget::addParameter(int uas, int component, int paramCount, int paramId, QString parameterName, QVariant value)
{ {
addParameter(uas, component, parameterName, value); addParameter(uas, component, parameterName, value);
@ -346,7 +371,7 @@ void QGCParamWidget::addParameter(int uas, int component, int paramCount, int pa
bool writeMismatch = false; bool writeMismatch = false;
//bool lastWritten = false; //bool lastWritten = false;
// Mark this parameter as received in write ACK list // Mark this parameter as received in write ACK list
QMap<QString, float>* map = transmissionMissingWriteAckPackets.value(component); QMap<QString, QVariant>* map = transmissionMissingWriteAckPackets.value(component);
if (map && map->contains(parameterName)) if (map && map->contains(parameterName))
{ {
justWritten = true; justWritten = true;
@ -378,7 +403,7 @@ void QGCParamWidget::addParameter(int uas, int component, int paramCount, int pa
statusLabel->setPalette(pal); statusLabel->setPalette(pal);
} else if (justWritten && !writeMismatch) } else if (justWritten && !writeMismatch)
{ {
statusLabel->setText(tr("SUCCESS: Wrote %2 (#%1/%4): %3").arg(paramId+1).arg(parameterName).arg(value).arg(paramCount)); statusLabel->setText(tr("SUCCESS: Wrote %2 (#%1/%4): %3").arg(paramId+1).arg(parameterName).arg(value.toDouble()).arg(paramCount));
QPalette pal = statusLabel->palette(); QPalette pal = statusLabel->palette();
pal.setColor(backgroundRole(), QGC::colorGreen); pal.setColor(backgroundRole(), QGC::colorGreen);
statusLabel->setPalette(pal); statusLabel->setPalette(pal);
@ -388,7 +413,7 @@ void QGCParamWidget::addParameter(int uas, int component, int paramCount, int pa
QPalette pal = statusLabel->palette(); QPalette pal = statusLabel->palette();
pal.setColor(backgroundRole(), QGC::colorRed); pal.setColor(backgroundRole(), QGC::colorRed);
statusLabel->setPalette(pal); statusLabel->setPalette(pal);
statusLabel->setText(tr("FAILURE: Wrote %1: sent %2 != onboard %3").arg(parameterName).arg(map->value(parameterName)).arg(value)); statusLabel->setText(tr("FAILURE: Wrote %1: sent %2 != onboard %3").arg(parameterName).arg(map->value(parameterName).toDouble()).arg(value.toDouble()));
} }
else else
{ {
@ -404,7 +429,7 @@ void QGCParamWidget::addParameter(int uas, int component, int paramCount, int pa
pal.setColor(backgroundRole(), QGC::colorGreen); pal.setColor(backgroundRole(), QGC::colorGreen);
statusLabel->setPalette(pal); statusLabel->setPalette(pal);
} }
statusLabel->setText(tr("Got %2 (#%1/%5): %3 (%4 missing)").arg(paramId+1).arg(parameterName).arg(value).arg(missCount).arg(paramCount)); statusLabel->setText(tr("Got %2 (#%1/%5): %3 (%4 missing)").arg(paramId+1).arg(parameterName).arg(value.toDouble()).arg(missCount).arg(paramCount));
} }
// Check if last parameter was received // Check if last parameter was received
@ -425,7 +450,7 @@ void QGCParamWidget::addParameter(int uas, int component, int paramCount, int pa
* @param component id of the component * @param component id of the component
* @param parameterName human friendly name of the parameter * @param parameterName human friendly name of the parameter
*/ */
void QGCParamWidget::addParameter(int uas, int component, QString parameterName, float value) void QGCParamWidget::addParameter(int uas, int component, QString parameterName, QVariant value)
{ {
Q_UNUSED(uas); Q_UNUSED(uas);
// Reference to item in tree // Reference to item in tree
@ -464,7 +489,8 @@ void QGCParamWidget::addParameter(int uas, int component, QString parameterName,
{ {
QString parent = parameterName.section(splitToken, 0, 0, QString::SectionSkipEmpty); QString parent = parameterName.section(splitToken, 0, 0, QString::SectionSkipEmpty);
QMap<QString, QTreeWidgetItem*>* compParamGroups = paramGroups.value(component); QMap<QString, QTreeWidgetItem*>* compParamGroups = paramGroups.value(component);
if (!compParamGroups->contains(parent)) { if (!compParamGroups->contains(parent))
{
// Insert group item // Insert group item
QStringList glist; QStringList glist;
glist.append(parent); glist.append(parent);
@ -479,7 +505,8 @@ void QGCParamWidget::addParameter(int uas, int component, QString parameterName,
for (int i = 0; i < parentItem->childCount(); i++) { for (int i = 0; i < parentItem->childCount(); i++) {
QTreeWidgetItem* child = parentItem->child(i); QTreeWidgetItem* child = parentItem->child(i);
QString key = child->data(0, Qt::DisplayRole).toString(); QString key = child->data(0, Qt::DisplayRole).toString();
if (key == parameterName) { if (key == parameterName)
{
//qDebug() << "UPDATED CHILD"; //qDebug() << "UPDATED CHILD";
parameterItem = child; parameterItem = child;
parameterItem->setData(1, Qt::DisplayRole, value); parameterItem->setData(1, Qt::DisplayRole, value);
@ -492,7 +519,7 @@ void QGCParamWidget::addParameter(int uas, int component, QString parameterName,
// Insert parameter into map // Insert parameter into map
QStringList plist; QStringList plist;
plist.append(parameterName); plist.append(parameterName);
plist.append(QString::number(value)); plist.append(QString::number(value.toDouble()));
// CREATE PARAMETER ITEM // CREATE PARAMETER ITEM
parameterItem = new QTreeWidgetItem(plist); parameterItem = new QTreeWidgetItem(plist);
// CONFIGURE PARAMETER ITEM // CONFIGURE PARAMETER ITEM
@ -523,7 +550,7 @@ void QGCParamWidget::addParameter(int uas, int component, QString parameterName,
// Insert parameter into map // Insert parameter into map
QStringList plist; QStringList plist;
plist.append(parameterName); plist.append(parameterName);
plist.append(QString::number(value)); plist.append(QString::number(value.toDouble()));
// CREATE PARAMETER ITEM // CREATE PARAMETER ITEM
parameterItem = new QTreeWidgetItem(plist); parameterItem = new QTreeWidgetItem(plist);
// CONFIGURE PARAMETER ITEM // CONFIGURE PARAMETER ITEM
@ -589,9 +616,9 @@ void QGCParamWidget::parameterItemChanged(QTreeWidgetItem* current, int column)
// Parent is now top-level component // Parent is now top-level component
int key = components->key(parent); int key = components->key(parent);
if (!changedValues.contains(key)) { if (!changedValues.contains(key)) {
changedValues.insert(key, new QMap<QString, float>()); changedValues.insert(key, new QMap<QString, QVariant>());
} }
QMap<QString, float>* map = changedValues.value(key, NULL); QMap<QString, QVariant>* map = changedValues.value(key, NULL);
if (map) { if (map) {
bool ok; bool ok;
QString str = current->data(0, Qt::DisplayRole).toString(); QString str = current->data(0, Qt::DisplayRole).toString();
@ -636,16 +663,17 @@ void QGCParamWidget::saveParameters()
in << "# MAV ID COMPONENT ID PARAM NAME VALUE (FLOAT)\n"; in << "# MAV ID COMPONENT ID PARAM NAME VALUE (FLOAT)\n";
// Iterate through all components, through all parameters and emit them // Iterate through all components, through all parameters and emit them
QMap<int, QMap<QString, float>*>::iterator i; QMap<int, QMap<QString, QVariant>*>::iterator i;
for (i = parameters.begin(); i != parameters.end(); ++i) { for (i = parameters.begin(); i != parameters.end(); ++i) {
// Iterate through the parameters of the component // Iterate through the parameters of the component
int compid = i.key(); int compid = i.key();
QMap<QString, float>* comp = i.value(); QMap<QString, QVariant>* comp = i.value();
{
QMap<QString, QVariant>::iterator j;
for (j = comp->begin(); j != comp->end(); ++j)
{ {
QMap<QString, float>::iterator j;
for (j = comp->begin(); j != comp->end(); ++j) {
QString paramValue("%1"); QString paramValue("%1");
paramValue = paramValue.arg(j.value(), 25, 'g', 12); paramValue = paramValue.arg(j.value().toDouble(), 25, 'g', 12);
in << mav->getUASID() << "\t" << compid << "\t" << j.key() << "\t" << paramValue << "\n"; in << mav->getUASID() << "\t" << compid << "\t" << j.key() << "\t" << paramValue << "\n";
in.flush(); in.flush();
} }
@ -687,7 +715,7 @@ void QGCParamWidget::loadParameters()
if (changed) { if (changed) {
// Create changed values data structure if necessary // Create changed values data structure if necessary
if (!changedValues.contains(wpParams.at(1).toInt())) { if (!changedValues.contains(wpParams.at(1).toInt())) {
changedValues.insert(wpParams.at(1).toInt(), new QMap<QString, float>()); changedValues.insert(wpParams.at(1).toInt(), new QMap<QString, QVariant>());
} }
// Add to changed values // Add to changed values
@ -759,7 +787,7 @@ void QGCParamWidget::retransmissionGuardTick()
// Re-request at maximum retransmissionBurstRequestSize parameters at once // Re-request at maximum retransmissionBurstRequestSize parameters at once
// to prevent link flooding // to prevent link flooding
QMap<int, QMap<QString, float>*>::iterator i; QMap<int, QMap<QString, QVariant>*>::iterator i;
for (i = parameters.begin(); i != parameters.end(); ++i) { for (i = parameters.begin(); i != parameters.end(); ++i) {
// Iterate through the parameters of the component // Iterate through the parameters of the component
int component = i.key(); int component = i.key();
@ -786,12 +814,12 @@ void QGCParamWidget::retransmissionGuardTick()
QList<int> writeKeys = transmissionMissingWriteAckPackets.keys(); QList<int> writeKeys = transmissionMissingWriteAckPackets.keys();
foreach (int component, writeKeys) { foreach (int component, writeKeys) {
int count = 0; int count = 0;
QMap <QString, float>* missingParams = transmissionMissingWriteAckPackets.value(component); QMap <QString, QVariant>* missingParams = transmissionMissingWriteAckPackets.value(component);
foreach (QString key, missingParams->keys()) { foreach (QString key, missingParams->keys()) {
if (count < retransmissionBurstRequestSize) { if (count < retransmissionBurstRequestSize) {
// Re-request write operation // Re-request write operation
emit parameterChanged(component, key, missingParams->value(key)); emit parameterChanged(component, key, missingParams->value(key));
statusLabel->setText(tr("Requested rewrite of: %1: %2").arg(key).arg(missingParams->value(key))); statusLabel->setText(tr("Requested rewrite of: %1: %2").arg(key).arg(missingParams->value(key).toDouble()));
count++; count++;
} else { } else {
break; break;
@ -819,13 +847,24 @@ void QGCParamWidget::requestParameterUpdate(int component, const QString& parame
* @param parameterName name of the parameter, as delivered by the system * @param parameterName name of the parameter, as delivered by the system
* @param value value of the parameter * @param value value of the parameter
*/ */
void QGCParamWidget::setParameter(int component, QString parameterName, float value) void QGCParamWidget::setParameter(int component, QString parameterName, QVariant value)
{ {
if (paramMin.contains(parameterName) && value.toDouble() < paramMin.value(parameterName))
{
statusLabel->setText(tr("REJ. %1 < min").arg(value.toDouble()));
return;
}
if (paramMax.contains(parameterName) && value.toDouble() > paramMax.value(parameterName))
{
statusLabel->setText(tr("REJ. %1 > max").arg(value.toDouble()));
return;
}
emit parameterChanged(component, parameterName, value); emit parameterChanged(component, parameterName, value);
// Wait for parameter to be written back // Wait for parameter to be written back
// mark it therefore as missing // mark it therefore as missing
if (!transmissionMissingWriteAckPackets.contains(component)) { if (!transmissionMissingWriteAckPackets.contains(component))
transmissionMissingWriteAckPackets.insert(component, new QMap<QString, float>()); {
transmissionMissingWriteAckPackets.insert(component, new QMap<QString, QVariant>());
} }
// Insert it in missing write ACK list // Insert it in missing write ACK list
@ -848,13 +887,13 @@ void QGCParamWidget::setParameters()
{ {
// Iterate through all components, through all parameters and emit them // Iterate through all components, through all parameters and emit them
int parametersSent = 0; int parametersSent = 0;
QMap<int, QMap<QString, float>*>::iterator i; QMap<int, QMap<QString, QVariant>*>::iterator i;
for (i = changedValues.begin(); i != changedValues.end(); ++i) { for (i = changedValues.begin(); i != changedValues.end(); ++i) {
// Iterate through the parameters of the component // Iterate through the parameters of the component
int compid = i.key(); int compid = i.key();
QMap<QString, float>* comp = i.value(); QMap<QString, QVariant>* comp = i.value();
{ {
QMap<QString, float>::iterator j; QMap<QString, QVariant>::iterator j;
for (j = comp->begin(); j != comp->end(); ++j) { for (j = comp->begin(); j != comp->end(); ++j) {
setParameter(compid, j.key(), j.value()); setParameter(compid, j.key(), j.value());
parametersSent++; parametersSent++;

14
src/ui/QGCParamWidget.h

@ -52,22 +52,22 @@ public:
UASInterface* getUAS(); UASInterface* getUAS();
signals: signals:
/** @brief A parameter was changed in the widget, NOT onboard */ /** @brief A parameter was changed in the widget, NOT onboard */
void parameterChanged(int component, QString parametername, float value); void parameterChanged(int component, QString parametername, QVariant value);
/** @brief Request a single parameter */ /** @brief Request a single parameter */
void requestParameter(int component, int parameter); void requestParameter(int component, int parameter);
public slots: public slots:
/** @brief Add a component to the list */ /** @brief Add a component to the list */
void addComponent(int uas, int component, QString componentName); void addComponent(int uas, int component, QString componentName);
/** @brief Add a parameter to the list with retransmission / safety checks */ /** @brief Add a parameter to the list with retransmission / safety checks */
void addParameter(int uas, int component, int paramCount, int paramId, QString parameterName, float value); void addParameter(int uas, int component, int paramCount, int paramId, QString parameterName, QVariant value);
/** @brief Add a parameter to the list */ /** @brief Add a parameter to the list */
void addParameter(int uas, int component, QString parameterName, float value); void addParameter(int uas, int component, QString parameterName, QVariant value);
/** @brief Request list of parameters from MAV */ /** @brief Request list of parameters from MAV */
void requestParameterList(); void requestParameterList();
/** @brief Request one single parameter */ /** @brief Request one single parameter */
void requestParameterUpdate(int component, const QString& parameter); void requestParameterUpdate(int component, const QString& parameter);
/** @brief Set one parameter, changes value in RAM of MAV */ /** @brief Set one parameter, changes value in RAM of MAV */
void setParameter(int component, QString parameterName, float value); void setParameter(int component, QString parameterName, QVariant value);
/** @brief Set all parameters, changes the value in RAM of MAV */ /** @brief Set all parameters, changes the value in RAM of MAV */
void setParameters(); void setParameters();
/** @brief Write the current parameters to permanent storage (EEPROM/HDD) */ /** @brief Write the current parameters to permanent storage (EEPROM/HDD) */
@ -96,9 +96,9 @@ protected:
// Tooltip data structures // Tooltip data structures
QMap<QString, QString> paramToolTips; ///< Tooltip values QMap<QString, QString> paramToolTips; ///< Tooltip values
// Min / Default / Max data structures // Min / Default / Max data structures
QMap<QString, float> paramMin; ///< Minimum param values QMap<QString, double> paramMin; ///< Minimum param values
QMap<QString, float> paramDefault; ///< Default param values QMap<QString, double> paramDefault; ///< Default param values
QMap<QString, float> paramMax; ///< Minimum param values QMap<QString, double> paramMax; ///< Minimum param values
/** @brief Activate / deactivate parameter retransmission */ /** @brief Activate / deactivate parameter retransmission */
void setRetransmissionGuardEnabled(bool enabled); void setRetransmissionGuardEnabled(bool enabled);

2
src/ui/uas/UASControlWidget.cc

@ -69,7 +69,7 @@ void UASControlWidget::setUAS(UASInterface* uas)
{ {
if (this->uas != 0) { if (this->uas != 0) {
UASInterface* oldUAS = UASManager::instance()->getUASForId(this->uas); UASInterface* oldUAS = UASManager::instance()->getUASForId(this->uas);
disconnect(ui.controlButton, SIGNAL(clicked()), oldUAS, SLOT(enable_motors())); disconnect(ui.controlButton, SIGNAL(clicked()), oldUAS, SLOT(armSystem()));
disconnect(ui.liftoffButton, SIGNAL(clicked()), oldUAS, SLOT(launch())); disconnect(ui.liftoffButton, SIGNAL(clicked()), oldUAS, SLOT(launch()));
disconnect(ui.landButton, SIGNAL(clicked()), oldUAS, SLOT(home())); disconnect(ui.landButton, SIGNAL(clicked()), oldUAS, SLOT(home()));
disconnect(ui.shutdownButton, SIGNAL(clicked()), oldUAS, SLOT(shutdown())); disconnect(ui.shutdownButton, SIGNAL(clicked()), oldUAS, SLOT(shutdown()));

Loading…
Cancel
Save