From e600db61dc7da4e3d5bebe025bebd2a0fb22c54e Mon Sep 17 00:00:00 2001 From: Michael Carpenter Date: Fri, 19 Apr 2013 07:10:05 -0400 Subject: [PATCH] More changes to the config system, addition of more calibration preferences Variable calibration procedure text based on the autopilot, stored in files/%autopilot%/general/calibration/description.txt. Added a new QGCTextLabel type for QGW files, which can display MAV text or hardcoded text. Added tabular configuration screens based on folder structure inside the files/autopilot/airframe folders --- .../general/calibration/calibration.qgw | 111 ++++--- .../general/calibration/description.txt | 19 ++ .../battery_monitoring.qgw | 2 +- .../general/widgets/Failsafe/failsafes.qgw | 43 +++ .../{ => Hardware_Options}/extra_sensors.qgw | 0 .../ardupilotmega/general/widgets/general.qgw | 156 +++++---- .../ground_rover/widgets/rover.qgw | 23 +- .../quadrotor/calibration/calibration.qgw | 17 + .../widgets/Flight_Modes/driving_modes.qgw | 193 ++++++++++++ .../quadrotor/widgets/airframe_config.qgw | 13 + files/images/mavs/frames-05.png | Bin 0 -> 29220 bytes files/images/mavs/frames_plus.png | Bin 0 -> 27735 bytes files/images/mavs/frames_x.png | Bin 0 -> 37192 bytes files/px4/general/calibration/description.txt | 19 ++ files/px4/widgets/px4_calibration.qgw | 61 ++++ .../widgets/px4_fw_attitude_pid_params.qgw | 8 + .../widgets/px4_fw_position_pid_params.qgw | 8 + .../widgets/px4_mc_attitude_pid_params.qgw | 72 +++++ .../widgets/px4_mc_position_pid_params.qgw | 72 +++++ qgroundcontrol.pro | 10 +- src/ui/QGCVehicleConfig.cc | 141 +++++++-- src/ui/QGCVehicleConfig.h | 2 +- src/ui/QGCVehicleConfig.ui | 99 +++--- src/ui/designer/QGCComboBox.cc | 20 +- src/ui/designer/QGCComboBox.h | 1 + src/ui/designer/QGCComboBox.ui | 298 +++++++++--------- src/ui/designer/QGCCommandButton.cc | 7 +- src/ui/designer/QGCCommandButton.h | 4 +- src/ui/designer/QGCParamSlider.cc | 14 +- src/ui/designer/QGCTextLabel.cc | 189 +++++++++++ src/ui/designer/QGCTextLabel.h | 34 ++ src/ui/designer/QGCTextLabel.ui | 133 ++++++++ src/ui/designer/QGCToolWidget.cc | 34 +- src/ui/designer/QGCToolWidget.h | 2 + 34 files changed, 1470 insertions(+), 335 deletions(-) create mode 100644 files/ardupilotmega/general/calibration/description.txt rename files/ardupilotmega/general/widgets/{ => Battery_Monitor}/battery_monitoring.qgw (98%) create mode 100644 files/ardupilotmega/general/widgets/Failsafe/failsafes.qgw rename files/ardupilotmega/general/widgets/{ => Hardware_Options}/extra_sensors.qgw (100%) create mode 100644 files/ardupilotmega/quadrotor/calibration/calibration.qgw create mode 100644 files/ardupilotmega/quadrotor/widgets/Flight_Modes/driving_modes.qgw create mode 100644 files/ardupilotmega/quadrotor/widgets/airframe_config.qgw create mode 100644 files/images/mavs/frames-05.png create mode 100644 files/images/mavs/frames_plus.png create mode 100644 files/images/mavs/frames_x.png create mode 100644 files/px4/general/calibration/description.txt create mode 100644 files/px4/widgets/px4_calibration.qgw create mode 100644 files/px4/widgets/px4_fw_attitude_pid_params.qgw create mode 100644 files/px4/widgets/px4_fw_position_pid_params.qgw create mode 100644 files/px4/widgets/px4_mc_attitude_pid_params.qgw create mode 100644 files/px4/widgets/px4_mc_position_pid_params.qgw create mode 100644 src/ui/designer/QGCTextLabel.cc create mode 100644 src/ui/designer/QGCTextLabel.h create mode 100644 src/ui/designer/QGCTextLabel.ui diff --git a/files/ardupilotmega/general/calibration/calibration.qgw b/files/ardupilotmega/general/calibration/calibration.qgw index 20bbfd1013..04355429c0 100644 --- a/files/ardupilotmega/general/calibration/calibration.qgw +++ b/files/ardupilotmega/general/calibration/calibration.qgw @@ -11,51 +11,82 @@ QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM4=0 QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM5=0 QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM6=0 QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM7=0 -QGC_TOOL_WIDGET_ITEMS\2\TYPE=COMMANDBUTTON -QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_DESCRIPTION=Magnetometer calibration -QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_BUTTONTEXT=MAG -QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_COMMANDID=241 -QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false -QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM1=0 -QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM2=1 -QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM3=0 -QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM4=0 -QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM5=0 -QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM6=0 -QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM7=0 + +QGC_TOOL_WIDGET_ITEMS\2\TYPE=TEXT +QGC_TOOL_WIDGET_ITEMS\2\QGC_TEXT_SOURCE=NONE +QGC_TOOL_WIDGET_ITEMS\2\QGC_TEXT_ID=MAG_LABEL +QGC_TOOL_WIDGET_ITEMS\2\QGC_TEXT_TEXT= QGC_TOOL_WIDGET_ITEMS\3\TYPE=COMMANDBUTTON -QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_DESCRIPTION=Accelerometer calibration -QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_BUTTONTEXT=ACCEL +QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_DESCRIPTION=Magnetometer calibration +QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_BUTTONTEXT=MAG QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_COMMANDID=241 +QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_LABEL=MAG_TEXT QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM1=0 -QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM2=0 +QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM2=1 QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM3=0 QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM4=0 -QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM5=1 +QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM5=0 QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM6=0 QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM7=0 -QGC_TOOL_WIDGET_ITEMS\4\TYPE=COMMANDBUTTON -QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_DESCRIPTION=Gyroscope calibration -QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_BUTTONTEXT=GYRO -QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_COMMANDID=241 -QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false -QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM1=1 -QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM2=0 -QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM3=0 -QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM4=0 -QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM5=0 -QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM6=0 -QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM7=0 -QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_DESCRIPTION=RC Trim calibration -QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_BUTTONTEXT=TRIM -QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_COMMANDID=241 -QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false -QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM1=1 -QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM2=0 -QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM3=0 -QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM4=1 -QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM5=0 -QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM6=0 -QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM7=0 -QGC_TOOL_WIDGET_ITEMS\size=5 +QGC_TOOL_WIDGET_ITEMS\4\TYPE=TEXT +QGC_TOOL_WIDGET_ITEMS\4\QGC_TEXT_SOURCE=MAV +QGC_TOOL_WIDGET_ITEMS\4\QGC_TEXT_ID=MAG_TEXT +QGC_TOOL_WIDGET_ITEMS\4\QGC_TEXT_TEXT= + +QGC_TOOL_WIDGET_ITEMS\5\TYPE=TEXT +QGC_TOOL_WIDGET_ITEMS\5\QGC_TEXT_SOURCE=NONE +QGC_TOOL_WIDGET_ITEMS\5\QGC_TEXT_ID=ACCEL_LABEL +QGC_TOOL_WIDGET_ITEMS\5\QGC_TEXT_TEXT= +QGC_TOOL_WIDGET_ITEMS\6\TYPE=COMMANDBUTTON +QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_DESCRIPTION=Accelerometer calibration +QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_BUTTONTEXT=ACCEL +QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_COMMANDID=241 +QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_LABEL=ACCEL_TEXT +QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false +QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_PARAM1=0 +QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_PARAM2=0 +QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_PARAM3=0 +QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_PARAM4=0 +QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_PARAM5=1 +QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_PARAM6=0 +QGC_TOOL_WIDGET_ITEMS\6\QGC_COMMAND_BUTTON_PARAM7=0 +QGC_TOOL_WIDGET_ITEMS\7\TYPE=TEXT +QGC_TOOL_WIDGET_ITEMS\7\QGC_TEXT_SOURCE=MAV +QGC_TOOL_WIDGET_ITEMS\7\QGC_TEXT_ID=ACCEL_TEXT +QGC_TOOL_WIDGET_ITEMS\7\QGC_TEXT_TEXT= + +QGC_TOOL_WIDGET_ITEMS\8\TYPE=TEXT +QGC_TOOL_WIDGET_ITEMS\8\QGC_TEXT_SOURCE=NONE +QGC_TOOL_WIDGET_ITEMS\8\QGC_TEXT_ID=GYRO_LABEL +QGC_TOOL_WIDGET_ITEMS\8\QGC_TEXT_TEXT= +QGC_TOOL_WIDGET_ITEMS\9\TYPE=COMMANDBUTTON +QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_DESCRIPTION=Gyroscope calibration +QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_BUTTONTEXT=GYRO +QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_COMMANDID=241 +QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_LABEL=GYRO_TEXT +QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false +QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_PARAM1=1 +QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_PARAM2=0 +QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_PARAM3=0 +QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_PARAM4=0 +QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_PARAM5=0 +QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_PARAM6=0 +QGC_TOOL_WIDGET_ITEMS\9\QGC_COMMAND_BUTTON_PARAM7=0 +QGC_TOOL_WIDGET_ITEMS\10\TYPE=TEXT +QGC_TOOL_WIDGET_ITEMS\10\QGC_TEXT_SOURCE=MAV +QGC_TOOL_WIDGET_ITEMS\10\QGC_TEXT_ID=GYRO_TEXT +QGC_TOOL_WIDGET_ITEMS\10\QGC_TEXT_TEXT= + +QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_DESCRIPTION=RC Trim calibration +QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_BUTTONTEXT=TRIM +QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_COMMANDID=241 +QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false +QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_PARAM1=1 +QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_PARAM2=0 +QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_PARAM3=0 +QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_PARAM4=1 +QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_PARAM5=0 +QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_PARAM6=0 +QGC_TOOL_WIDGET_ITEMS\11\QGC_COMMAND_BUTTON_PARAM7=0 +QGC_TOOL_WIDGET_ITEMS\size=11 diff --git a/files/ardupilotmega/general/calibration/description.txt b/files/ardupilotmega/general/calibration/description.txt new file mode 100644 index 0000000000..a765ab72db --- /dev/null +++ b/files/ardupilotmega/general/calibration/description.txt @@ -0,0 +1,19 @@ + + +

Sensor Calibration

+ +The APM sensors can be calibrated with the buttons on the right. Gyroscope (GYRO) and Magnometer (MAG) calibrations have to be performed with a static, unmoved system. The Accelerometer (ACCEL) calibrations involve rotating the vehicle around. Please ensure all props are removed and motor power is off. + +

Magnetometer Calibration

+ +Ensure the vehicle is clear of any metal, magnetic, or ferrus materials, and sitting on a flat surface. Click the MAG button and wait for the calibration to complete. + +

Accelerometer Calibration

+ +Ensure the vehicle is on a absolutely level surface and click ACCEL. Follow the instructions that will show up below the button. This calibration procedure will require moving the vehicle at 90 degree angles (upright, left, right, front, back, and upside down), then clicking the button to save that position. + +

Gyroscope Calibration

+ +Place the vehicle on an absolutely flat surface, and click the GYRO button. wait for the system to calibrate. + + \ No newline at end of file diff --git a/files/ardupilotmega/general/widgets/battery_monitoring.qgw b/files/ardupilotmega/general/widgets/Battery_Monitor/battery_monitoring.qgw similarity index 98% rename from files/ardupilotmega/general/widgets/battery_monitoring.qgw rename to files/ardupilotmega/general/widgets/Battery_Monitor/battery_monitoring.qgw index 6feea44446..dd5e52dc58 100644 --- a/files/ardupilotmega/general/widgets/battery_monitoring.qgw +++ b/files/ardupilotmega/general/widgets/Battery_Monitor/battery_monitoring.qgw @@ -42,7 +42,7 @@ QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_11_TEXT=A11 QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_11_VAL=11 QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_12_TEXT=A12 QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_12_VAL=12 -QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_13_TEXT=A3 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_13_TEXT=A13 QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_13_VAL=13 QGC_TOOL_WIDGET_ITEMS\3\TYPE=COMBO diff --git a/files/ardupilotmega/general/widgets/Failsafe/failsafes.qgw b/files/ardupilotmega/general/widgets/Failsafe/failsafes.qgw new file mode 100644 index 0000000000..392d1a5d67 --- /dev/null +++ b/files/ardupilotmega/general/widgets/Failsafe/failsafes.qgw @@ -0,0 +1,43 @@ +[Failsafe%20Configuration] +QGC_TOOL_WIDGET_ITEMS\1\TYPE=COMBO +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_DESCRIPTION=Failsafe Action +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_PARAMID=FS_ACTION +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COMPONENTID=1 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COUNT=3 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=RTL +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Hold +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2 +QGC_TOOL_WIDGET_ITEMS\2\TYPE=COMBO +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_DESCRIPTION=GCS failsafe enable +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_PARAMID=FS_GCS_ENABLE +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_COMPONENTID=1 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_COUNT=2 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 +QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=Failsafe timeout (In Seconds) +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=FS_TIMEOUT +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=1 +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=100 +QGC_TOOL_WIDGET_ITEMS\4\TYPE=COMBO +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_DESCRIPTION=Throttle Failsafe Enable +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_PARAMID=FS_THR_ENABLE +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COMPONENTID=1 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COUNT=2 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 +QGC_TOOL_WIDGET_ITEMS\5\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_DESCRIPTION=Throttle Failsafe Value (PWM) +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_PARAMID=FS_THR_VALUE +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_COMPONENTID=1 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MAX=1000 +QGC_TOOL_WIDGET_ITEMS\size=5 diff --git a/files/ardupilotmega/general/widgets/extra_sensors.qgw b/files/ardupilotmega/general/widgets/Hardware_Options/extra_sensors.qgw similarity index 100% rename from files/ardupilotmega/general/widgets/extra_sensors.qgw rename to files/ardupilotmega/general/widgets/Hardware_Options/extra_sensors.qgw diff --git a/files/ardupilotmega/general/widgets/general.qgw b/files/ardupilotmega/general/widgets/general.qgw index 50f04cd3c6..d0fcc6e5ec 100644 --- a/files/ardupilotmega/general/widgets/general.qgw +++ b/files/ardupilotmega/general/widgets/general.qgw @@ -1,85 +1,105 @@ -[Extra%20Sensors] +[General] QGC_TOOL_WIDGET_ITEMS\1\TYPE=COMBO -QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_DESCRIPTION=Compass Enable -QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_PARAMID=MAG_ENABLE +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_DESCRIPTION=Channel 7 Option +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_PARAMID=CH7_OPTION QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COMPONENTID=1 QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COUNT=2 -QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Nothing QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 -QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Learn Waypoint QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 -QGC_TOOL_WIDGET_ITEMS\2\TYPE=COMBO -QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_DESCRIPTION=Auto Declination -QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_PARAMID=COMPASS_AUTODEC -QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_COMPONENTID=1 -QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_COUNT=2 -QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled -QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 -QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled -QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 - -QGC_TOOL_WIDGET_ITEMS\4\TYPE=COMBO -QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_DESCRIPTION=Channel 7 Option -QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_PARAMID=CH7_OPTION -QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COMPONENTID=1 -QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COUNT=2 -QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Nothing -QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 -QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Learn Waypoint -QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 +QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=Target cruise speed in auto modes +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=CRUISE_SPEED +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=1 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=100 QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER -QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=Compass Declination -QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=COMPASS_DEC +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=Base throttle percentage in auto +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=CRUISE_THROTTLE QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=1 QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=0 QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=100 QGC_TOOL_WIDGET_ITEMS\4\TYPE=COMBO -QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_DESCRIPTION=Sonar Enable -QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_PARAMID=SONAR_ENABLE +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_DESCRIPTION=Receiver RSSI sensing pin +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_PARAMID=RSSI_PIN QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COMPONENTID=1 -QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COUNT=2 -QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COUNT=14 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=A0 QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 -QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=A1 QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=A2 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=A3 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_3_VAL=3 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=A4 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_4_VAL=4 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=A5 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_5_VAL=5 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=A6 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_6_VAL=6 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=A7 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_7_VAL=7 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=A8 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_8_VAL=8 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_9_TEXT=A9 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_9_VAL=9 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_10_TEXT=A10 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_10_VAL=10 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_11_TEXT=A11 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_11_VAL=11 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_12_TEXT=A12 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_12_VAL=12 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_13_TEXT=A13 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_13_VAL=13 + QGC_TOOL_WIDGET_ITEMS\5\TYPE=COMBO -QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_DESCRIPTION=Sonar Type -QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_PARAMID=SONAR_TYPE +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_DESCRIPTION=USB Console Baud Rate +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_PARAMID=SERIAL0_BAUD QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_COMPONENTID=1 -QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_COUNT=4 -QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=XL-EZ0 -QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 -QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=LV-EZ0 -QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 -QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=XL-EZL0 -QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2 -QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=HRLV -QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_3_VAL=3 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_COUNT=9 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=1200 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=2400 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_1_VAL=2 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=4800 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_2_VAL=4 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=9600 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_3_VAL=9 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=19200 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_4_VAL=19 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=38400 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_5_VAL=38 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=57600 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_6_VAL=57 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=111100 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_7_VAL=111 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=115200 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_8_VAL=115 + QGC_TOOL_WIDGET_ITEMS\6\TYPE=COMBO -QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_DESCRIPTION=Air speed Enable -QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_PARAMID=ARSPD_ENABLE +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_DESCRIPTION=Telemetry Baud Rate +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_PARAMID=SERIAL3_BAUD QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_COMPONENTID=1 -QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_COUNT=2 -QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled -QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 -QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled -QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 -QGC_TOOL_WIDGET_ITEMS\7\TYPE=COMBO -QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_DESCRIPTION=Air speed use -QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_PARAMID=AIRSPD_USE -QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_COMPONENTID=1 -QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_COUNT=2 -QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Do Not Use -QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 -QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Use -QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 -QGC_TOOL_WIDGET_ITEMS\8\TYPE=COMBO -QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_COMBOBOX_DESCRIPTION=Optical Flow Enable -QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_COMBOBOX_PARAMID=FLOW_ENABLE -QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_COMBOBOX_COMPONENTID=1 -QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_COMBOBOX_COUNT=2 -QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled -QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 -QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled -QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 -QGC_TOOL_WIDGET_ITEMS\size=8 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_COUNT=9 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=1200 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=2400 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_1_VAL=2 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=4800 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_2_VAL=4 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=9600 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_3_VAL=9 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=19200 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_4_VAL=19 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=38400 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_5_VAL=38 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=57600 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_6_VAL=57 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=111100 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_7_VAL=111 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=115200 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_8_VAL=115 + +QGC_TOOL_WIDGET_ITEMS\size=6 diff --git a/files/ardupilotmega/ground_rover/widgets/rover.qgw b/files/ardupilotmega/ground_rover/widgets/rover.qgw index 9f5d8ee804..8e8c10c6ff 100644 --- a/files/ardupilotmega/ground_rover/widgets/rover.qgw +++ b/files/ardupilotmega/ground_rover/widgets/rover.qgw @@ -29,4 +29,25 @@ QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_PARAMID=ROV_SONAR_TRIG QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_COMPONENTID=1 QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MIN=0 QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MAX=100 -QGC_TOOL_WIDGET_ITEMS\size=5 + + +QGC_TOOL_WIDGET_ITEMS\6\TYPE=COMBO +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_DESCRIPTION=Skid Steering Input +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_PARAMID=SKID_STEER_IN +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_COMPONENTID=1 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_COUNT=2 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 +QGC_TOOL_WIDGET_ITEMS\7\TYPE=COMBO +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_DESCRIPTION=Skid Steering Output +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_PARAMID=SKID_STEER_OUT +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_COMPONENTID=1 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_COUNT=2 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Disabled +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Enabled +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 + +QGC_TOOL_WIDGET_ITEMS\size=6 \ No newline at end of file diff --git a/files/ardupilotmega/quadrotor/calibration/calibration.qgw b/files/ardupilotmega/quadrotor/calibration/calibration.qgw new file mode 100644 index 0000000000..d8e24e661c --- /dev/null +++ b/files/ardupilotmega/quadrotor/calibration/calibration.qgw @@ -0,0 +1,17 @@ +[QuadCoptor%20Frame Setup] +QGC_TOOL_WIDGET_ITEMS\1\TYPE=COMBO +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_DESCRIPTION=Quadcoptor Frame Type +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_PARAMID=FRAME +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COMPONENTID=1 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COUNT=3 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Plus +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_IMG=files/images/mavs/frames_plus.png +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=X +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_IMG=files/images/mavs/frames_x.png +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=V +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_IMG=files/images/mavs/frames-05.png +QGC_TOOL_WIDGET_ITEMS\size=1 + \ No newline at end of file diff --git a/files/ardupilotmega/quadrotor/widgets/Flight_Modes/driving_modes.qgw b/files/ardupilotmega/quadrotor/widgets/Flight_Modes/driving_modes.qgw new file mode 100644 index 0000000000..194a8b7b6e --- /dev/null +++ b/files/ardupilotmega/quadrotor/widgets/Flight_Modes/driving_modes.qgw @@ -0,0 +1,193 @@ +[Flight%20Modes] +QGC_TOOL_WIDGET_ITEMS\1\TYPE=COMBO +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_DESCRIPTION=Mode Channel +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_PARAMID=FLTMODE_CH +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COMPONENTID=1 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COUNT=12 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=RC 1 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_VAL=1 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=RC 2 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_VAL=2 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=RC 3 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_VAL=3 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=RC 4 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_3_VAL=4 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=RC 5 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_4_VAL=5 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=RC 6 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_5_VAL=6 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=RC 7 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_6_VAL=7 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=RC 8 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_7_VAL=8 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=RC 9 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_8_VAL=9 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_9_TEXT=RC 10 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_9_VAL=10 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_10_TEXT=RC 11 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_10_VAL=11 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_11_TEXT=RC 12 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_11_VAL=12 +QGC_TOOL_WIDGET_ITEMS\2\TYPE=COMBO +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_DESCRIPTION=Mode 1 (PWM 0-1230) +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_PARAMID=FLTMODE1 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_COMPONENTID=1 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_COUNT=11 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Stablilize +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Acro +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Alt Hold +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=Auto +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_3_VAL=3 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=Guided +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_4_VAL=4 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=Loiter +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_5_VAL=6 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=RTL +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_6_VAL=6 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=Circle +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_7_VAL=7 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=Pos Hold +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_8_VAL=8 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_9_TEXT=Land +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_9_VAL=9 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_10_TEXT=Toy +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_COMBOBOX_ITEM_10_VAL=11 +QGC_TOOL_WIDGET_ITEMS\3\TYPE=COMBO +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_DESCRIPTION=Mode 2 (PWM 1231-1360) +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_PARAMID=FLTMODE2 +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_COMPONENTID=1 +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_COUNT=11 +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Stablilize +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Acro +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Alt Hold +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2 +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=Auto +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_3_VAL=3 +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=Guided +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_4_VAL=4 +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=Loiter +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_5_VAL=6 +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=RTL +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_6_VAL=6 +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=Circle +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_7_VAL=7 +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=Pos Hold +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_8_VAL=8 +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_9_TEXT=Land +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_9_VAL=9 +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_10_TEXT=Toy +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_COMBOBOX_ITEM_10_VAL=1 +1QGC_TOOL_WIDGET_ITEMS\4\TYPE=COMBO +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_DESCRIPTION=Mode 3 (PWM 1361-1490) +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_PARAMID=FLTMODE3 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COMPONENTID=1 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_COUNT=11 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Stablilize +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Acro +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Alt Hold +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=Auto +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_3_VAL=3 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=Guided +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_4_VAL=4 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=Loiter +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_5_VAL=6 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=RTL +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_6_VAL=6 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=Circle +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_7_VAL=7 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=Pos Hold +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_8_VAL=8 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_9_TEXT=Land +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_9_VAL=9 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_10_TEXT=Toy +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_COMBOBOX_ITEM_10_VAL=11 +QGC_TOOL_WIDGET_ITEMS\5\TYPE=COMBO +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_DESCRIPTION=Mode 4 (PWM 1491-1620) +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_PARAMID=FLTMODE4 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_COMPONENTID=1 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_COUNT=11 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Stablilize +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Acro +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Alt Hold +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=Auto +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_3_VAL=3 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=Guided +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_4_VAL=4 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=Loiter +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_5_VAL=6 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=RTL +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_6_VAL=6 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=Circle +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_7_VAL=7 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=Pos Hold +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_8_VAL=8 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_9_TEXT=Land +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_9_VAL=9 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_10_TEXT=Toy +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_COMBOBOX_ITEM_10_VAL=11 +QGC_TOOL_WIDGET_ITEMS\6\TYPE=COMBO +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_DESCRIPTION=Mode 5 (PWM 1621-1749) +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_PARAMID=FLTMODE5 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_COMPONENTID=1 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_COUNT=11 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Stablilize +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Acro +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Alt Hold +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=Auto +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_3_VAL=3 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=Guided +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_4_VAL=4 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=Loiter +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_5_VAL=6 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=RTL +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_6_VAL=6 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=Circle +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_7_VAL=7 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=Pos Hold +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_8_VAL=8 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_9_TEXT=Land +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_9_VAL=9 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_10_TEXT=Toy +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_COMBOBOX_ITEM_10_VAL=11 +QGC_TOOL_WIDGET_ITEMS\7\TYPE=COMBO +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_DESCRIPTION=Mode 6 (PWM 1750+) +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_PARAMID=FLTMODE6 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_COMPONENTID=1 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_COUNT=11 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Stablilize +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=Acro +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=Alt Hold +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_3_TEXT=Auto +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_3_VAL=3 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_4_TEXT=Guided +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_4_VAL=4 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_5_TEXT=Loiter +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_5_VAL=6 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_6_TEXT=RTL +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_6_VAL=6 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_7_TEXT=Circle +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_7_VAL=7 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_8_TEXT=Pos Hold +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_8_VAL=8 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_9_TEXT=Land +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_9_VAL=9 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_10_TEXT=Toy +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_COMBOBOX_ITEM_10_VAL=11 +QGC_TOOL_WIDGET_ITEMS\size=7 diff --git a/files/ardupilotmega/quadrotor/widgets/airframe_config.qgw b/files/ardupilotmega/quadrotor/widgets/airframe_config.qgw new file mode 100644 index 0000000000..336d2532c8 --- /dev/null +++ b/files/ardupilotmega/quadrotor/widgets/airframe_config.qgw @@ -0,0 +1,13 @@ +[Airframe%20Config] +QGC_TOOL_WIDGET_ITEMS\1\TYPE=COMBO +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_DESCRIPTION=Quadcoptor Configuration +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_PARAMID=FRAME +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COMPONENTID=1 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_COUNT=3 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_TEXT=Plus +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_0_VAL=0 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_TEXT=X +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_1_VAL=1 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_TEXT=V +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_COMBOBOX_ITEM_2_VAL=2 +QGC_TOOL_WIDGET_ITEMS\size=1 diff --git a/files/images/mavs/frames-05.png b/files/images/mavs/frames-05.png new file mode 100644 index 0000000000000000000000000000000000000000..39ef8ec4e8ea30b910fa4536cbc1b4050ba6e4d4 GIT binary patch literal 29220 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 BPa6OL literal 0 HcmV?d00001 diff --git a/files/images/mavs/frames_plus.png b/files/images/mavs/frames_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..614770ebb13fd06ea6137dbefc5059f17a4cffe9 GIT binary patch literal 27735 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 brq2HZAe+!L;q+*V00000NkvXXu0mjfv#M5F literal 0 HcmV?d00001 diff --git a/files/px4/general/calibration/description.txt b/files/px4/general/calibration/description.txt new file mode 100644 index 0000000000..c243d4ef8a --- /dev/null +++ b/files/px4/general/calibration/description.txt @@ -0,0 +1,19 @@ + + +

Sensor Calibration

+


+

The PX4FMU sensors can be calibrated with the buttons on the right. Gyroscope (GYRO) and Accelerometer (ACCEL) calibrations have to be performed with a static, unmoved system. The magnetometer calibration needs to be performed while moving the device.

+


+

Magnetometer Calibration

+


+

Carefully follow the instructions. Click on MAG to start the calibration. Watch the communication console for further instructions (Available through Main Menu -> Tool Widgets -> Communication Console). Do not calibrate the vehicle in vincinity of metal, e.g. from a table or chair. Start the calibration, leave the system unmoved on the table. Wait for the double beep. Next move the system in a figure eight, roll and pitch it strongly, rotate around all axes and perform the figure eight also upside-down. The calibration is finished after the triple beep.

+


+

Accelerometer Calibration

+


+

Put the system on an absolutely level surface and press ACCEL, wait for the the triple beep. Do not move the system. If no flat surface is available, rather not calibrate the system.

+


+

Gyroscope Calibration

+


+

The orientation is not important for this calibration, but do not move the system until the triple beep or the matching text message in the console.

\ No newline at end of file diff --git a/files/px4/widgets/px4_calibration.qgw b/files/px4/widgets/px4_calibration.qgw new file mode 100644 index 0000000000..2a498a3ebf --- /dev/null +++ b/files/px4/widgets/px4_calibration.qgw @@ -0,0 +1,61 @@ +[PX4%20Calibration%20Tool] +QGC_TOOL_WIDGET_ITEMS\1\TYPE=COMMANDBUTTON +QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_DESCRIPTION=Reboot (only in standby) +QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_BUTTONTEXT=REBOOT +QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_COMMANDID=246 +QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false +QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM1=1 +QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM2=0 +QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM3=0 +QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM4=0 +QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM5=0 +QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM6=0 +QGC_TOOL_WIDGET_ITEMS\1\QGC_COMMAND_BUTTON_PARAM7=0 +QGC_TOOL_WIDGET_ITEMS\2\TYPE=COMMANDBUTTON +QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_DESCRIPTION=Magnetometer calibration +QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_BUTTONTEXT=MAG +QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_COMMANDID=241 +QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false +QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM1=0 +QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM2=1 +QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM3=0 +QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM4=0 +QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM5=0 +QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM6=0 +QGC_TOOL_WIDGET_ITEMS\2\QGC_COMMAND_BUTTON_PARAM7=0 +QGC_TOOL_WIDGET_ITEMS\3\TYPE=COMMANDBUTTON +QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_DESCRIPTION=Accelerometer calibration +QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_BUTTONTEXT=ACCEL +QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_COMMANDID=241 +QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false +QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM1=0 +QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM2=0 +QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM3=0 +QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM4=0 +QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM5=1 +QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM6=0 +QGC_TOOL_WIDGET_ITEMS\3\QGC_COMMAND_BUTTON_PARAM7=0 +QGC_TOOL_WIDGET_ITEMS\4\TYPE=COMMANDBUTTON +QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_DESCRIPTION=Gyroscope calibration +QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_BUTTONTEXT=GYRO +QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_COMMANDID=241 +QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false +QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM1=1 +QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM2=0 +QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM3=0 +QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM4=0 +QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM5=0 +QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM6=0 +QGC_TOOL_WIDGET_ITEMS\4\QGC_COMMAND_BUTTON_PARAM7=0 +QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_DESCRIPTION=RC Trim calibration +QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_BUTTONTEXT=TRIM +QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_COMMANDID=241 +QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAMS_VISIBLE=false +QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM1=1 +QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM2=0 +QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM3=0 +QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM4=1 +QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM5=0 +QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM6=0 +QGC_TOOL_WIDGET_ITEMS\5\QGC_COMMAND_BUTTON_PARAM7=0 +QGC_TOOL_WIDGET_ITEMS\size=5 diff --git a/files/px4/widgets/px4_fw_attitude_pid_params.qgw b/files/px4/widgets/px4_fw_attitude_pid_params.qgw new file mode 100644 index 0000000000..6f3186e78f --- /dev/null +++ b/files/px4/widgets/px4_fw_attitude_pid_params.qgw @@ -0,0 +1,8 @@ +[PX4%20Fixed%20Wing%20Attitude%20Control] +QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=Roll Rate P Gain +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=FW_ROLLRATE_P +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=2 +QGC_TOOL_WIDGET_ITEMS\size=1 diff --git a/files/px4/widgets/px4_fw_position_pid_params.qgw b/files/px4/widgets/px4_fw_position_pid_params.qgw new file mode 100644 index 0000000000..e99f9890e9 --- /dev/null +++ b/files/px4/widgets/px4_fw_position_pid_params.qgw @@ -0,0 +1,8 @@ +[PX4%20Fixed%20Wing%20Position%20Control] +QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=Heading P Gain +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=FW_HEADING_P +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=2 +QGC_TOOL_WIDGET_ITEMS\size=1 diff --git a/files/px4/widgets/px4_mc_attitude_pid_params.qgw b/files/px4/widgets/px4_mc_attitude_pid_params.qgw new file mode 100644 index 0000000000..1931dfa3b9 --- /dev/null +++ b/files/px4/widgets/px4_mc_attitude_pid_params.qgw @@ -0,0 +1,72 @@ +[PX4%20Multirotor%20Attitude%20Control] +QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=Attitude P Gain +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=MC_ATT_P +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=1.5 +QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=Attitude I Gain +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=MC_ATT_I +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=1 +QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=Attitude D Gain +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=MC_ATT_D +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=1 +QGC_TOOL_WIDGET_ITEMS\4\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DESCRIPTION=Attitude Anti-Windup +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_PARAMID=MC_ATT_AWU +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MAX=1 +QGC_TOOL_WIDGET_ITEMS\5\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_DESCRIPTION=Attitude Output Limit +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_PARAMID=MC_ATT_LIM +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MAX=3 +QGC_TOOL_WIDGET_ITEMS\6\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_DESCRIPTION=Heading / Yaw P Gain +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_PARAMID=MC_YAWPOS_P +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MAX=1.2 +QGC_TOOL_WIDGET_ITEMS\7\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_DESCRIPTION=Heading / Yaw D Gain +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_PARAMID=MC_YAWPOS_D +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_MAX=1 +QGC_TOOL_WIDGET_ITEMS\8\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_DESCRIPTION=Roll / Pitch Rate P Gain +QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_PARAMID=MC_ATTRATE_P +QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_MAX=1.5 +QGC_TOOL_WIDGET_ITEMS\9\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_DESCRIPTION=Roll / Pitch Rate D Gain +QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_PARAMID=MC_ATTRATE_D +QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_MAX=0.3 +QGC_TOOL_WIDGET_ITEMS\10\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_DESCRIPTION=Yaw Rate P Gain +QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_PARAMID=MC_YAWRATE_P +QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_MAX=1 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DISPLAY_INFO=false +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DISPLAY_INFO=true +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DISPLAY_INFO=true +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DISPLAY_INFO=true +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_DISPLAY_INFO=true +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_DISPLAY_INFO=true +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_DISPLAY_INFO=true +QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_DISPLAY_INFO=true +QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_DISPLAY_INFO=true +QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_DISPLAY_INFO=true +QGC_TOOL_WIDGET_ITEMS\size=10 diff --git a/files/px4/widgets/px4_mc_position_pid_params.qgw b/files/px4/widgets/px4_mc_position_pid_params.qgw new file mode 100644 index 0000000000..1931dfa3b9 --- /dev/null +++ b/files/px4/widgets/px4_mc_position_pid_params.qgw @@ -0,0 +1,72 @@ +[PX4%20Multirotor%20Attitude%20Control] +QGC_TOOL_WIDGET_ITEMS\1\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DESCRIPTION=Attitude P Gain +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_PARAMID=MC_ATT_P +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_MAX=1.5 +QGC_TOOL_WIDGET_ITEMS\2\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DESCRIPTION=Attitude I Gain +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_PARAMID=MC_ATT_I +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_MAX=1 +QGC_TOOL_WIDGET_ITEMS\3\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DESCRIPTION=Attitude D Gain +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_PARAMID=MC_ATT_D +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_MAX=1 +QGC_TOOL_WIDGET_ITEMS\4\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DESCRIPTION=Attitude Anti-Windup +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_PARAMID=MC_ATT_AWU +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_MAX=1 +QGC_TOOL_WIDGET_ITEMS\5\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_DESCRIPTION=Attitude Output Limit +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_PARAMID=MC_ATT_LIM +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_MAX=3 +QGC_TOOL_WIDGET_ITEMS\6\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_DESCRIPTION=Heading / Yaw P Gain +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_PARAMID=MC_YAWPOS_P +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_MAX=1.2 +QGC_TOOL_WIDGET_ITEMS\7\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_DESCRIPTION=Heading / Yaw D Gain +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_PARAMID=MC_YAWPOS_D +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_MAX=1 +QGC_TOOL_WIDGET_ITEMS\8\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_DESCRIPTION=Roll / Pitch Rate P Gain +QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_PARAMID=MC_ATTRATE_P +QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_MAX=1.5 +QGC_TOOL_WIDGET_ITEMS\9\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_DESCRIPTION=Roll / Pitch Rate D Gain +QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_PARAMID=MC_ATTRATE_D +QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_MAX=0.3 +QGC_TOOL_WIDGET_ITEMS\10\TYPE=SLIDER +QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_DESCRIPTION=Yaw Rate P Gain +QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_PARAMID=MC_YAWRATE_P +QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_COMPONENTID=50 +QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_MIN=0 +QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_MAX=1 +QGC_TOOL_WIDGET_ITEMS\1\QGC_PARAM_SLIDER_DISPLAY_INFO=false +QGC_TOOL_WIDGET_ITEMS\2\QGC_PARAM_SLIDER_DISPLAY_INFO=true +QGC_TOOL_WIDGET_ITEMS\3\QGC_PARAM_SLIDER_DISPLAY_INFO=true +QGC_TOOL_WIDGET_ITEMS\4\QGC_PARAM_SLIDER_DISPLAY_INFO=true +QGC_TOOL_WIDGET_ITEMS\5\QGC_PARAM_SLIDER_DISPLAY_INFO=true +QGC_TOOL_WIDGET_ITEMS\6\QGC_PARAM_SLIDER_DISPLAY_INFO=true +QGC_TOOL_WIDGET_ITEMS\7\QGC_PARAM_SLIDER_DISPLAY_INFO=true +QGC_TOOL_WIDGET_ITEMS\8\QGC_PARAM_SLIDER_DISPLAY_INFO=true +QGC_TOOL_WIDGET_ITEMS\9\QGC_PARAM_SLIDER_DISPLAY_INFO=true +QGC_TOOL_WIDGET_ITEMS\10\QGC_PARAM_SLIDER_DISPLAY_INFO=true +QGC_TOOL_WIDGET_ITEMS\size=10 diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index dac4449cdd..7abbce9eeb 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -228,7 +228,8 @@ FORMS += src/ui/MainWindow.ui \ src/ui/QGCHilFlightGearConfiguration.ui \ src/ui/QGCHilJSBSimConfiguration.ui \ src/ui/QGCHilXPlaneConfiguration.ui \ - src/ui/designer/QGCComboBox.ui + src/ui/designer/QGCComboBox.ui \ + src/ui/designer/QGCTextLabel.ui INCLUDEPATH += src \ src/ui \ src/ui/linechart \ @@ -372,7 +373,8 @@ HEADERS += src/MG.h \ src/ui/QGCHilFlightGearConfiguration.h \ src/ui/QGCHilJSBSimConfiguration.h \ src/ui/QGCHilXPlaneConfiguration.h \ - src/ui/designer/QGCComboBox.h + src/ui/designer/QGCComboBox.h \ + src/ui/designer/QGCTextLabel.h # Google Earth is only supported on Mac OS and Windows with Visual Studio Compiler macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010::HEADERS += src/ui/map3D/QGCGoogleEarthView.h @@ -535,7 +537,8 @@ SOURCES += src/main.cc \ src/ui/QGCHilFlightGearConfiguration.cc \ src/ui/QGCHilJSBSimConfiguration.cc \ src/ui/QGCHilXPlaneConfiguration.cc \ - src/ui/designer/QGCComboBox.cc + src/ui/designer/QGCComboBox.cc \ + src/ui/designer/QGCTextLabel.cc # Enable Google Earth only on Mac OS and Windows with Visual Studio compiler macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010::SOURCES += src/ui/map3D/QGCGoogleEarthView.cc @@ -669,4 +672,3 @@ win32-msvc2008|win32-msvc2010 { } unix:!macx:!symbian: LIBS += -losg ->>>>>>> New ComboBox param configuration UI element, and qgw widgets for general diff --git a/src/ui/QGCVehicleConfig.cc b/src/ui/QGCVehicleConfig.cc index 5079615980..1bcbf5ddc4 100644 --- a/src/ui/QGCVehicleConfig.cc +++ b/src/ui/QGCVehicleConfig.cc @@ -156,7 +156,8 @@ void QGCVehicleConfig::stopCalibrationRC() ui->rcTypeComboBox->setEnabled(true); ui->rcCalibrationButton->setText(tr("Start RC Calibration")); } -void QGCVehicleConfig::loadQgcConfig() + +void QGCVehicleConfig::loadQgcConfig(bool primary) { QDir autopilotdir(qApp->applicationDirPath() + "/files/" + mav->getAutopilotTypeName().toLower()); QDir generaldir = QDir(autopilotdir.absolutePath() + "/general/widgets"); @@ -185,15 +186,18 @@ void QGCVehicleConfig::loadQgcConfig() box->setTitle(tool->objectName()); box->setLayout(new QVBoxLayout()); box->layout()->addWidget(tool); - if (left) - { - left = false; - ui->leftGeneralLayout->addWidget(box); - } - else + if (!primary) { - left = true; - ui->rightGeneralLayout->addWidget(box); + if (left) + { + left = false; + ui->leftGeneralLayout->addWidget(box); + } + else + { + left = true; + ui->rightGeneralLayout->addWidget(box); + } } } else { delete tool; @@ -213,15 +217,18 @@ void QGCVehicleConfig::loadQgcConfig() box->setTitle(tool->objectName()); box->setLayout(new QVBoxLayout()); box->layout()->addWidget(tool); - if (left) - { - left = false; - ui->leftAdvancedLayout->addWidget(box); - } - else + if (!primary) { - left = true; - ui->rightAdvancedLayout->addWidget(box); + if (left) + { + left = false; + ui->leftAdvancedLayout->addWidget(box); + } + else + { + left = true; + ui->rightAdvancedLayout->addWidget(box); + } } } else { @@ -230,18 +237,112 @@ void QGCVehicleConfig::loadQgcConfig() } } + //Load tabs for general configuration + foreach (QString dir,generaldir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) + { + QWidget *tab = new QWidget(ui->tabWidget); + tab->setLayout(new QVBoxLayout()); + ui->tabWidget->insertTab(2,tab,dir); + tab->show(); + QGroupBox *gbox = new QGroupBox(tab); + tab->layout()->addWidget(gbox); + gbox->show(); + gbox->setLayout(new QVBoxLayout()); + QDir newdir = QDir(generaldir.absoluteFilePath(dir)); + foreach (QString file,newdir.entryList(QDir::Files| QDir::NoDotAndDotDot)) + { + if (file.toLower().endsWith(".qgw")) { + tool = new QGCToolWidget("", this); + if (tool->loadSettings(newdir.absoluteFilePath(file), false)) + { + toolWidgets.append(tool); + //ui->sensorLayout->addWidget(tool); + QGroupBox *box = new QGroupBox(this); + box->setTitle(tool->objectName()); + box->setLayout(new QVBoxLayout()); + box->layout()->addWidget(tool); + gbox->layout()->addWidget(box); + } else { + delete tool; + } + } + } + } + + //Load tabs for vehicle specific configuration + foreach (QString dir,vehicledir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) + { + QWidget *tab = new QWidget(ui->tabWidget); + tab->setLayout(new QVBoxLayout()); + ui->tabWidget->insertTab(2,tab,dir); + tab->show(); + QGroupBox *gbox = new QGroupBox(tab); + tab->layout()->addWidget(gbox); + gbox->show(); + gbox->setLayout(new QVBoxLayout()); + QDir newdir = QDir(vehicledir.absoluteFilePath(dir)); + foreach (QString file,newdir.entryList(QDir::Files| QDir::NoDotAndDotDot)) + { + if (file.toLower().endsWith(".qgw")) { + tool = new QGCToolWidget("", this); + tool->addUAS(mav); + if (tool->loadSettings(newdir.absoluteFilePath(file), false)) + { + toolWidgets.append(tool); + //ui->sensorLayout->addWidget(tool); + QGroupBox *box = new QGroupBox(this); + box->setTitle(tool->objectName()); + box->setLayout(new QVBoxLayout()); + box->layout()->addWidget(tool); + gbox->layout()->addWidget(box); + } else { + delete tool; + } + } + } + } // Load calibration //TODO: Handle this more gracefully, maybe have it scan the directory for multiple calibration entries? tool = new QGCToolWidget("", this); + tool->addUAS(mav); if (tool->loadSettings(autopilotdir.absolutePath() + "/general/calibration/calibration.qgw", false)) { toolWidgets.append(tool); - ui->sensorLayout->addWidget(tool); + QGroupBox *box = new QGroupBox(this); + box->setTitle(tool->objectName()); + box->setLayout(new QVBoxLayout()); + box->layout()->addWidget(tool); + ui->sensorLayout->addWidget(box); + } else { + delete tool; + } + + + tool = new QGCToolWidget("", this); + tool->addUAS(mav); + if (tool->loadSettings(autopilotdir.absolutePath() + "/" + mav->getSystemTypeName().toLower() + "/calibration/calibration.qgw", false)) + { + toolWidgets.append(tool); + QGroupBox *box = new QGroupBox(this); + box->setTitle(tool->objectName()); + box->setLayout(new QVBoxLayout()); + box->layout()->addWidget(tool); + ui->sensorLayout->addWidget(box); } else { delete tool; } + //description.txt + QFile sensortipsfile(autopilotdir.absolutePath() + "/general/calibration/description.txt"); + sensortipsfile.open(QIODevice::ReadOnly); + ui->sensorTips->setHtml(sensortipsfile.readAll()); + sensortipsfile.close(); + + + + + } void QGCVehicleConfig::loadConfig() @@ -267,10 +368,11 @@ void QGCVehicleConfig::loadConfig() QFile xmlfile(autopilotdir.absolutePath() + "/arduplane.pdef.xml"); if (xmlfile.exists() && !xmlfile.open(QIODevice::ReadOnly)) { - loadQgcConfig(); + loadQgcConfig(false); doneLoadingConfig = true; return; } + loadQgcConfig(true); QXmlStreamReader xml(xmlfile.readAll()); xmlfile.close(); @@ -394,6 +496,7 @@ void QGCVehicleConfig::loadConfig() set["count"] = arraycount; tool = new QGCToolWidget("", this); + tool->addUAS(mav); tool->setTitle(parametersname); tool->setObjectName(parametersname); tool->setSettings(set); diff --git a/src/ui/QGCVehicleConfig.h b/src/ui/QGCVehicleConfig.h index d05b064c93..242c11b202 100644 --- a/src/ui/QGCVehicleConfig.h +++ b/src/ui/QGCVehicleConfig.h @@ -32,7 +32,7 @@ public slots: /** Set the MAV currently being calibrated */ void setActiveUAS(UASInterface* active); /** Fallback function, automatically called by loadConfig() upon failure to find and xml file*/ - void loadQgcConfig(); + void loadQgcConfig(bool primary); /** Load configuration from xml file */ void loadConfig(); /** Start the RC calibration routine */ diff --git a/src/ui/QGCVehicleConfig.ui b/src/ui/QGCVehicleConfig.ui index 45adc2a6b3..158b6bc771 100644 --- a/src/ui/QGCVehicleConfig.ui +++ b/src/ui/QGCVehicleConfig.ui @@ -6,8 +6,8 @@ 0 0 - 780 - 586 + 760 + 541 @@ -725,50 +725,47 @@ Sensor Calibration - - - 20 - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:18pt;">Sensor Calibration</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:16pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:12pt;">The PX4FMU sensors can be calibrated with the buttons on the right. Gyroscope (GYRO) and Accelerometer (ACCEL) calibrations have to be performed with a static, unmoved system. The magnetometer calibration needs to be performed while moving the device.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:12pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:16pt;">Magnetometer Calibration</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:16pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:12pt;">Carefully follow the instructions. Click on MAG to start the calibration. Watch the communication console for further instructions (Available through Main Menu -&gt; Tool Widgets -&gt; Communication Console). Do not calibrate the vehicle in vincinity of metal, e.g. from a table or chair. Start the calibration, leave the system unmoved on the table. Wait for the double beep. Next move the system in a figure eight, roll and pitch it strongly, rotate around all axes and perform the figure eight also upside-down. The calibration is finished after the triple beep.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:12pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:16pt;">Accelerometer Calibration</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:16pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:12pt;">Put the system on an absolutely level surface and press ACCEL, wait for the the triple beep. Do not move the system. If no flat surface is available, rather not calibrate the system.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:12pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:16pt;">Gyroscope Calibration</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:16pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:12pt;">The orientation is not important for this calibration, but do not move the system until the triple beep or the matching text message in the console.</span></p></body></html> - - +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + + + + + true + + + + + 0 + 0 + 354 + 448 + + + + + + + + + + + + + @@ -825,8 +822,8 @@ p, li { white-space: pre-wrap; } 0 0 - 364 - 449 + 354 + 404 @@ -862,8 +859,8 @@ p, li { white-space: pre-wrap; } 0 0 - 364 - 449 + 354 + 404 @@ -937,8 +934,8 @@ p, li { white-space: pre-wrap; } 0 0 - 364 - 449 + 354 + 404 @@ -974,8 +971,8 @@ p, li { white-space: pre-wrap; } 0 0 - 364 - 449 + 354 + 404 diff --git a/src/ui/designer/QGCComboBox.cc b/src/ui/designer/QGCComboBox.cc index e982c67474..df96567658 100644 --- a/src/ui/designer/QGCComboBox.cc +++ b/src/ui/designer/QGCComboBox.cc @@ -39,6 +39,7 @@ QGCComboBox::QGCComboBox(QWidget *parent) : ui->editItemNameLabel->hide(); ui->itemValueLabel->hide(); ui->itemNameLabel->hide(); + ui->infoLabel->hide(); ui->editOptionComboBox->setEnabled(false); isDisabled = true; //ui->editLine1->setStyleSheet("QWidget { border: 1px solid #66666B; border-radius: 3px; padding: 10px 0px 0px 0px; background: #111122; }"); @@ -110,7 +111,11 @@ void QGCComboBox::setActiveUAS(UASInterface* activeUas) //requestParameter(); // Set param info QString text = uas->getParamManager()->getParamInfo(parameterName); - ui->infoLabel->setToolTip(text); + if (text != "") + { + ui->infoLabel->setToolTip(text); + ui->infoLabel->show(); + } // Force-uncheck and hide label if no description is available if (ui->editInfoCheckBox->isChecked()) { @@ -165,7 +170,7 @@ void QGCComboBox::selectParameter(int paramIndex) // Description QString text = uas->getParamManager()->getParamInfo(parameterName); - ui->infoLabel->setText(text); + //ui->infoLabel->setText(text); showInfo(!(text.length() > 0)); } } @@ -369,6 +374,11 @@ void QGCComboBox::readSettings(const QString& pre,const QVariantMap& settings) int num = settings.value(pre + "QGC_PARAM_COMBOBOX_COUNT").toInt(); for (int i=0;ieditOptionComboBox->addItem(settings.value(pre + "QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_TEXT").toString()); //qDebug() << "Adding val:" << settings.value(pre + "QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_TEXT").toString() << settings.value(pre + "QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_VAL").toInt(); comboBoxTextToValMap[settings.value(pre + "QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_TEXT").toString()] = settings.value(pre + "QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_VAL").toInt(); @@ -397,6 +407,11 @@ void QGCComboBox::readSettings(const QSettings& settings) int num = settings.value("QGC_PARAM_COMBOBOX_COUNT").toInt(); for (int i=0;ieditOptionComboBox->addItem(settings.value("QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_TEXT").toString()); qDebug() << "Adding val:" << settings.value("QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i)).toString() << settings.value("QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_VAL").toInt(); comboBoxTextToValMap[settings.value("QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_TEXT").toString()] = settings.value("QGC_PARAM_COMBOBOX_ITEM_" + QString::number(i) + "_VAL").toInt(); @@ -421,6 +436,7 @@ void QGCComboBox::delButtonClicked() } void QGCComboBox::comboBoxIndexChanged(QString val) { + ui->imageLabel->setPixmap(comboBoxIndexToPixmap[ui->editOptionComboBox->currentIndex()]); switch (parameterValue.type()) { case QVariant::Char: diff --git a/src/ui/designer/QGCComboBox.h b/src/ui/designer/QGCComboBox.h index 96270c7161..e40eb92a51 100644 --- a/src/ui/designer/QGCComboBox.h +++ b/src/ui/designer/QGCComboBox.h @@ -49,6 +49,7 @@ protected slots: /** @brief Updates current parameter based on new combobox value */ void comboBoxIndexChanged(QString val); protected: + QMap comboBoxIndexToPixmap; QMap comboBoxTextToValMap; ///< Comboboxtext/parameter value map QString parameterName; ///< Key/Name of the parameter QVariant parameterValue; ///< Value of the parameter diff --git a/src/ui/designer/QGCComboBox.ui b/src/ui/designer/QGCComboBox.ui index dc21384bde..4a12005c37 100644 --- a/src/ui/designer/QGCComboBox.ui +++ b/src/ui/designer/QGCComboBox.ui @@ -35,66 +35,134 @@ 12 - - + + - 0 + 60 0 - - Qt::Horizontal + + Name + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::LeftToRight + + + ? + + + QToolButton::DelayedPopup + + + Qt::ToolButtonIconOnly + + + false + + + Qt::NoArrow + + + + + + + <Parameter Name / Label> + + + + + + + + + + + + + + + + Name + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + false + + + Select component + + + Select component + + + + + + + Add Item - + - Done + Delete Item - - - - - 0 - 0 - + + + + Value - - Qt::Horizontal + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - Qt::Horizontal + + + + false - + + Select parameter + + + Select parameter + + + + + + 0 - 20 + 0 - - - - - Qt::Vertical - - - - 20 - 40 - + Qt::Horizontal - + - + @@ -113,7 +181,14 @@ - + + + + Done + + + + @@ -138,7 +213,7 @@ - + Show Info @@ -148,134 +223,75 @@ - - - - Please click first on refresh to update selection menus.. - - - - - - - true - - - Refresh - - - - - - - false - - - Select parameter - - - Select parameter - - - - - - - - - - false - - - Select component - - - Select component - - - - - - - Delete Item + + + + + 0 + 0 + - - - - - - Add Item + + Qt::Horizontal - - - - - - - - - - Name + + + + Qt::Vertical - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 20 + 40 + - + - - - - Value + + + + Qt::Horizontal - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 0 + 20 + - + - - + + - <Parameter Name / Label> + Please click first on refresh to update selection menus.. - - - - Qt::LeftToRight + + + + true - ? - - - QToolButton::DelayedPopup - - - Qt::ToolButtonIconOnly - - - false - - - Qt::NoArrow + Refresh - - - + + + - 60 - 0 + 16777215 + 150 - Name + - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + true diff --git a/src/ui/designer/QGCCommandButton.cc b/src/ui/designer/QGCCommandButton.cc index fd5ffeea21..a237b832b9 100644 --- a/src/ui/designer/QGCCommandButton.cc +++ b/src/ui/designer/QGCCommandButton.cc @@ -116,7 +116,10 @@ void QGCCommandButton::sendCommand() float param6 = ui->editParam6SpinBox->value(); float param7 = ui->editParam7SpinBox->value(); int component = ui->editComponentSpinBox->value(); - + if (showlabelname != "") + { + emit showLabel(showlabelname,index); + } QGCToolWidgetItem::uas->executeCommand(command, confirm, param1, param2, param3, param4, param5, param6, param7, component); //qDebug() << __FILE__ << __LINE__ << "SENDING COMMAND" << index; } @@ -309,6 +312,8 @@ void QGCCommandButton::readSettings(const QSettings& settings) ui->editParam6SpinBox->setValue(settings.value("QGC_COMMAND_BUTTON_PARAM6", 0.0).toDouble()); ui->editParam7SpinBox->setValue(settings.value("QGC_COMMAND_BUTTON_PARAM7", 0.0).toDouble()); + showlabelname = settings.value("QGC_COMMAND_BUTTON_LABEL","").toString(); + ui->editCommandComboBox->setCurrentIndex(0); // Find combobox entry for this data diff --git a/src/ui/designer/QGCCommandButton.h b/src/ui/designer/QGCCommandButton.h index 7832bef890..0073bae5f1 100644 --- a/src/ui/designer/QGCCommandButton.h +++ b/src/ui/designer/QGCCommandButton.h @@ -26,8 +26,10 @@ public slots: void writeSettings(QSettings& settings); void readSettings(const QSettings& settings); void readSettings(const QString& pre,const QVariantMap& settings); - +signals: + void showLabel(QString name, int num); private: + QString showlabelname; Ui::QGCCommandButton *ui; UASInterface* uas; }; diff --git a/src/ui/designer/QGCParamSlider.cc b/src/ui/designer/QGCParamSlider.cc index 92cb3fa8ca..5c82bef701 100644 --- a/src/ui/designer/QGCParamSlider.cc +++ b/src/ui/designer/QGCParamSlider.cc @@ -41,6 +41,7 @@ QGCParamSlider::QGCParamSlider(QWidget *parent) : ui->editMaxSpinBox->hide(); ui->editLine1->hide(); ui->editLine2->hide(); + ui->infoLabel->hide(); //ui->editLine1->setStyleSheet("QWidget { border: 1px solid #66666B; border-radius: 3px; padding: 10px 0px 0px 0px; background: #111122; }"); //ui->editLine2->setStyleSheet("QWidget { border: 1px solid #66666B; border-radius: 3px; padding: 10px 0px 0px 0px; background: #111122; }"); @@ -107,7 +108,11 @@ void QGCParamSlider::setActiveUAS(UASInterface* activeUas) //requestParameter(); // Set param info QString text = uas->getParamManager()->getParamInfo(parameterName); - ui->infoLabel->setToolTip(text); + if (text != "") + { + ui->infoLabel->setToolTip(text); + ui->infoLabel->show(); + } // Force-uncheck and hide label if no description is available if (ui->editInfoCheckBox->isChecked()) { @@ -195,9 +200,10 @@ void QGCParamSlider::selectParameter(int paramIndex) } // Description - QString text = uas->getParamManager()->getParamInfo(parameterName); - ui->infoLabel->setText(text); - showInfo(!(text.length() > 0)); + //QString text = uas->getParamManager()->getParamInfo(parameterName); + //ui->infoLabel->setText(text); + + //showInfo(!(text.length() > 0)); } } } diff --git a/src/ui/designer/QGCTextLabel.cc b/src/ui/designer/QGCTextLabel.cc new file mode 100644 index 0000000000..e824e018f2 --- /dev/null +++ b/src/ui/designer/QGCTextLabel.cc @@ -0,0 +1,189 @@ +#include + +#include "QGCTextLabel.h" +#include "ui_QGCTextLabel.h" + +#include "MAVLinkProtocol.h" +#include "UASManager.h" + +QGCTextLabel::QGCTextLabel(QWidget *parent) : + QGCToolWidgetItem("Command Button", parent), + ui(new Ui::QGCTextLabel) +{ + uas = 0; + enabledNum = -1; + ui->setupUi(this); + + connect(ui->editFinishButton, SIGNAL(clicked()), this, SLOT(endEditMode())); + + // Hide all edit items + ui->editFinishButton->hide(); + ui->editNameLabel->hide(); + ui->editTextParam->hide(); + ui->editComponentSpinBox->hide(); + ui->editLine1->hide(); + ui->editLine2->hide(); + + ui->editLine1->setStyleSheet("QWidget { border: 1px solid #66666B; border-radius: 3px; padding: 10px 0px 0px 0px; background: #111122; }"); + ui->editLine2->setStyleSheet("QWidget { border: 1px solid #66666B; border-radius: 3px; padding: 10px 0px 0px 0px; background: #111122; }"); + + // Add commands to combo box + +} + +QGCTextLabel::~QGCTextLabel() +{ + delete ui; +} + + + +void QGCTextLabel::startEditMode() +{ + // Hide elements + ui->nameLabel->hide(); + + ui->editTextParam->show(); + ui->editFinishButton->show(); + ui->editNameLabel->show(); + ui->editComponentSpinBox->show(); + ui->editLine1->show(); + ui->editLine2->show(); + //setStyleSheet("QGroupBox { border: 1px solid #66666B; border-radius: 3px; padding: 10px 0px 0px 0px; background: #111122; }"); + + // Attempt to undock the dock widget + QWidget* p = this; + QDockWidget* dock; + + do { + p = p->parentWidget(); + dock = dynamic_cast(p); + + if (dock) + { + dock->setFloating(true); + break; + } + } while (p && !dock); + + isInEditMode = true; +} + +void QGCTextLabel::endEditMode() +{ + ui->editFinishButton->hide(); + ui->editTextParam->hide(); + ui->editNameLabel->hide(); + ui->editComponentSpinBox->hide(); + ui->editLine1->hide(); + ui->editLine2->hide(); + + ui->nameLabel->show(); + + // Write to settings + emit editingFinished(); + //setStyleSheet(""); + + // Attempt to dock the dock widget + QWidget* p = this; + QDockWidget* dock; + + do { + p = p->parentWidget(); + dock = dynamic_cast(p); + + if (dock) + { + dock->setFloating(false); + break; + } + } while (p && !dock); + + isInEditMode = false; +} + +void QGCTextLabel::writeSettings(QSettings& settings) +{ + qDebug() << "COMMAND BUTTON WRITING SETTINGS"; + settings.setValue("TYPE", "COMMANDBUTTON"); + settings.setValue("QGC_COMMAND_BUTTON_DESCRIPTION", ui->nameLabel->text()); + + settings.sync(); +} +void QGCTextLabel::readSettings(const QString& pre,const QVariantMap& settings) +{ + ui->editTextParam->setText(settings.value(pre + "QGC_TEXT_SOURCE", "UNKNOWN").toString()); + //ui->editCommandComboBox->setCurrentIndex(settings.value(pre + "QGC_COMMAND_BUTTON_COMMANDID", 0).toInt()); + if (ui->editTextParam->text() == "NONE") + { + ui->editNameLabel->setText(settings.value(pre + "QGC_TEXT_TEXT","").toString()); + ui->nameLabel->setText(ui->editNameLabel->text()); + } + else if (ui->editTextParam->text() == "MAV") + { + //MAV command text + connect(uas,SIGNAL(textMessageReceived(int,int,int,QString)),this,SLOT(textMessageReceived(int,int,int,QString))); + } + + //int commandId = settings.value(pre + "QGC_COMMAND_BUTTON_COMMANDID", 0).toInt(); + + + + + //ui->editNameLabel->setText(settings.value(pre + "QGC_COMMAND_BUTTON_DESCRIPTION", "ERROR LOADING BUTTON").toString()); + //ui->nameLabel->setText(settings.value(pre + "QGC_COMMAND_BUTTON_DESCRIPTION", "ERROR LOADING BUTTON").toString()); +} +void QGCTextLabel::textMessageReceived(int uasid, int component, int severity, QString message) +{ + if (enabledNum != -1) + { + //SUCCESS: Executed CMD: 241 + if (message.contains("SUCCESS")) + { + if (message.trimmed().endsWith(QString::number(enabledNum))) + { + enabledNum = -1; + ui->textLabel->setText(ui->textLabel->text() + " Complete"); + } + } + else + { + ui->textLabel->setText(message); + } + } +} + +void QGCTextLabel::readSettings(const QSettings& settings) +{ + //ui->editNameLabel->setText(settings.value("QGC_COMMAND_BUTTON_DESCRIPTION", "ERROR LOADING BUTTON").toString()); + //ui->nameLabel->setText(settings.value("QGC_COMMAND_BUTTON_DESCRIPTION", "ERROR LOADING BUTTON").toString()); + ui->editTextParam->setText(settings.value("QGC_TEXT_SOURCE", "UNKNOWN").toString()); + ui->editNameLabel->setText(settings.value("QGC_TEXT_TEXT","").toString()); + //ui->editCommandComboBox->setCurrentIndex(settings.value(pre + "QGC_COMMAND_BUTTON_COMMANDID", 0).toInt()); + if (ui->editTextParam->text() == "NONE") + { + ui->textLabel->setText(ui->editNameLabel->text()); + ui->nameLabel->setText(""); + } + else if (ui->editTextParam->text() == "MAV") + { + //MAV command text + ui->nameLabel->setText(ui->editNameLabel->text()); + ui->textLabel->setText(""); + connect(uas,SIGNAL(textMessageReceived(int,int,int,QString)),this,SLOT(textMessageReceived(int,int,int,QString))); + } + else + { + + } +} +void QGCTextLabel::enableText(int num) +{ + enabledNum = num; + +} + +void QGCTextLabel::setActiveUAS(UASInterface *uas) +{ + this->uas = uas; +} diff --git a/src/ui/designer/QGCTextLabel.h b/src/ui/designer/QGCTextLabel.h new file mode 100644 index 0000000000..67ed0ae638 --- /dev/null +++ b/src/ui/designer/QGCTextLabel.h @@ -0,0 +1,34 @@ +#ifndef QGCTEXTLABEL_H +#define QGCTEXTLABEL_H + +#include "QGCToolWidgetItem.h" + +namespace Ui +{ +class QGCTextLabel; +} + +class UASInterface; + +class QGCTextLabel : public QGCToolWidgetItem +{ + Q_OBJECT + +public: + explicit QGCTextLabel(QWidget *parent = 0); + ~QGCTextLabel(); + void setActiveUAS(UASInterface *uas); + void enableText(int num); +public slots: + void startEditMode(); + void endEditMode(); + void writeSettings(QSettings& settings); + void readSettings(const QSettings& settings); + void readSettings(const QString& pre,const QVariantMap& settings); + void textMessageReceived(int uasid, int component, int severity, QString message); +private: + int enabledNum; + Ui::QGCTextLabel *ui; +}; + +#endif // QGCTEXTLABEL_H diff --git a/src/ui/designer/QGCTextLabel.ui b/src/ui/designer/QGCTextLabel.ui new file mode 100644 index 0000000000..78ba1dda55 --- /dev/null +++ b/src/ui/designer/QGCTextLabel.ui @@ -0,0 +1,133 @@ + + + QGCTextLabel + + + + 0 + 0 + 1183 + 166 + + + + Form + + + + 6 + + + 3 + + + 6 + + + 3 + + + + + <Label Description Label (in front of text)> + + + + + + + + 0 + 0 + + + + Qt::Horizontal + + + + + + + + 50 + 0 + + + + Description + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + <Text Param> + + + + + + + Done + + + + + + + Component ID: + + + 0 + + + 255 + + + + + + + + 0 + 0 + + + + Qt::Horizontal + + + + + + + TextLabel + + + + + + + + + editNameLabel + textChanged(QString) + nameLabel + setText(QString) + + + 114 + 22 + + + 114 + 55 + + + + + diff --git a/src/ui/designer/QGCToolWidget.cc b/src/ui/designer/QGCToolWidget.cc index 0b285d2b2b..84dd6aebcd 100644 --- a/src/ui/designer/QGCToolWidget.cc +++ b/src/ui/designer/QGCToolWidget.cc @@ -12,6 +12,7 @@ #include "QGCParamSlider.h" #include "QGCComboBox.h" +#include "QGCTextLabel.h" #include "QGCCommandButton.h" #include "UASManager.h" @@ -148,6 +149,20 @@ QList QGCToolWidget::createWidgetsFromSettings(QWidget* parent, return instances()->values(); } +void QGCToolWidget::showLabel(QString name,int num) +{ + for (int i=0;iobjectName() == name) + { + QGCTextLabel *label = qobject_cast(toolItemList[i]); + if (label) + { + label->enableText(num); + } + } + } +} /** * @param singleinstance If this is set to true, the widget settings will only be loaded if not another widget with the same title exists @@ -266,6 +281,11 @@ void QGCToolWidget::loadSettings(QVariantMap& settings) item = new QGCCommandButton(this); //qDebug() << "CREATED COMMANDBUTTON"; } + else if (type == "TEXT") + { + item = new QGCTextLabel(this); + item->setActiveUAS(mav); + } else if (type == "SLIDER") { item = new QGCParamSlider(this); @@ -310,19 +330,30 @@ void QGCToolWidget::loadSettings(QSettings& settings) QGCToolWidgetItem* item = NULL; if (type == "COMMANDBUTTON") { - item = new QGCCommandButton(this); + QGCCommandButton *button = new QGCCommandButton(this); + connect(button,SIGNAL(showLabel(QString,int)),this,SLOT(showLabel(QString,int))); + item = button; + item->setActiveUAS(mav); //qDebug() << "CREATED COMMANDBUTTON"; } else if (type == "SLIDER") { item = new QGCParamSlider(this); + item->setActiveUAS(mav); //qDebug() << "CREATED PARAM SLIDER"; } else if (type == "COMBO") { item = new QGCComboBox(this); + item->setActiveUAS(mav); qDebug() << "CREATED PARAM COMBOBOX"; } + else if (type == "TEXT") + { + item = new QGCTextLabel(this); + item->setObjectName(settings.value("QGC_TEXT_ID").toString()); + item->setActiveUAS(mav); + } if (item) { @@ -565,6 +596,7 @@ void QGCToolWidget::addToolWidget(QGCToolWidgetItem* widget) } connect(widget, SIGNAL(destroyed()), this, SLOT(storeSettings())); toolLayout->addWidget(widget); + toolItemList.append(widget); } void QGCToolWidget::exportWidget() diff --git a/src/ui/designer/QGCToolWidget.h b/src/ui/designer/QGCToolWidget.h index e261e47f7e..c3abb0faf2 100644 --- a/src/ui/designer/QGCToolWidget.h +++ b/src/ui/designer/QGCToolWidget.h @@ -62,12 +62,14 @@ public slots: QList getParamList(); void setParameterValue(int uas, int component, QString parameterName, const QVariant value); bool fromMetaData() { return isFromMetaData; } + void showLabel(QString name,int num); signals: void titleChanged(QString); protected: bool isFromMetaData; QMap paramToItemMap; + QList toolItemList; QList paramList; QVariantMap settingsMap; QAction* addParamAction; -- GitLab