mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-20 10:54:14 +01:00
Merge branch 'rel-15.02' RC4 into next
Conflicts: ground/openpilotgcs/src/plugins/config/input.ui ground/openpilotgcs/src/plugins/setupwizard/connectiondiagram.cpp
This commit is contained in:
commit
8c31f96dd7
69
WHATSNEW.txt
69
WHATSNEW.txt
@ -1,3 +1,72 @@
|
||||
--- RELEASE-15.02 RC4
|
||||
This release introduces major flight performance improvements, enhancements as well as bug fixes. Many enhancements have been made to reducing dead-time of the communication between the flight controller and ESCs. In our testing, we have found this to be not only the best flight performance so far in the OpenPilot project but the best flight performance of any project we have tested against. This is a recommended upgrade for everyone and the more skilled of a pilot you are, the more you will love this release.
|
||||
|
||||
A key improvement that helped achieve this was the addition of the PWMSync code path, this is now enabled by default. Some restrictions applies to CC3D/CC as it needs a compatible input method to enable PWMSync. Compatible input methods are PPM, S.Bus, DSM and OPLink. This release also introduces support for OneShot125 capable ESCs, such as the KISS ESCs and all ESCs supported in BLHeli V13 and above. Note that OneShot125 support has the same restrictions as PWMSync for CC and CC3D.
|
||||
|
||||
Note for CC3D/CC: To support PWMSync/OneShot125 PPM input pin has changed from earlier releases to the last pin on the input IO port, please refer to the connection diagram in the setup wizard to see the required new pin layout for PPM.
|
||||
|
||||
Other enhancements include key parts of the GCS translated to Chinese and further OPLink reliability additions allowing us to confidently say it can be used as a primary control link as well as for telemetry.
|
||||
|
||||
The full list of features, improvements and bugfixes in this release is accessible here:
|
||||
https://progress.openpilot.org/issues/?filter=12161
|
||||
|
||||
|
||||
Release Notes - OpenPilot - Version RELEASE-15.02
|
||||
|
||||
** Bug
|
||||
* [OP-969] - Input Configuration Wizard has scrollbars showing up and next/previous buttons are pushed down out of sight
|
||||
* [OP-1034] - CCPM Config Widget crashes GCS if required boxes aren't set i.e. Channel set to None
|
||||
* [OP-1466] - Gcs crashes on Helicopter config tab
|
||||
* [OP-1522] - Improve Robustness of OPLink radio
|
||||
* [OP-1601] - Still not enough ram on CC for gps to be usable
|
||||
* [OP-1644] - Radio Setup Wiz problem with 6 flight modes
|
||||
* [OP-1670] - cruise control conflict with flight modes (rate & acro +)
|
||||
* [OP-1680] - OPLink control limited to 1000-1896
|
||||
* [OP-1682] - Overflow issue with pwm rx and CC3D
|
||||
* [OP-1686] - Slave OPLM should receive PPM in PPM_only mode
|
||||
* [OP-1706] - Output Reverse checkboxes tick them selves when min equals max
|
||||
* [OP-1718] - FW vehicle setup wizard may strip servo gears
|
||||
* [OP-1722] - libusb include is incorrect.
|
||||
* [OP-1728] - FW servos ignore set neutral
|
||||
* [OP-1733] - version-info.py should check for version-info.json not git repo.
|
||||
* [OP-1735] - Build fails with a tilde (~) in path.
|
||||
* [OP-1737] - Min/max will be greyed even if motor output test is canceled
|
||||
* [OP-1741] - Repo path is incorrect in version_info.pro
|
||||
* [OP-1743] - cc3d fails to connect once "next " is loaded 2-23-15
|
||||
* [OP-1744] - Vehicle config wizard produces a bad configuration
|
||||
* [OP-1754] - Vehicle Wizard bad config when setting PPM in and RapidESC out
|
||||
* [OP-1755] - Add additional path for cloudconfigs
|
||||
* [OP-1758] - Upgrade hidapi for all OSs (except windows) to solve mac issue:Fix incorrect device list after device removal
|
||||
* [OP-1761] - Wizard bad config when PPM in, RapidESC out and hexa frame with CC/CC3D/Atom
|
||||
|
||||
|
||||
** Improvement
|
||||
* [OP-1519] - Auto Reboot of board when required by Wizard
|
||||
* [OP-1576] - Remove tx resent accounting from OPlink
|
||||
* [OP-1635] - Remove Quad H from wizard to avoid confusion with Quad X
|
||||
* [OP-1650] - Reduce telemetry to improve OPLink
|
||||
* [OP-1658] - Sensor driver API and overhaul of sensor module
|
||||
* [OP-1683] - Support synchronous (OneShot) and OneShot125 output mode
|
||||
* [OP-1685] - Support OneShot/OneShot125 for CC* targets
|
||||
* [OP-1694] - Make package make rule non-nested
|
||||
* [OP-1698] - Add easy to set channel passtrough GCS functionality
|
||||
* [OP-1704] - Add support for sanity check custom hooks
|
||||
* [OP-1759] - Hide CC3D non-supported options (GPSAssist)
|
||||
|
||||
** New Feature
|
||||
* [OP-1723] - RCCar Forward/reverse support
|
||||
|
||||
|
||||
** Task
|
||||
* [OP-1721] - C++ enable flight controller and upgrade ARM tools
|
||||
* [OP-1738] - change default flight modes and thrust settings
|
||||
|
||||
** Sub task
|
||||
* [OP-1748] - Chinese translation for 15.02
|
||||
* [OP-1752] - Add Alarm sub status to SystemHealth
|
||||
|
||||
|
||||
|
||||
--- RELEASE-15.01 --- Look Ma, No hands ---
|
||||
This release mainly focuses on a new feature, GPSAssist which is a new form of assisted control for multirotors.
|
||||
Assisted Control provides assistance functions on top of existing flight modes. GPSAssist is the
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,2185 @@
|
||||
{
|
||||
"battery": "4S 1800mah",
|
||||
"comment": "",
|
||||
"controller": "CC3D",
|
||||
"esc": "Sunrise 20A OPTO BLHeli 13.1",
|
||||
"motor": "Sunnysky 2207 2100 KV",
|
||||
"name": "ZMR 250",
|
||||
"nick": "ehitaja",
|
||||
"objects": [
|
||||
{
|
||||
"fields": [
|
||||
{
|
||||
"name": "VbarSensitivity",
|
||||
"type": "float32",
|
||||
"unit": "frac",
|
||||
"values": [
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": 0.5
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "VbarRollPI",
|
||||
"type": "float32",
|
||||
"unit": "1/(deg/s)",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 0.004999999888241291
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0.0020000000949949026
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "VbarPitchPI",
|
||||
"type": "float32",
|
||||
"unit": "1/(deg/s)",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 0.004999999888241291
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0.0020000000949949026
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "VbarYawPI",
|
||||
"type": "float32",
|
||||
"unit": "1/(deg/s)",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 0.004999999888241291
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0.0020000000949949026
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "VbarTau",
|
||||
"type": "float32",
|
||||
"unit": "sec",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 0.5
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "GyroTau",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 0.0040000001899898052
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "DerivativeGamma",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "AxisLockKp",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 2.5
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "WeakLevelingKp",
|
||||
"type": "float32",
|
||||
"unit": "(deg/s)/deg",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 0.10000000149011612
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "CruiseControlMaxPowerFactor",
|
||||
"type": "float32",
|
||||
"unit": "x",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 3
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "CruiseControlPowerTrim",
|
||||
"type": "float32",
|
||||
"unit": "%",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 100
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "CruiseControlPowerDelayComp",
|
||||
"type": "float32",
|
||||
"unit": "sec",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 0.25
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ScaleToAirspeed",
|
||||
"type": "float32",
|
||||
"unit": "m/s",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ScaleToAirspeedLimits",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "Min",
|
||||
"value": 0.05000000074505806
|
||||
},
|
||||
{
|
||||
"name": "Max",
|
||||
"value": 3
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "FlightModeMap",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "Bank1"
|
||||
},
|
||||
{
|
||||
"name": "1",
|
||||
"value": "Bank1"
|
||||
},
|
||||
{
|
||||
"name": "2",
|
||||
"value": "Bank1"
|
||||
},
|
||||
{
|
||||
"name": "3",
|
||||
"value": "Bank1"
|
||||
},
|
||||
{
|
||||
"name": "4",
|
||||
"value": "Bank1"
|
||||
},
|
||||
{
|
||||
"name": "5",
|
||||
"value": "Bank1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "VbarGyroSuppress",
|
||||
"type": "int8",
|
||||
"unit": "%",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 30
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "VbarPiroComp",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "FALSE"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "VbarMaxAngle",
|
||||
"type": "uint8",
|
||||
"unit": "deg",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 10
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "DerivativeCutoff",
|
||||
"type": "uint8",
|
||||
"unit": "Hz",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 20
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "MaxAxisLock",
|
||||
"type": "uint8",
|
||||
"unit": "deg",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 30
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "MaxAxisLockRate",
|
||||
"type": "uint8",
|
||||
"unit": "deg/s",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "MaxWeakLevelingRate",
|
||||
"type": "uint8",
|
||||
"unit": "deg/s",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 5
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "RattitudeModeTransition",
|
||||
"type": "uint8",
|
||||
"unit": "%",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "CruiseControlMinThrust",
|
||||
"type": "int8",
|
||||
"unit": "%",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 5
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "CruiseControlMaxThrust",
|
||||
"type": "uint8",
|
||||
"unit": "%",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 90
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "CruiseControlMaxAngle",
|
||||
"type": "uint8",
|
||||
"unit": "deg",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 105
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "CruiseControlFlightModeSwitchPosEnable",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "FALSE"
|
||||
},
|
||||
{
|
||||
"name": "1",
|
||||
"value": "FALSE"
|
||||
},
|
||||
{
|
||||
"name": "2",
|
||||
"value": "FALSE"
|
||||
},
|
||||
{
|
||||
"name": "3",
|
||||
"value": "FALSE"
|
||||
},
|
||||
{
|
||||
"name": "4",
|
||||
"value": "FALSE"
|
||||
},
|
||||
{
|
||||
"name": "5",
|
||||
"value": "FALSE"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "CruiseControlInvertedThrustReversing",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "Unreversed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "CruiseControlInvertedPowerOutput",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "Zero"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "LowThrottleZeroIntegral",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "TRUE"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "FlightModeAssistMap",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "None"
|
||||
},
|
||||
{
|
||||
"name": "1",
|
||||
"value": "None"
|
||||
},
|
||||
{
|
||||
"name": "2",
|
||||
"value": "None"
|
||||
},
|
||||
{
|
||||
"name": "3",
|
||||
"value": "None"
|
||||
},
|
||||
{
|
||||
"name": "4",
|
||||
"value": "None"
|
||||
},
|
||||
{
|
||||
"name": "5",
|
||||
"value": "None"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"id": "73603180",
|
||||
"instance": 0,
|
||||
"name": "StabilizationSettings",
|
||||
"setting": true
|
||||
},
|
||||
{
|
||||
"fields": [
|
||||
{
|
||||
"name": "ManualRate",
|
||||
"type": "float32",
|
||||
"unit": "degrees/sec",
|
||||
"values": [
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 420
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 400
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": 310
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "MaximumRate",
|
||||
"type": "float32",
|
||||
"unit": "degrees/sec",
|
||||
"values": [
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 475
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 475
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": 360
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "RollRatePID",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 0.0027000000700354576
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0.0070000002160668373
|
||||
},
|
||||
{
|
||||
"name": "Kd",
|
||||
"value": 3.9999998989515007e-05
|
||||
},
|
||||
{
|
||||
"name": "ILimit",
|
||||
"value": 0.30000001192092896
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "PitchRatePID",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 0.0032999999821186066
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0.012500000186264515
|
||||
},
|
||||
{
|
||||
"name": "Kd",
|
||||
"value": 5.999999848427251e-05
|
||||
},
|
||||
{
|
||||
"name": "ILimit",
|
||||
"value": 0.30000001192092896
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "YawRatePID",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 0.0075500002130866051
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0.011500000022351742
|
||||
},
|
||||
{
|
||||
"name": "Kd",
|
||||
"value": 4.9999998736893758e-05
|
||||
},
|
||||
{
|
||||
"name": "ILimit",
|
||||
"value": 0.30000001192092896
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "RollPI",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 3
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "ILimit",
|
||||
"value": 50
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "PitchPI",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 3.4000000953674316
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "ILimit",
|
||||
"value": 50
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "YawPI",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 2.5
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "ILimit",
|
||||
"value": 50
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "AcroInsanityFactor",
|
||||
"type": "float32",
|
||||
"unit": "percent",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 0.41999998688697815
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ThrustPIDScaleCurve",
|
||||
"type": "float32",
|
||||
"unit": "percent",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 0.18856599926948547
|
||||
},
|
||||
{
|
||||
"name": "25",
|
||||
"value": 0.094283096492290497
|
||||
},
|
||||
{
|
||||
"name": "50",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "75",
|
||||
"value": -0.10285499691963196
|
||||
},
|
||||
{
|
||||
"name": "100",
|
||||
"value": -0.20282800495624542
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "RollMax",
|
||||
"type": "uint8",
|
||||
"unit": "degrees",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "PitchMax",
|
||||
"type": "uint8",
|
||||
"unit": "degrees",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 80
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "YawMax",
|
||||
"type": "uint8",
|
||||
"unit": "degrees",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 35
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "StickExpo",
|
||||
"type": "int8",
|
||||
"unit": "percent",
|
||||
"values": [
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 12
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 12
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": 14
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "EnablePiroComp",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "FALSE"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "EnableThrustPIDScaling",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "TRUE"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ThrustPIDScaleSource",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "ActuatorDesiredThrust"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ThrustPIDScaleTarget",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "PD"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ThrustPIDScaleAxes",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "Roll Pitch"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"id": "E8EBBD48",
|
||||
"instance": 0,
|
||||
"name": "StabilizationSettingsBank1",
|
||||
"setting": true
|
||||
},
|
||||
{
|
||||
"fields": [
|
||||
{
|
||||
"name": "ManualRate",
|
||||
"type": "float32",
|
||||
"unit": "degrees/sec",
|
||||
"values": [
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 400
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 400
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": 220
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "MaximumRate",
|
||||
"type": "float32",
|
||||
"unit": "degrees/sec",
|
||||
"values": [
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 400
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 400
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": 300
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "RollRatePID",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 0.0032999999821186066
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0.0076000001281499863
|
||||
},
|
||||
{
|
||||
"name": "Kd",
|
||||
"value": 3.600000127335079e-05
|
||||
},
|
||||
{
|
||||
"name": "ILimit",
|
||||
"value": 0.30000001192092896
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "PitchRatePID",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 0.0044999998062849045
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0.0093999998643994331
|
||||
},
|
||||
{
|
||||
"name": "Kd",
|
||||
"value": 4.5000000682193786e-05
|
||||
},
|
||||
{
|
||||
"name": "ILimit",
|
||||
"value": 0.30000001192092896
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "YawRatePID",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 0.0086000002920627594
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0.014299999922513962
|
||||
},
|
||||
{
|
||||
"name": "Kd",
|
||||
"value": 4.9999998736893758e-05
|
||||
},
|
||||
{
|
||||
"name": "ILimit",
|
||||
"value": 0.30000001192092896
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "RollPI",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 3
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "ILimit",
|
||||
"value": 50
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "PitchPI",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 3.4000000953674316
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "ILimit",
|
||||
"value": 50
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "YawPI",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 2.5
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "ILimit",
|
||||
"value": 50
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "AcroInsanityFactor",
|
||||
"type": "float32",
|
||||
"unit": "percent",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 0.5
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ThrustPIDScaleCurve",
|
||||
"type": "float32",
|
||||
"unit": "percent",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 0.19285200536251068
|
||||
},
|
||||
{
|
||||
"name": "25",
|
||||
"value": 0.089997202157974243
|
||||
},
|
||||
{
|
||||
"name": "50",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "75",
|
||||
"value": -0.085711203515529633
|
||||
},
|
||||
{
|
||||
"name": "100",
|
||||
"value": -0.18427999317646027
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "RollMax",
|
||||
"type": "uint8",
|
||||
"unit": "degrees",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 55
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "PitchMax",
|
||||
"type": "uint8",
|
||||
"unit": "degrees",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 55
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "YawMax",
|
||||
"type": "uint8",
|
||||
"unit": "degrees",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 35
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "StickExpo",
|
||||
"type": "int8",
|
||||
"unit": "percent",
|
||||
"values": [
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 18
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 18
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": -8
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "EnablePiroComp",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "FALSE"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "EnableThrustPIDScaling",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "TRUE"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ThrustPIDScaleSource",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "ActuatorDesiredThrust"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ThrustPIDScaleTarget",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "PD"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ThrustPIDScaleAxes",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "Roll Pitch"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"id": "70E9539A",
|
||||
"instance": 0,
|
||||
"name": "StabilizationSettingsBank2",
|
||||
"setting": true
|
||||
},
|
||||
{
|
||||
"fields": [
|
||||
{
|
||||
"name": "ManualRate",
|
||||
"type": "float32",
|
||||
"unit": "degrees/sec",
|
||||
"values": [
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 220
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 220
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": 220
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "MaximumRate",
|
||||
"type": "float32",
|
||||
"unit": "degrees/sec",
|
||||
"values": [
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 300
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 300
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": 300
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "RollRatePID",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 0.0024999999441206455
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0.0040000001899898052
|
||||
},
|
||||
{
|
||||
"name": "Kd",
|
||||
"value": 1.9999999494757503e-05
|
||||
},
|
||||
{
|
||||
"name": "ILimit",
|
||||
"value": 0.30000001192092896
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "PitchRatePID",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 0.0024999999441206455
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0.0040000001899898052
|
||||
},
|
||||
{
|
||||
"name": "Kd",
|
||||
"value": 1.9999999494757503e-05
|
||||
},
|
||||
{
|
||||
"name": "ILimit",
|
||||
"value": 0.30000001192092896
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "YawRatePID",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 0.0062000001780688763
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0.0099999997764825821
|
||||
},
|
||||
{
|
||||
"name": "Kd",
|
||||
"value": 4.9999998736893758e-05
|
||||
},
|
||||
{
|
||||
"name": "ILimit",
|
||||
"value": 0.30000001192092896
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "RollPI",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 2.5
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "ILimit",
|
||||
"value": 50
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "PitchPI",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 2.5
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "ILimit",
|
||||
"value": 50
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "YawPI",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "Kp",
|
||||
"value": 2.5
|
||||
},
|
||||
{
|
||||
"name": "Ki",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "ILimit",
|
||||
"value": 50
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "AcroInsanityFactor",
|
||||
"type": "float32",
|
||||
"unit": "percent",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 0.5
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ThrustPIDScaleCurve",
|
||||
"type": "float32",
|
||||
"unit": "percent",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 0.30000001192092896
|
||||
},
|
||||
{
|
||||
"name": "25",
|
||||
"value": 0.15000000596046448
|
||||
},
|
||||
{
|
||||
"name": "50",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "75",
|
||||
"value": -0.15000000596046448
|
||||
},
|
||||
{
|
||||
"name": "100",
|
||||
"value": -0.30000001192092896
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "RollMax",
|
||||
"type": "uint8",
|
||||
"unit": "degrees",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 55
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "PitchMax",
|
||||
"type": "uint8",
|
||||
"unit": "degrees",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 55
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "YawMax",
|
||||
"type": "uint8",
|
||||
"unit": "degrees",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 35
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "StickExpo",
|
||||
"type": "int8",
|
||||
"unit": "percent",
|
||||
"values": [
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "EnablePiroComp",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "TRUE"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "EnableThrustPIDScaling",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "FALSE"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ThrustPIDScaleSource",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "ActuatorDesiredThrust"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ThrustPIDScaleTarget",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "PID"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ThrustPIDScaleAxes",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "Roll Pitch"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"id": "C02DAA6A",
|
||||
"instance": 0,
|
||||
"name": "StabilizationSettingsBank3",
|
||||
"setting": true
|
||||
},
|
||||
{
|
||||
"fields": [
|
||||
{
|
||||
"name": "MaxAccel",
|
||||
"type": "float32",
|
||||
"unit": "units/sec",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 1000
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "FeedForward",
|
||||
"type": "float32",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "AccelTime",
|
||||
"type": "float32",
|
||||
"unit": "ms",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "DecelTime",
|
||||
"type": "float32",
|
||||
"unit": "ms",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ThrottleCurve1",
|
||||
"type": "float32",
|
||||
"unit": "percent",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "25",
|
||||
"value": 0.22499999403953552
|
||||
},
|
||||
{
|
||||
"name": "50",
|
||||
"value": 0.44999998807907104
|
||||
},
|
||||
{
|
||||
"name": "75",
|
||||
"value": 0.67499995231628418
|
||||
},
|
||||
{
|
||||
"name": "100",
|
||||
"value": 0.89999997615814209
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ThrottleCurve2",
|
||||
"type": "float32",
|
||||
"unit": "percent",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "25",
|
||||
"value": 0.22499999403953552
|
||||
},
|
||||
{
|
||||
"name": "50",
|
||||
"value": 0.44999998807907104
|
||||
},
|
||||
{
|
||||
"name": "75",
|
||||
"value": 0.67499995231628418
|
||||
},
|
||||
{
|
||||
"name": "100",
|
||||
"value": 0.89999997615814209
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "MixerValueRoll",
|
||||
"type": "int8",
|
||||
"unit": "percent",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 50
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "MixerValuePitch",
|
||||
"type": "int8",
|
||||
"unit": "percent",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 50
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "MixerValueYaw",
|
||||
"type": "int8",
|
||||
"unit": "percent",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": 50
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Curve2Source",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "Throttle"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer1Type",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "Motor"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer1Vector",
|
||||
"type": "int8",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "ThrottleCurve1",
|
||||
"value": 127
|
||||
},
|
||||
{
|
||||
"name": "ThrottleCurve2",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 64
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 64
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": -64
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer2Type",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "Motor"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer2Vector",
|
||||
"type": "int8",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "ThrottleCurve1",
|
||||
"value": 127
|
||||
},
|
||||
{
|
||||
"name": "ThrottleCurve2",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": -64
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 64
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": 64
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer3Type",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "Motor"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer3Vector",
|
||||
"type": "int8",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "ThrottleCurve1",
|
||||
"value": 127
|
||||
},
|
||||
{
|
||||
"name": "ThrottleCurve2",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": -64
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": -64
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": -64
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer4Type",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "Motor"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer4Vector",
|
||||
"type": "int8",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "ThrottleCurve1",
|
||||
"value": 127
|
||||
},
|
||||
{
|
||||
"name": "ThrottleCurve2",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 64
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": -64
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": 64
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer5Type",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "Disabled"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer5Vector",
|
||||
"type": "int8",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "ThrottleCurve1",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "ThrottleCurve2",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer6Type",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "Disabled"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer6Vector",
|
||||
"type": "int8",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "ThrottleCurve1",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "ThrottleCurve2",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer7Type",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "Disabled"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer7Vector",
|
||||
"type": "int8",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "ThrottleCurve1",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "ThrottleCurve2",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer8Type",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "Disabled"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer8Vector",
|
||||
"type": "int8",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "ThrottleCurve1",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "ThrottleCurve2",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer9Type",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "Disabled"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer9Vector",
|
||||
"type": "int8",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "ThrottleCurve1",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "ThrottleCurve2",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer10Type",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "Disabled"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer10Vector",
|
||||
"type": "int8",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "ThrottleCurve1",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "ThrottleCurve2",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer11Type",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "Disabled"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer11Vector",
|
||||
"type": "int8",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "ThrottleCurve1",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "ThrottleCurve2",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer12Type",
|
||||
"type": "enum",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "0",
|
||||
"value": "Disabled"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Mixer12Vector",
|
||||
"type": "int8",
|
||||
"unit": "",
|
||||
"values": [
|
||||
{
|
||||
"name": "ThrottleCurve1",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "ThrottleCurve2",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Roll",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Pitch",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Yaw",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"id": "7BF2CFA8",
|
||||
"instance": 0,
|
||||
"name": "MixerSettings",
|
||||
"setting": true
|
||||
},
|
||||
{
|
||||
"fields": [
|
||||
{
|
||||
"name": "P",
|
||||
"type": "float32",
|
||||
"unit": "1^2",
|
||||
"values": [
|
||||
{
|
||||
"name": "PositionNorth",
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"name": "PositionEast",
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"name": "PositionDown",
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"name": "VelocityNorth",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"name": "VelocityEast",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"name": "VelocityDown",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"name": "AttitudeQ1",
|
||||
"value": 0.0070000002160668373
|
||||
},
|
||||
{
|
||||
"name": "AttitudeQ2",
|
||||
"value": 0.0070000002160668373
|
||||
},
|
||||
{
|
||||
"name": "AttitudeQ3",
|
||||
"value": 0.0070000002160668373
|
||||
},
|
||||
{
|
||||
"name": "AttitudeQ4",
|
||||
"value": 0.0070000002160668373
|
||||
},
|
||||
{
|
||||
"name": "GyroDriftX",
|
||||
"value": 9.9999999747524271e-07
|
||||
},
|
||||
{
|
||||
"name": "GyroDriftY",
|
||||
"value": 9.9999999747524271e-07
|
||||
},
|
||||
{
|
||||
"name": "GyroDriftZ",
|
||||
"value": 9.9999999747524271e-07
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Q",
|
||||
"type": "float32",
|
||||
"unit": "1^2",
|
||||
"values": [
|
||||
{
|
||||
"name": "GyroX",
|
||||
"value": 0.0099999997764825821
|
||||
},
|
||||
{
|
||||
"name": "GyroY",
|
||||
"value": 0.0099999997764825821
|
||||
},
|
||||
{
|
||||
"name": "GyroZ",
|
||||
"value": 0.0099999997764825821
|
||||
},
|
||||
{
|
||||
"name": "AccelX",
|
||||
"value": 0.0099999997764825821
|
||||
},
|
||||
{
|
||||
"name": "AccelY",
|
||||
"value": 0.0099999997764825821
|
||||
},
|
||||
{
|
||||
"name": "AccelZ",
|
||||
"value": 0.0099999997764825821
|
||||
},
|
||||
{
|
||||
"name": "GyroDriftX",
|
||||
"value": 9.9999999747524271e-07
|
||||
},
|
||||
{
|
||||
"name": "GyroDriftY",
|
||||
"value": 9.9999999747524271e-07
|
||||
},
|
||||
{
|
||||
"name": "GyroDriftZ",
|
||||
"value": 9.9999999747524271e-07
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "R",
|
||||
"type": "float32",
|
||||
"unit": "1^2",
|
||||
"values": [
|
||||
{
|
||||
"name": "GPSPosNorth",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"name": "GPSPosEast",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"name": "GPSPosDown",
|
||||
"value": 1000000
|
||||
},
|
||||
{
|
||||
"name": "GPSVelNorth",
|
||||
"value": 0.0010000000474974513
|
||||
},
|
||||
{
|
||||
"name": "GPSVelEast",
|
||||
"value": 0.0010000000474974513
|
||||
},
|
||||
{
|
||||
"name": "GPSVelDown",
|
||||
"value": 0.0010000000474974513
|
||||
},
|
||||
{
|
||||
"name": "MagX",
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"name": "MagY",
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"name": "MagZ",
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"name": "BaroZ",
|
||||
"value": 0.0099999997764825821
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "FakeR",
|
||||
"type": "float32",
|
||||
"unit": "1^2",
|
||||
"values": [
|
||||
{
|
||||
"name": "FakeGPSPosIndoor",
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"name": "FakeGPSVelIndoor",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"name": "FakeGPSVelAirspeed",
|
||||
"value": 1000
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"id": "5E91213C",
|
||||
"instance": 0,
|
||||
"name": "EKFConfiguration",
|
||||
"setting": true
|
||||
}
|
||||
],
|
||||
"owner": "Roman",
|
||||
"propeller": "5040",
|
||||
"servo": "",
|
||||
"size": "250",
|
||||
"subtype": 2,
|
||||
"type": 1,
|
||||
"uuid": "{65b347bb-5e6d-466f-895e-5895b222d670}",
|
||||
"weight": "630 with battery"
|
||||
}
|
@ -4591,7 +4591,7 @@ p, li { white-space: pre-wrap; }
|
||||
<message>
|
||||
<location/>
|
||||
<source>Module Control</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation type="unfinished">模块控制</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -4758,7 +4758,7 @@ Useful if you have accidentally changed some settings.</source>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Reload Board Data</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation type="unfinished">读取</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -4773,7 +4773,7 @@ Useful if you have accidentally changed some settings.</source>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Send settings to the board but do not save to the non-volatile memory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation type="unfinished">发送配置到控制板,但不保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -4788,7 +4788,7 @@ Useful if you have accidentally changed some settings.</source>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Send settings to the board and save to the non-volatile memory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation type="unfinished">发送配置到控制板并保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -4822,7 +4822,7 @@ p, li { white-space: pre-wrap; }
|
||||
<message>
|
||||
<location/>
|
||||
<source>After enabling the module, you must power cycle before using and configuring.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>开启后请重启设备,再进行后续功能设置。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -4830,32 +4830,32 @@ p, li { white-space: pre-wrap; }
|
||||
<message>
|
||||
<location filename="../../../src/plugins/config/camerastabilization.ui"/>
|
||||
<source>Form</source>
|
||||
<translation type="unfinished">界面</translation>
|
||||
<translation>界面</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Camera Stabilization</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>相机稳定</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Module Control</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>模块控制</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Enable CameraStabilization module</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>开启相机稳定模块</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>After enabling the module, you must power cycle before using and configuring.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>开启后请重启设备,再进行后续功能设置。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Basic Settings (Stabilization)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>基本设置项(稳定)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -4863,37 +4863,39 @@ p, li { white-space: pre-wrap; }
|
||||
|
||||
This value should be tuned for particular gimbal and servo. You also
|
||||
have to define channel output range using Output configuration tab.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>全量输出时,对应相机左右平移的最大角度。
|
||||
|
||||
根据您的云台和舵机具体情况设置该值,并且在“Output”选项页中设置好相应输出端口的范围。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>objname:CameraStabSettings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>fieldname:OutputRange</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>element:Yaw</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>haslimits:no</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>scale:1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>buttongroup:1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -4901,12 +4903,14 @@ have to define channel output range using Output configuration tab.</source>
|
||||
|
||||
This value should be tuned for particular gimbal and servo. You also
|
||||
have to define channel output range using Output configuration tab.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>全量输出时,对应相机前后俯仰的最大角度。
|
||||
|
||||
根据您的云台和舵机具体情况设置该值,并且在“Output”选项页中设置好相应输出端口的范围。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>element:Pitch</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -4914,88 +4918,96 @@ have to define channel output range using Output configuration tab.</source>
|
||||
|
||||
This value should be tuned for particular gimbal and servo. You also
|
||||
have to define channel output range using Output configuration tab.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>全量输出时,对应相机左右横滚的最大角度。
|
||||
|
||||
根据您的云台和舵机具体情况设置该值,并且在“Output”选项页中设置好相应输出端口的范围。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>element:Roll</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Yaw output channel for camera gimbal</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>云台左右平移输出通道</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>None</source>
|
||||
<translation type="unfinished">无</translation>
|
||||
<translation>无</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Pitch output channel for camera gimbal</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>云台前后俯仰输出通道</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Roll output channel for camera gimbal</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>云台左右横滚输出通道</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Output Channel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>输出通道</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Yaw</source>
|
||||
<translation type="unfinished">方向</translation>
|
||||
<translation>左右平移</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Pitch</source>
|
||||
<translation type="unfinished">俯仰</translation>
|
||||
<translation>前后俯仰</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Roll</source>
|
||||
<translation type="unfinished">横滚</translation>
|
||||
<translation>左右横滚</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Advanced Settings (Control)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>高级设置项(控制)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Input channel to control camera yaw
|
||||
|
||||
Don't forget to map this channel using Input configuration tab.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>相机左右平移控制通道
|
||||
|
||||
请在“Input”选项页中同时设置好相应的遥控器通道。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>fieldname:Input</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Input channel to control camera pitch
|
||||
|
||||
Don't forget to map this channel using Input configuration tab.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>相机前后俯仰控制通道
|
||||
|
||||
请在“Input”选项页中同时设置好相应的遥控器通道。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Input channel to control camera roll
|
||||
|
||||
Don't forget to map this channel using Input configuration tab.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>相机左右横滚控制通道
|
||||
|
||||
请在“Input”选项页中同时设置好相应的遥控器通道。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Input Channel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>控制器通道</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -5003,77 +5015,80 @@ Don't forget to map this channel using Input configuration tab.</source>
|
||||
|
||||
Attitude: camera tracks level for the axis. Input controls the deflection.
|
||||
AxisLock: camera remembers tracking attitude. Input controls the rate of deflection.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>稳定模式
|
||||
|
||||
Attitude:相机自动绕轴保持稳定,遥控器控制偏移。
|
||||
AxisLock:相机保持绕轴转动量,遥控器控制偏移。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>fieldname:StabilizationMode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Attitude</source>
|
||||
<translation type="unfinished">姿态</translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Maximum camera yaw deflection for 100% input in Attitude mode, deg.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>在Attitude模式下,遥控全量输入时,相机左右平移的最大偏移角度。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>fieldname:InputRange</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Maximum camera yaw rate for 100% input in AxisLock mode, deg/s.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>在AxisLock模式下,遥控全量输入时,相机左右平移的最大偏移角速度,单位:度/秒。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>fieldname:InputRate</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>fieldname:ResponseTime</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Maximum camera pitch deflection for 100% input in Attitude mode, deg.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>在Attitude模式下,遥控全量输入时,相机前后俯仰的最大偏移角度。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Maximum camera pitch rate for 100% input in AxisLock mode, deg/s.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>在AxisLock模式下,遥控全量输入时,相机前后俯仰的最大偏移角速度,单位:度/秒。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Maximum camera roll deflection for 100% input in Attitude mode, deg.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>在Attitude模式下,遥控全量输入时,相机左右横滚的最大偏移角度。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Maximum camera roll rate for 100% input in AxisLock mode, deg/s.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>在AxisLock模式下,遥控全量输入时,相机左右横滚的最大偏移角速度,单位:度/秒。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>MaxAxisLockRate</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>轴转向速率阙值</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Stabilization Mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>稳定模式</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>(the same value for Roll, Pitch, Yaw)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>(同时作用于X,Y,Z三个转动轴向)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -5085,32 +5100,34 @@ rate depending on input value.
|
||||
|
||||
If you have drift in your Tx controls, you may want to increase this
|
||||
value.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>在AxisLock模式下,X,Y,Z三个轴向的转动速率死区, 单位:度/秒。
|
||||
|
||||
当遥控操纵杆输入量小于或等于此值时,相机保持当前姿态,不响应输入控制。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>fieldname:MaxAxisLockRate</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Messages</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>信息</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Ctrl+S</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>button:help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>url:http://wiki.openpilot.org/display/Doc/Camera+Stabilization+Configuration</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -5118,17 +5135,19 @@ value.</source>
|
||||
|
||||
Loaded settings are not applied automatically. You have to click the
|
||||
Apply or Save button afterwards.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>重置相机稳定设置。
|
||||
|
||||
重置后不会自动设置到控制板内,请点击“应用”或“保存”默认值。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Reset To Defaults</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>重置</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>button:default</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -5138,82 +5157,85 @@ settings.
|
||||
|
||||
Loaded settings are not applied automatically. You have to click the
|
||||
Apply or Save button afterwards.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>读取上一次保存到控制板上的相机稳定设置,如果您意外改动了
|
||||
设置,请使用此功能恢复正确设置。
|
||||
|
||||
读取到的设置不会自动设置到控制板内,请点击“应用”或“保存”设置。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Reload Board Data</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>读取</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>button:reload</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Send settings to the board but do not save to the non-volatile memory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>发送配置到控制板,但不保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Apply</source>
|
||||
<translation type="unfinished">应用</translation>
|
||||
<translation>应用</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>button:apply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Send settings to the board and save to the non-volatile memory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>发送配置到控制板并保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Save</source>
|
||||
<translation type="unfinished">保存</translation>
|
||||
<translation>保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>button:save</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Output Range (Angle)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>移动范围(角度)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Pitch Or Servo2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>前后俯仰/舵机2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Roll Or Servo1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>左右横滚/舵机1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Input Rate (Speed)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>最大转动速率</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Input Range (Angle)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>最大转动角度</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Expert Settings (Attitude Filter and Feed Forward)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>专家设置项(姿态缓释与前馈)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Attitude Filter RT</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>稳定缓释响应时间</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -5222,7 +5244,11 @@ Apply or Save button afterwards.</source>
|
||||
Range: 0-250ms, 0 disables the filter (default).
|
||||
|
||||
Smoothes estimated airframe attitude used by camera stabilization.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>左右横滚自稳缓慢释放响应时间量(设置时间范围内缓慢响应绕轴转动)
|
||||
|
||||
范围:0至250毫秒,默认值为0,表示立即响应绕轴自稳。
|
||||
|
||||
合理设置该参数可以使相机更平稳。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -5231,7 +5257,11 @@ Smoothes estimated airframe attitude used by camera stabilization.</source>
|
||||
Range: 0-250ms, 0 disables the filter (default).
|
||||
|
||||
Smoothes estimated airframe attitude used by camera stabilization.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>前后俯仰自稳缓慢释放响应时间量(设置时间范围内缓慢响应绕轴转动)
|
||||
|
||||
范围:0至250毫秒,默认值为0,表示立即响应绕轴自稳。
|
||||
|
||||
合理设置该参数可以使相机更平稳。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -5240,12 +5270,16 @@ Smoothes estimated airframe attitude used by camera stabilization.</source>
|
||||
Range: 0-250ms, 0 disables the filter (default).
|
||||
|
||||
Smoothes estimated airframe attitude used by camera stabilization.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>左右平移转动缓慢释放响应时间量(设置时间范围内响应绕轴转动)
|
||||
|
||||
范围:0至250毫秒,默认值为0,表示立即响应绕轴自稳。
|
||||
|
||||
合理设置该参数可以使相机更平稳。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>FF Servo Acceleration</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>舵机前馈加速度</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -5255,12 +5289,17 @@ Range: 0-25, 0 disables feed forward for the axis (default).
|
||||
|
||||
Good starting value is 2-7.
|
||||
Too high value may burn your servo!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>左右横滚控制舵机前馈加速度
|
||||
|
||||
范围:0至25,默认值为0,表示在此转动轴向上关闭前馈控制。
|
||||
|
||||
建议从2至7开始设置,逐渐提高以达到满意结果。
|
||||
警告:设置过高可能会烧毁舵机!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>fieldname:FeedForward</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -5270,7 +5309,12 @@ Range: 0-25, 0 disables feed forward for the axis (default).
|
||||
|
||||
Good starting value is 2-7.
|
||||
Too high value may burn your servo!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>前后俯仰控制舵机前馈加速度
|
||||
|
||||
范围:0至25,默认值为0,表示在此转动轴向上关闭前馈控制。
|
||||
|
||||
建议从2至7开始设置,逐渐提高以达到满意结果。
|
||||
警告:设置过高可能会烧毁舵机!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -5280,74 +5324,91 @@ Range: 0-25, 0 disables feed forward for the axis (default).
|
||||
|
||||
Good starting value is 2-7.
|
||||
Too high value may burn your servo!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>左右平移控制舵机前馈加速度
|
||||
|
||||
范围:0至25,默认值为0,表示在此转动轴向上关闭前馈控制。
|
||||
|
||||
建议从2至7开始设置,逐渐提高以达到满意结果。
|
||||
警告:设置过高可能会烧毁舵机!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>FF Accel Time Constant</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>前馈加速时间常量</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Roll servo feed forward acceleration time constant
|
||||
|
||||
Range: 0-50ms, default is 5.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>左右横滚前馈加速时间常量
|
||||
|
||||
范围:0至50毫秒,默认值为5毫秒。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>fieldname:AccelTime</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Pitch servo feed forward acceleration time constant
|
||||
|
||||
Range: 0-50ms, default is 5.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>前后俯仰前馈加速时间常量
|
||||
|
||||
范围:0至50毫秒,默认值为5毫秒。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Yaw servo feed forward acceleration time constant
|
||||
|
||||
Range: 0-50ms, default is 5.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>左右平移前馈加速时间常量
|
||||
|
||||
范围:0至50毫秒,默认值为5毫秒。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>FF Decel Time Constant</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>前馈减速时间常量</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Roll servo feed forward deceleration time constant
|
||||
|
||||
Range: 0-50ms, default is 5.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>左右横滚前馈减速时间常量
|
||||
|
||||
范围:0至50毫秒,默认值为5毫秒。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>fieldname:DecelTime</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Pitch servo feed forward deceleration time constant
|
||||
|
||||
Range: 0-50ms, default is 5.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>前后俯仰前馈减速时间常量
|
||||
|
||||
范围:0至50毫秒,默认值为5毫秒。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Yaw servo feed forward deceleration time constant
|
||||
|
||||
Range: 0-50ms, default is 5.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>左右平移前馈减速时间常量
|
||||
|
||||
范围:0至50毫秒,默认值为5毫秒。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Gimbal Type:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>云台类型:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -5355,22 +5416,23 @@ Range: 0-50ms, default is 5.</source>
|
||||
|
||||
Used to limit feed forward acceleration at extreme angles.
|
||||
Generic type provides no limit.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>设置相应的云台类型,极端角度时用于限制前馈加速度。
|
||||
Generic类型表示不做限制。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>fieldname:GimbalType</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Yaw-Roll-Pitch</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>FF Max Acceleration</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>最大前馈加速度</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -5379,17 +5441,21 @@ Generic type provides no limit.</source>
|
||||
Range: 0-1000, default is 500.
|
||||
|
||||
The same value is used for all axes.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>最大前馈加速度
|
||||
|
||||
范围:0至1000,默认值为500.
|
||||
|
||||
同时作用于X,Y,Z三个转动轴向。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>fieldname:MaxAccel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Input configuration also provides smoothing for controls. Look for RT options on the RC Input tab.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Input设置页中对应输入通道的”RT“(响应时间)同样提供平滑控制功能。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5412,7 +5478,7 @@ The same value is used for all axes.</source>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Changes on this page only take effect after board reset or power cycle</source>
|
||||
<translation>所有配置信息将在控制板重启才生效</translation>
|
||||
<translation>所有配置信息将在控制板重启后生效</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -5561,7 +5627,7 @@ arming it in that case!</source>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Zero gyros while arming aircraft</source>
|
||||
<translation>每次解锁时,水平参考值归零</translation>
|
||||
<translation>每次解锁时,重置陀螺仪读取数值</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -5976,19 +6042,16 @@ p, li { white-space: pre-wrap; }
|
||||
<translation>死区占操纵杆全程的百分比 (0-10),0为无死区</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Back</source>
|
||||
<translation>上一步</translation>
|
||||
<translation type="vanished">上一步</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Next</source>
|
||||
<translation>下一步</translation>
|
||||
<translation type="vanished">下一步</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Cancel</source>
|
||||
<translation>取消</translation>
|
||||
<translation type="vanished">取消</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -6207,7 +6270,7 @@ Applies and Saves all settings to SD</source>
|
||||
<message>
|
||||
<location/>
|
||||
<source><html><head/><body><p>Avoid &quot;Manual&quot; for multirotors! Never select &quot;Altitude&quot;, &quot;VelocityControl&quot; or &quot;CruiseControl&quot; on a fixed wing!</p></body></html></source>
|
||||
<translation><html><head/><body><p>切忌不要为多轴飞行器设置 &quot;手动&quot; 模式! 不要为固定翼飞行器设置 &quot;姿态&quot;, &quot;速度控制&quot; 或 &quot;巡航控制&quot;!</p></body></html></translation>
|
||||
<translation><html><head/><body><p>切忌不要为多旋翼飞行器设置 &quot;手动&quot; 模式! 不要为固定翼飞行器设置 &quot;姿态&quot;, &quot;速度控制&quot; 或 &quot;巡航控制&quot;!</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -6309,6 +6372,11 @@ Applies and Saves all settings to SD</source>
|
||||
<source>fieldname:FlightModeAssistMap</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>haslimits:yes</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MixerCurve</name>
|
||||
@ -6441,39 +6509,32 @@ Applies and Saves all settings to SD</source>
|
||||
<translation>频率:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>50</source>
|
||||
<translation>50</translation>
|
||||
<translation type="vanished">50</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>60</source>
|
||||
<translation>60</translation>
|
||||
<translation type="vanished">60</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>125</source>
|
||||
<translation>125</translation>
|
||||
<translation type="vanished">125</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>165</source>
|
||||
<translation>165</translation>
|
||||
<translation type="vanished">165</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>270</source>
|
||||
<translation>270</translation>
|
||||
<translation type="vanished">270</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>330</source>
|
||||
<translation>330</translation>
|
||||
<translation type="vanished">330</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>400</source>
|
||||
<translation>400</translation>
|
||||
<translation type="vanished">400</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -6539,9 +6600,8 @@ Applies and Saves all settings to SD</source>
|
||||
<translation>实时测试</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>490</source>
|
||||
<translation>490</translation>
|
||||
<translation type="vanished">490</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Output configuration</source>
|
||||
@ -6581,20 +6641,24 @@ When using OneShot125 all values set in min/max and idle are divided by eight be
|
||||
当使用OneShot125模式时,最小/最大 以及 空闲 的数值将被除与8以后再输出给电调 (例如:1000/8 = 125, 2000/8 = 250).。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>GroupBox</source>
|
||||
<translation>输出设置</translation>
|
||||
<translation type="vanished">输出设置</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source><html><head/><body><p>Setup PWM rate here: usual value is 490 Hz for multirotor airframes.<br/>PWMSync and OneShot125 does not use this value.</p></body></html></source>
|
||||
<translation><html><head/><body><p>设置PWM:通常多轴飞行器是490Hz。<br/><br/>PWMSync以及OneShot125则不需要配置此项</translation>
|
||||
<translation><html><head/><body><p>设置PWM:通常多旋翼飞行器是490Hz。<br/><br/>PWMSync以及OneShot125则不需要配置此项</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source><html><head/><body><p>Setup output mode. Use PWM or PWMSync with Standard ESCs.<br/>Several other ESCs like BLHeli 13+ can use the more advanced OneShot125.<br/>When using OneShot125 all values set in min/max and idle are divided by <br/>eight before being sent to esc (i.e. 1000 = 125, 2000 = 250).</p></body></html></source>
|
||||
<translation><html><head/><body><p>标准电调配置为PWM或OneShot模式。<br/>类似于BLHeli 13+的电调则可以配置为更先进的OneShot125模式。<br/>当使用OneShot125模式时,最小/最大 以及 空闲 的数值将被除与8以后</br>再输出给电调 (例如:1000/8 = 125, 2000/8 = 250)。</p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Output Configuration</source>
|
||||
<translation>输出设置</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>outputChannelForm</name>
|
||||
@ -7403,7 +7467,7 @@ Useful if you have accidentally changed some settings.</source>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Reload Board Data</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation type="unfinished">读取</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -7413,7 +7477,7 @@ Useful if you have accidentally changed some settings.</source>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Send settings to the board but do not save to the non-volatile memory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation type="unfinished">发送配置到控制板,但不保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -7428,7 +7492,7 @@ Useful if you have accidentally changed some settings.</source>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Send settings to the board and save to the non-volatile memory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation type="unfinished">发送配置到控制板并保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -8135,7 +8199,7 @@ response (deg)</source>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Module Control</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation type="unfinished">模块控制</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -8157,7 +8221,7 @@ Up to 3 separate PID options (or option pairs) can be selected and updated.</sou
|
||||
<message>
|
||||
<location/>
|
||||
<source>After enabling the module, you must power cycle before using and configuring.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>开启后请重启设备,再进行后续功能设置。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -8272,7 +8336,7 @@ only when system is armed without disabling the module.</source>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Messages</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation type="unfinished">信息</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -8287,7 +8351,7 @@ only when system is armed without disabling the module.</source>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Send settings to the board but do not save to the non-volatile memory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation type="unfinished">发送配置到控制板,但不保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -8297,7 +8361,7 @@ only when system is armed without disabling the module.</source>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Send settings to the board and save to the non-volatile memory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation type="unfinished">发送配置到控制板并保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -8793,7 +8857,7 @@ only when system is armed without disabling the module.</source>
|
||||
<translation>连接示意图</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+213"/>
|
||||
<location line="+230"/>
|
||||
<source>Save File</source>
|
||||
<translation>保存文件</translation>
|
||||
</message>
|
||||
@ -8981,7 +9045,7 @@ p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:12pt; font-weight:600;">OpenPilot设备识别</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style="font-family:'MS Shell Dlg 2'; font-size:10pt;">当设备正确连接以后,程序会自动识别控制板类型,根据不同设备类型决定下一步操作。</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;">你可以点击“<strong>断开设备</strong>”,在下拉菜单中选择正确的连接类型和设备。</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;">您可以点击“<strong>断开设备</strong>”,在下拉菜单中选择正确的连接类型和设备。</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;">如果您的OpenPilot控制板尚未连接,请把它通过USB连接好,在下拉菜单中选择正确的设备型号,然后点击<strong>连接设备</strong>。</span></p>
|
||||
</body></html></translation>
|
||||
</message>
|
||||
@ -9050,8 +9114,8 @@ p, li { white-space: pre-wrap; }
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:12pt; font-weight:600;">OpenPilot遥控器类型设置</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;">OpenPilot支持绝大多数遥控器,请选择对应的的遥控器类型。如果你不确定手上的遥控器是什么类型,请保持默认设置并点击下一步继续操作。</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;">某些遥控器类型选择后,需要OpenPilot控制板重启才能生效。当你选择了这样的遥控器类型后,点击下一步将会自动重启控制板。</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;">OpenPilot支持绝大多数遥控器,请选择对应的的遥控器类型。如果您不确定手上的遥控器是什么类型,请保持默认设置并点击下一步继续操作。</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;">某些遥控器类型选择后,需要OpenPilot控制板重启才能生效。如果您正好选择了此类遥控器,点击下一步将会自动重启控制板。</span></p>
|
||||
</body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
@ -9070,88 +9134,87 @@ p, li { white-space: pre-wrap; }
|
||||
<message>
|
||||
<location filename="../../../src/plugins/setupwizard/pages/multipage.cpp" line="+58"/>
|
||||
<source>Tricopter</source>
|
||||
<translation>三轴</translation>
|
||||
<translation>三旋翼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>The Tricopter uses three motors and one servo. The servo is used to give yaw authority to the rear motor. The front motors are rotating in opposite directions. The Tricopter is known for its sweeping yaw movement and it is very well suited for FPV since the front rotors are spread wide apart.</source>
|
||||
<translatorcomment>最后一句先保留,稍后翻译</translatorcomment>
|
||||
<translation>三轴飞行器通常由三个高速旋转电机和一个伺服舵机组成。前面两个电机以相反方向旋转,伺服舵机协同尾部电机控制方向。</translation>
|
||||
<translation>三旋翼飞行器通常由三个高速旋转电机和一个伺服舵机组成。前面两个电机以相反方向旋转,伺服舵机协同尾部电机控制方向。由于正前方两电机间隙空间广且左右方向(Yaw)操控灵活,三旋翼极其适合第一视角飞行(FPV)。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<source>Quadcopter X</source>
|
||||
<translation>X型四轴</translation>
|
||||
<translation>X型四旋翼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>The X Quadcopter uses four motors and is the most common multi rotor configuration. Two of the motors rotate clockwise and two counter clockwise. The motors positioned diagonal to each other rotate in the same direction. This setup is perfect for sport flying and is also commonly used for FPV platforms.</source>
|
||||
<translation>X型四轴是目前最常见的一种多轴飞行器,非常适合于飞行竞赛和第一视角飞行。</translation>
|
||||
<translation>X型四旋翼是目前最常见的一种多旋翼飞行器,非常适合于飞行竞赛和第一视角飞行(FPV)。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<source>Quadcopter +</source>
|
||||
<translation>十字型四轴</translation>
|
||||
<translation>十字型四旋翼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>The Plus(+) Quadcopter uses four motors and is similar to the X Quadcopter but the forward direction is offset by 45 degrees. The motors front and rear rotate in clockwise and the motors right and left rotate counter-clockwise. This setup was one of the first to be used and is still used for sport flying. This configuration is not that well suited for FPV since the fore rotor tend to be in the way of the camera.</source>
|
||||
<translation>十字型四轴飞行器类似于X型四轴,区别在于前进方向相差45度。十字型四轴前后两个电机顺时针旋转,左右两个电机逆时针旋转。由于正前方电机容易阻碍摄像机镜头,这种类型的四轴飞行器并不适合第一视角飞行。</translation>
|
||||
<translation>十字型四旋翼飞行器类似于X型四旋翼,区别在于前进方向相差45度。十字型四旋翼前后两个电机顺时针旋转,左右两个电机逆时针旋转。由于正前方电机容易阻碍摄像机镜头,这种类型的飞行器并不适合第一视角飞行(FPV)。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Hexacopter</source>
|
||||
<translation>六轴</translation>
|
||||
<translation>六旋翼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>A multirotor with six motors, one motor in front.</source>
|
||||
<translation>拥有六个电机的多轴飞行器,正前方只有一个电机(图中1号电机)。</translation>
|
||||
<translation>拥有六个电机的多旋翼飞行器,正前方只有一个电机(图中1号电机)。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<source>A multirotor with six motors, two motors in front.</source>
|
||||
<translation>拥有六个电机的多轴飞行器,正前方有两个电机(1号和6号电机)。</translation>
|
||||
<translation>拥有六个电机的多旋翼飞行器,正前方有两个电机(1号和6号电机)。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<source>A multirotor with six motors in two rows.</source>
|
||||
<translation>拥有六个电机的多轴飞行器,六个电机排列成平行的两行,每行三个电机。</translation>
|
||||
<translation>拥有六个电机的多旋翼飞行器,六个电机排列成平行的两行,每行三个电机。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<source>Hexacopter Coax (Y6)</source>
|
||||
<translation>同轴型六轴 (Y6)</translation>
|
||||
<translation>同轴六旋翼 (Y6)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>A multirotor with six motors mounted in a coaxial fashion.</source>
|
||||
<translation>在同一电机轴方向上放置两个电机的六轴飞行器。</translation>
|
||||
<translation>在同一电机轴方向上放置两个电机的六旋翼飞行器。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-11"/>
|
||||
<source>Hexacopter X</source>
|
||||
<translation>X型六轴</translation>
|
||||
<translation>X型六旋翼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-33"/>
|
||||
<source>OpenPilot Multirotor Configuration</source>
|
||||
<translation>OpenPilot多轴飞行器设置</translation>
|
||||
<translation>OpenPilot多旋翼飞行器设置</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>This part of the wizard will set up the OpenPilot controller for use with a flying platform utilizing multiple rotors. The wizard supports the most common types of multirotors. Other variants of multirotors can be configured by using custom configuration options in the Configuration plugin in the GCS.
|
||||
|
||||
Please select the type of multirotor you want to create a configuration for below:</source>
|
||||
<translation>OpenPilot目前支持绝大部分的多轴飞行器类型。
|
||||
本页中未列出来的类型,请稍候进入“设置”界面中单独进行设置。
|
||||
<translation>OpenPilot目前支持绝大部分的多旋翼飞行器类型。
|
||||
本页中未列出来的类型,请稍候进入“Configuration”界面中的“Vehicle”选项页里设置。
|
||||
|
||||
请选择多轴飞行器类型:</translation>
|
||||
请选择多旋翼飞行器类型:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+37"/>
|
||||
<source>Hexacopter H</source>
|
||||
<translation>H型六轴</translation>
|
||||
<translation>H型六旋翼</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -9224,7 +9287,7 @@ p, li { white-space: pre-wrap; }
|
||||
<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt; font-weight:600; color:#ff0000;">VERY IMPORTANT!</span><span style=" font-family:'Lucida Grande'; font-size:10pt;"><br /></span><span style=" font-family:'Lucida Grande'; font-size:10pt; font-weight:600; color:#ff0000;">REMOVE ALL PROPELLERS FROM THE VEHICLE BEFORE PROCEEDING!</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">Connect all components according to the illustration on the summary page, and provide power using an external power supply such as a battery before continuing.</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">Depending on what vehicle you have selected, both the motors controlled by ESCs and/or servos controlled directly by the OpenPilot controller may have to be calibrated. The following steps will guide you safely through this process. </span></p></body></html></source>
|
||||
<translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<translation type="unfinished"><!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:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
@ -9232,7 +9295,7 @@ p, li { white-space: pre-wrap; }
|
||||
<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt; font-weight:600; color:#ff0000;">警告!</span><span style=" font-family:'Lucida Grande'; font-size:10pt;"><br />
|
||||
</span><span style=" font-family:'Lucida Grande'; font-size:10pt; font-weight:600; color:#ff0000;">在进行下一步操作之前,请先将所有螺旋桨从电机上移除!</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">按照示意图将航模所有部件连接好,插上动力电池。</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">接下来的步骤中,设置向导将会安全的引导您为多轴飞行器的电机控制信号进行校准。</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">接下来的步骤中,设置向导将会安全的引导您为多旋翼飞行器的电机控制信号进行校准。</span></p>
|
||||
</body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
@ -9387,7 +9450,7 @@ p, li { white-space: pre-wrap; }
|
||||
<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:12pt; font-weight:600;">OpenPilot设置概要</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;">截至目前,所有基本的OpenPilot设备配置已经完成。</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;">下面框中简要列出了设备类型和基本配置。</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;">请点击“CONNECTION DIAGRAM&quot;查看硬件连接示意图。在接下来的设置开始之前,请参照连接示意图完成航模连接,继续使用USB连接OpenPilot设备,但切记<strong>不要连接电池</strong>,在后面的设置过程中会提示您何时接上电池。</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;">请点击“CONNECTION DIAGRAM&quot;查看硬件连接示意图。在接下来的设置开始之前,请参照连接示意图完成模型连接,继续使用USB连接OpenPilot设备,但切记<strong>不要连接电池</strong>,在后面的设置过程中会提示您何时接上电池。</span></p>
|
||||
</body></html></translation>
|
||||
</message>
|
||||
</context>
|
||||
@ -9456,12 +9519,12 @@ Please select the type of ground vehicle you want to create a configuration for
|
||||
<message>
|
||||
<location/>
|
||||
<source>Tricopter, Quadcopter, Hexacopter</source>
|
||||
<translation>三轴,四周,六轴</translation>
|
||||
<translation>三旋翼,四旋翼,六旋翼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Multirotor</source>
|
||||
<translation>多轴飞行器</translation>
|
||||
<translation>多旋翼飞行器</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -9477,7 +9540,7 @@ Please select the type of ground vehicle you want to create a configuration for
|
||||
<location/>
|
||||
<source>Airplane, Sloper, Jet</source>
|
||||
<translatorcomment>不确定</translatorcomment>
|
||||
<translation>普通,牵引式, 喷气式</translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -9509,8 +9572,8 @@ p, li { white-space: pre-wrap; }
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:12pt; font-weight:600;">航模类型选择</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;">请选择正确的航模类型。务必确保您的选择和实际情况一致,因为接下来的配置将会根据不同的模型有所区别。</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;">目前OpenPilot GCS只支持多轴飞行器和固定翼飞机。</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;">请选择正确的航模类型。务必确保您的选择和实际情况一致,接下来的配置将会根据不同的模型有所区别。</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;">目前OpenPilot GCS只支持多旋翼飞行器和固定翼飞机,其他类型尚待完善。</span></p>
|
||||
</body></html>
|
||||
</translation>
|
||||
</message>
|
||||
@ -10087,7 +10150,7 @@ p, li { white-space: pre-wrap; }
|
||||
<translation>输出</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+419"/>
|
||||
<location line="+420"/>
|
||||
<location line="+24"/>
|
||||
<location line="+31"/>
|
||||
<location line="+31"/>
|
||||
@ -10177,7 +10240,7 @@ p, li { white-space: pre-wrap; }
|
||||
<message>
|
||||
<location filename="../../../src/plugins/config/configgadgetwidget.cpp" line="+218"/>
|
||||
<source>Unsaved changes</source>
|
||||
<translation>设置为保存</translation>
|
||||
<translation>设置未保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
@ -10189,27 +10252,27 @@ Do you still want to proceed?</source>
|
||||
<context>
|
||||
<name>ConfigInputWidget</name>
|
||||
<message>
|
||||
<location filename="../../../src/plugins/config/configinputwidget.cpp" line="+385"/>
|
||||
<location filename="../../../src/plugins/config/configinputwidget.cpp" line="+388"/>
|
||||
<source>http://wiki.openpilot.org/x/04Cf</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Arming Settings are now set to 'Always Disarmed' for your safety.</source>
|
||||
<translation>安全起见,在后续操作开始之前,飞行器强制进入永久锁定状态。</translation>
|
||||
<translation>安全起见,在后续操作开始之前,强制遥控器进入
|
||||
永久锁定状态(除解锁操作外,不响应其他遥控输入)。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>You will have to reconfigure the arming settings manually when the wizard is finished. After the last step of the wizard you will be taken to the Arming Settings screen.</source>
|
||||
<translation>在设置向导结束以后会停留在“解锁设置”选项页,请务必修改飞行器解锁方式。</translation>
|
||||
<translation>在设置向导结束以后会停留在“解锁设置”选项页,请务必修改遥控器解锁方式。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+211"/>
|
||||
<location line="+210"/>
|
||||
<source>Next</source>
|
||||
<translation>下一步</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Welcome to the inputs configuration wizard.
|
||||
|
||||
Please follow the instructions on the screen and only move your controls when asked to.
|
||||
@ -10217,7 +10280,7 @@ Make sure you already configured your hardware settings on the proper tab and re
|
||||
|
||||
You can press 'back' at any time to return to the previous screen or press 'Cancel' to quit the wizard.
|
||||
</source>
|
||||
<translation>欢迎使用遥控输入设置向导。
|
||||
<translation type="vanished">欢迎使用遥控输入设置向导。
|
||||
|
||||
请按照屏幕上提示的指令操作遥控器。
|
||||
|
||||
@ -10225,32 +10288,23 @@ You can press 'back' at any time to return to the previous screen or p
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Please choose your transmitter type:</source>
|
||||
<translation>请选择遥控类型:</translation>
|
||||
<translation type="vanished">请选择遥控类型:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Acro: normal transmitter for fixed-wing or quad</source>
|
||||
<translation>Acro:固定翼和多轴飞行器</translation>
|
||||
<translation type="vanished">Acro:固定翼和多轴飞行器</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>Helicopter: has collective pitch and throttle input</source>
|
||||
<translation>Helicopter:直升机(油门和俯仰混控)</translation>
|
||||
<translation type="vanished">Helicopter:直升机(油门和俯仰混控)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<source>If selecting the Helicopter option, please engage throttle hold now.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Please choose your transmitter mode:</source>
|
||||
<translation>请选择遥控器模式:</translation>
|
||||
<translation type="vanished">请选择遥控器模式:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+45"/>
|
||||
<source>Mode 1: Fore/Aft Cyclic and Yaw on the left, Throttle/Collective and Left/Right Cyclic on the right</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -10270,7 +10324,7 @@ You can press 'back' at any time to return to the previous screen or p
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+6"/>
|
||||
<source>Mode 1: Elevator and Rudder on the left, Throttle and Ailerons on the right</source>
|
||||
<translation>模式1:左手控制升降舵和方向舵,右手控制油门和副翼</translation>
|
||||
</message>
|
||||
@ -10292,42 +10346,38 @@ You can press 'back' at any time to return to the previous screen or p
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>For a Quad: Elevator is Pitch, Ailerons are Roll, and Rudder is Yaw.</source>
|
||||
<translation>对于多轴飞行器,升降舵相当于俯仰,副翼相当于横滚。</translation>
|
||||
<translation>对于多旋翼飞行器,升降舵(ELEV)控制俯仰,副翼(AILE)控制横滚,方向舵(RUDD)控制方向。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+21"/>
|
||||
<source>Please center all controls and trims and press Next when ready.
|
||||
|
||||
If your FlightMode switch has only two positions, leave it in either position.</source>
|
||||
<translation>请将所有摇杆和控制钮放置在中间位置。
|
||||
<translation type="vanished">请将所有摇杆和控制钮放置在中间位置。
|
||||
|
||||
如果您的飞行模式按钮只有两个档位,请放置在任意一个档位上。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<source>Please move all controls to their maximum extents on both directions.
|
||||
|
||||
Press Next when ready.</source>
|
||||
<translation>请拨动所有摇杆和控制钮,移动范围涵盖它们的最大行程空间。
|
||||
<translation type="vanished">请拨动所有摇杆和控制钮,移动范围涵盖它们的最大行程空间。
|
||||
|
||||
完成后请点击“下一步”继续。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+36"/>
|
||||
<source>Please check the picture below and correct all the sticks which show an inverted movement. Press Next when ready.</source>
|
||||
<translation>拨动摇杆并观察图中显示的移动方向,如果需要,请勾选下方对应选框设置逆转,完成后请点击“下一步”继续。</translation>
|
||||
<translation type="vanished">拨动摇杆并观察图中显示的移动方向,如果需要,请勾选下方对应选框设置逆转,完成后请点击“下一步”继续。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>You have completed this wizard, please check below if the picture mimics your sticks movement.
|
||||
|
||||
IMPORTANT: These new settings have not been saved to the board yet. After pressing Next you will go to the Arming Settings tab where you can set your desired arming sequence and save the configuration.</source>
|
||||
<translation>遥控器校准结束,请拨动遥控器摇杆和控制钮,观察下方动画与操作是否完全一致。
|
||||
<translation type="vanished">遥控器校准结束,请拨动遥控器摇杆和控制钮,观察下方动画与操作是否完全一致。
|
||||
|
||||
注意:遥控器校准结果尚未保存,请点击“下一步”进入“解锁设置”页,将解锁动作设置好以后,再点击”保存“按钮将所有遥控器输入设置信息保存。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+124"/>
|
||||
<location line="+191"/>
|
||||
<source>Please enable throttle hold mode.
|
||||
|
||||
Move the Collective Pitch stick.</source>
|
||||
@ -10338,7 +10388,7 @@ Move the Collective Pitch stick.</source>
|
||||
<source>Please toggle the Flight Mode switch.
|
||||
|
||||
For switches you may have to repeat this rapidly.</source>
|
||||
<translation>请拨动飞行模式控制开关。
|
||||
<translation>请拨动飞行模式切换开关。
|
||||
|
||||
您可能需要重复拨动开关数次。</translation>
|
||||
</message>
|
||||
@ -10361,7 +10411,7 @@ Move the %1 stick.</source>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<source>Next / Skip</source>
|
||||
<translation>下一步/忽略</translation>
|
||||
<translation>下一步/跳过</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+726"/>
|
||||
@ -10371,7 +10421,7 @@ Move the %1 stick.</source>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source><p>Arming Settings are now set to 'Always Disarmed' for your safety.</p><p>Be sure your receiver is powered with an external source and Transmitter is on.</p><p align='center'><b>Stop Manual Calibration</b> when done</p></source>
|
||||
<translation><p>安全起见,在后续操作开始之前,飞行器强制进入永久锁定状态。</p><p>请确认遥控器发射机和接收器已经打开。</p><p align='center'>完成手动校准后,请点击<b>结束手动校准</b></p></translation>
|
||||
<translation><p>安全起见,在后续操作开始之前,强制遥控器进入永久锁定状态。</p><p>请确认遥控器发射机和接收器已经打开。</p><p align='center'>完成手动校准后,请点击<b>结束手动校准</b></p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
@ -10386,7 +10436,7 @@ Move the %1 stick.</source>
|
||||
<message>
|
||||
<location line="-764"/>
|
||||
<source> Alternatively, click Next to skip this channel.</source>
|
||||
<translation>你也可以点击“下一步/忽略”跳过这一步。</translation>
|
||||
<translation>你也可以点击“下一步/跳过”忽略该项。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -10394,23 +10444,23 @@ Move the %1 stick.</source>
|
||||
<message>
|
||||
<location filename="../../../src/plugins/coreplugin/connectionmanager.cpp" line="+53"/>
|
||||
<source>USB: OPLinkMini</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Connections:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>设备:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+72"/>
|
||||
<source>Disconnect</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>断开</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-81"/>
|
||||
<location line="+127"/>
|
||||
<source>Connect</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>连接</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -10542,7 +10592,7 @@ Move the %1 stick.</source>
|
||||
<message>
|
||||
<location filename="../../../src/plugins/modelview/modelviewgadgetfactory.cpp" line="+36"/>
|
||||
<source>ModelView</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>模型文件</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -10712,21 +10762,21 @@ Move the %1 stick.</source>
|
||||
<location line="+24"/>
|
||||
<location line="+6"/>
|
||||
<location line="+19"/>
|
||||
<location line="+13"/>
|
||||
<location line="+16"/>
|
||||
<location line="+16"/>
|
||||
<location line="+38"/>
|
||||
<source>Unknown</source>
|
||||
<translation>未知设备</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-179"/>
|
||||
<location line="-182"/>
|
||||
<source>Vehicle type: </source>
|
||||
<translation>航模类型: </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Multirotor</source>
|
||||
<translation>多轴飞行器</translation>
|
||||
<translation>多旋翼飞行器</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
@ -10738,58 +10788,57 @@ Move the %1 stick.</source>
|
||||
<message>
|
||||
<location line="-66"/>
|
||||
<source>Tricopter</source>
|
||||
<translation>三轴</translation>
|
||||
<translation>三旋翼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Quadcopter X</source>
|
||||
<translation>X型四轴</translation>
|
||||
<translation>X型四旋翼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Quadcopter +</source>
|
||||
<translation>十字型四轴</translation>
|
||||
<translation>十字型四旋翼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Hexacopter</source>
|
||||
<translation>六轴</translation>
|
||||
<translation>六旋翼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Hexacopter Coax (Y6)</source>
|
||||
<translatorcomment>同轴型六轴这样翻译是否合适?</translatorcomment>
|
||||
<translation>同轴型六轴 (Y6)</translation>
|
||||
<translation>同轴六旋翼 (Y6)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Hexacopter H</source>
|
||||
<translation>H型六轴</translation>
|
||||
<translation>H型六旋翼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Hexacopter X</source>
|
||||
<translation>X型六轴</translation>
|
||||
<translation>X型六旋翼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Octocopter</source>
|
||||
<translation>八轴</translation>
|
||||
<translation>八旋翼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Octocopter Coax X</source>
|
||||
<translation>同轴X型八轴</translation>
|
||||
<translation>同轴X型八旋翼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Octocopter Coax +</source>
|
||||
<translation>同轴十字型八轴</translation>
|
||||
<translation>同轴十字型八旋翼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Octocopter V</source>
|
||||
<translation>V型八轴</translation>
|
||||
<translation>V型八旋翼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+9"/>
|
||||
@ -10877,7 +10926,12 @@ Move the %1 stick.</source>
|
||||
<translation>电子调速器(ESC)类型: </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<location line="+9"/>
|
||||
<source>Oneshot ESC</source>
|
||||
<translation>Oneshot电调</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Servo type: </source>
|
||||
<translation>伺服舵机类型: </translation>
|
||||
</message>
|
||||
@ -10957,16 +11011,16 @@ Move the %1 stick.</source>
|
||||
<location filename="../../../src/plugins/setupwizard/vehicleconfigurationhelper.cpp" line="+85"/>
|
||||
<location line="+12"/>
|
||||
<source>Done!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>成功!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-12"/>
|
||||
<location line="+12"/>
|
||||
<source>Failed!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>失败!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+136"/>
|
||||
<location line="+141"/>
|
||||
<source>Writing External Mag sensor settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -10986,9 +11040,9 @@ Move the %1 stick.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+172"/>
|
||||
<location line="+31"/>
|
||||
<location line="+36"/>
|
||||
<location line="+199"/>
|
||||
<location line="+32"/>
|
||||
<location line="+37"/>
|
||||
<source>Writing actuator settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -11748,6 +11802,11 @@ The board will be restarted and all settings erased.</source>
|
||||
<source>-</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Prev</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CustomConfigWidget</name>
|
||||
@ -11872,17 +11931,17 @@ The board will be restarted and all settings erased.</source>
|
||||
<message>
|
||||
<location filename="../../../src/plugins/config/airframe_fixedwing.ui"/>
|
||||
<source>Form</source>
|
||||
<translation type="unfinished">界面</translation>
|
||||
<translation>界面</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Airframe</source>
|
||||
<translation type="unfinished">飞行器</translation>
|
||||
<translation>飞行器</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Throttle Curve</source>
|
||||
<translation type="unfinished">油门曲线</translation>
|
||||
<translation>油门曲线</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -12105,7 +12164,7 @@ The board will be restarted and all settings erased.</source>
|
||||
<source>Weight of Roll mixing in percent.
|
||||
Typical values are 100% for + configuration and 50% for X configuration on quads</source>
|
||||
<translation>横滚控制量权重
|
||||
十字型四轴飞行器通常设为100%,而X型则使用50%</translation>
|
||||
十字型四旋翼飞行器通常设为100%,而X型则使用50%</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -12122,7 +12181,7 @@ Typical values are 100% for + configuration and 50% for X configuration on quads
|
||||
<source>Weight of Pitch mixing in percent.
|
||||
Typical values are 100% for + configuration and 50% for X configuration on quads.</source>
|
||||
<translation>俯仰控制量权重
|
||||
十字型四轴飞行器通常设为100%,而X型则使用50%。</translation>
|
||||
十字型四旋翼飞行器通常设为100%,而X型则使用50%。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -12133,8 +12192,8 @@ Typical values are 100% for + configuration and 50% for X configuration on quads
|
||||
<location/>
|
||||
<source>Weight of Yaw mixing in percent.
|
||||
Typical value is 50% for + or X configuration on quads.</source>
|
||||
<translation type="unfinished">方向控制量权重
|
||||
十字型和X型四轴飞行器通常都设为50%。</translation>
|
||||
<translation>方向控制量权重
|
||||
十字型和X型四旋翼飞行器通常都设为50%。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -12209,7 +12268,7 @@ Typical value is 50% for + or X configuration on quads.</source>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Tricopter Yaw Servo channel</source>
|
||||
<translation>三轴飞行器伺服舵机</translation>
|
||||
<translation>三旋翼飞行器伺服舵机</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -12219,72 +12278,72 @@ Typical value is 50% for + or X configuration on quads.</source>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Select output channel for Accessory0 RcInput</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>请为Accessory0控制量选择一个输出通道</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Accessory1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>RcOutput channels</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>输出通道</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>RC Output</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>输出通道</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Accessory0</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>RC Input</source>
|
||||
<translation type="unfinished">遥控输入</translation>
|
||||
<translation>遥控输入</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Select output channel for Accessory2 RcInput</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>请为Accessory2控制量选择一个输出通道</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Select output channel for Accessory1 RcInput</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>请为Accessory1控制量选择一个输出通道</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Accessory2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>RcOutput curve</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>输出曲线</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Curve</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>输出曲线</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Select output curve for Accessory0 RcInput</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>请为 Accessory0选择一个输出曲线</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Select output curve for Accessory1 RcInput</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>请为 Accessory1选择一个输出曲线</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Select output curve for Accessory2 RcInput</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>请为 Accessory2选择一个输出曲线</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -12808,7 +12867,7 @@ even lead to crash. Use with caution.</source>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Send settings to the board but do not save to the non-volatile memory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation type="unfinished">发送配置到控制板,但不保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -12818,7 +12877,7 @@ even lead to crash. Use with caution.</source>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Send settings to the board and save to the non-volatile memory</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation type="unfinished">发送配置到控制板并保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
@ -13134,12 +13193,12 @@ p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:12pt; font-weight:600;">Initial Tuning</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2,sans-serif'; font-size:10pt;">This section of the OpenPilot Wizard allows you to select a set of initial tuning parameters for your airframe. Presented below is a list of common airframe types, select the one that matches your airframe the closest, if unsure select the generic variant.</span></p></body></html></source>
|
||||
<translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<translation type="unfinished"><!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:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:12pt; font-weight:600;">预设稳态飞行参数</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2,sans-serif'; font-size:10pt;">OpenPilot根据目前流行的多轴飞行器提供了一系列机型的稳态飞行控制参数。请从下面列表中选取一个最接近你实际机型的飞行器,如果不确定,请选择以Generic开头的选项。</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2,sans-serif'; font-size:10pt;">OpenPilot根据目前流行的多旋翼飞行器提供了一系列机型的稳态飞行控制参数。请从下面列表中选取一个最接近你实际机型的飞行器,如果不确定,请选择以Generic开头的选项。</span></p>
|
||||
</body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
@ -13212,7 +13271,7 @@ It is suggested that if this is a first time configuration of your controller, r
|
||||
首次投入使用的飞行控制器,建议不要选择此项设置,请尽可能从列表中选择一项最为接近的机型,或者选择以Generic开头的选项。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+85"/>
|
||||
<location line="+93"/>
|
||||
<source>Current Tuning</source>
|
||||
<translation>维持现有参数</translation>
|
||||
</message>
|
||||
@ -13395,6 +13454,11 @@ p, li { white-space: pre-wrap; }
|
||||
<source>Rapid ESC</source>
|
||||
<translation>高速电调</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>OneShot ESC</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>OPEndPage</name>
|
||||
@ -14233,7 +14297,18 @@ Please first select the area of the map to rip with <CTRL>+Left mouse clic
|
||||
<context>
|
||||
<name>ConfigOutputWidget</name>
|
||||
<message>
|
||||
<location filename="../../../src/plugins/config/configoutputwidget.cpp" line="+160"/>
|
||||
<location filename="../../../src/plugins/config/configoutputwidget.cpp" line="+111"/>
|
||||
<source>-</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+261"/>
|
||||
<source>%1 Hz</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-201"/>
|
||||
<source>The actuator module is in an error state. This can also occur because there are no inputs. Please fix these before testing outputs.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -14248,14 +14323,18 @@ Please first select the area of the map to rip with <CTRL>+Left mouse clic
|
||||
<translation>你可能需要保存当前怠速设置。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+238"/>
|
||||
<location line="+219"/>
|
||||
<source>http://wiki.openpilot.org/x/WIGf</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<location line="+32"/>
|
||||
<source>OneShot only works with Receiver Port settings marked with '+OneShot'<br>When using Receiver Port setting 'PPM_PIN8+OneShot' <b><font color='%1'>Bank %2</font></b> must be set to PWM</source>
|
||||
<translation>遥控接收器端口设置为“+OneShot”后才能<br>正常工作。假设设置为“PPM_PIN6+OneShot”,则<b><font color='%1'>输出集%2</font></b>必须设置为PWM</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>OneShot only works with Receiver Port settings marked with '+OneShot'<br>When using Receiver Port setting 'PPM_PIN6+OneShot' <b><font color='#C3A8FF'>Bank 4 (output 6,9-10)</font></b> must be set to PWM</source>
|
||||
<translation>遥控接收器端口设置为“+OneShot”后才能<br>正常工作。假设设置为“PPM_PIN6+OneShot”,则<b><font color='#C3A8FF'>输出集4(6,9-10)</font></b>必须设置为PWM</translation>
|
||||
<translation type="vanished">遥控接收器端口设置为“+OneShot”后才能<br>正常工作。假设设置为“PPM_PIN6+OneShot”,则<b><font color='#C3A8FF'>输出集4(6,9-10)</font></b>必须设置为PWM</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -14388,7 +14467,7 @@ not only the ones visible on screen.</source>
|
||||
<message>
|
||||
<location filename="../../../src/plugins/config/configvehicletypewidget.cpp" line="+142"/>
|
||||
<source>Multirotor</source>
|
||||
<translation>多轴飞行器</translation>
|
||||
<translation type="unfinished">多旋翼飞行器</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
@ -15282,6 +15361,7 @@ Note: for the OpenPilot v8 GPS please select the U-Blox option.</source>
|
||||
<context>
|
||||
<name>InputWizardWidget</name>
|
||||
<message>
|
||||
<location filename="../../../src/plugins/config/input_wizard.ui"/>
|
||||
<source>Welcome to the inputs configuration wizard.
|
||||
|
||||
Please follow the instructions on the screen and only move your controls when asked to.
|
||||
@ -15289,68 +15369,182 @@ Make sure you already configured your hardware settings on the proper tab and re
|
||||
|
||||
You can press 'back' at any time to return to the previous screen or press 'Cancel' to quit the wizard.
|
||||
</source>
|
||||
<translation type="obsolete">欢迎使用遥控输入设置向导。
|
||||
<translation>欢迎使用遥控输入设置向导。
|
||||
|
||||
请按照屏幕上提示的指令操作遥控器。
|
||||
|
||||
设置过程中你可以随时点击“上一步”返回上一设置界面,也可以点击“取消”退出设置向导。
|
||||
设置过程中您可以随时点击“上一步”返回上一设置界面,也可以点击“取消”退出设置向导。
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Please choose your transmitter type:</source>
|
||||
<translation type="obsolete">请选择遥控类型:</translation>
|
||||
<translation>请选择遥控类型:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Acro: normal transmitter for fixed-wing or quad</source>
|
||||
<translation type="obsolete">Acro:固定翼和多轴飞行器</translation>
|
||||
<translation>Acro:固定翼和多旋翼飞行器</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Helicopter: has collective pitch and throttle input</source>
|
||||
<translation type="obsolete">Helicopter:直升机(油门和俯仰混控)</translation>
|
||||
<translation type="unfinished">Helicopter:直升机(油门和俯仰混控)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Please choose your transmitter mode:</source>
|
||||
<translation type="obsolete">请选择遥控器模式:</translation>
|
||||
<translation>请选择遥控器模式:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>For a Quad: Elevator is Pitch, Ailerons are Roll, and Rudder is Yaw.</source>
|
||||
<translation type="obsolete">对于多轴飞行器,升降舵相当于俯仰,副翼相当于横滚。</translation>
|
||||
<translation>对于多旋翼飞行器,升降舵(ELEV)控制俯仰,副翼(AILE)控制横滚,方向舵(RUDD)控制方向。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Please center all controls and trims and press Next when ready.
|
||||
|
||||
If your FlightMode switch has only two positions, leave it in either position.</source>
|
||||
<translation type="obsolete">请将所有摇杆和控制钮放置在中间位置。
|
||||
<translation>请将所有摇杆和控制钮居中放置。
|
||||
|
||||
如果您的飞行模式按钮只有两个档位,请放置在任意一个档位上。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Please move all controls to their maximum extents on both directions.
|
||||
|
||||
Press Next when ready.</source>
|
||||
<translation type="obsolete">请拨动所有摇杆和控制钮,移动范围涵盖它们的最大行程空间。
|
||||
<translation>请拨动所有摇杆和控制钮,移动范围尽可能的覆盖最大行程空间。
|
||||
|
||||
完成后请点击“下一步”继续。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Please check the picture below and correct all the sticks which show an inverted movement. Press Next when ready.</source>
|
||||
<translation type="obsolete">拨动摇杆并观察图中显示的移动方向,如果需要,请勾选下方对应选框设置逆转,完成后请点击“下一步”继续。</translation>
|
||||
<translation>拨动摇杆并观察图中显示的移动方向,如果需要,请勾选下方对应选框设置逆转,完成后请点击“下一步”继续。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>You have completed this wizard, please check below if the picture mimics your sticks movement.
|
||||
|
||||
IMPORTANT: These new settings have not been saved to the board yet. After pressing Next you will go to the Arming Settings tab where you can set your desired arming sequence and save the configuration.</source>
|
||||
<translation type="obsolete">遥控器校准结束,请拨动遥控器摇杆和控制钮,观察下方动画与操作是否完全一致。
|
||||
<translation>遥控器校准结束,请拨动遥控器摇杆和控制钮,观察下方动画与操作是否完全一致。
|
||||
|
||||
注意:遥控器校准结果尚未保存,请点击“下一步”进入“解锁设置”页,将解锁动作设置好以后,再点击”保存“按钮将所有遥控器输入设置信息保存。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Back</source>
|
||||
<translation type="obsolete">上一步</translation>
|
||||
<translation>上一步</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Cancel</source>
|
||||
<translation type="obsolete">取消</translation>
|
||||
<translation>取消</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>If selecting the Helicopter option, please engage throttle hold now.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Mode 1</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Mode 2</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Mode 3</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Mode 4</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Identify sticks instructions</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location/>
|
||||
<source>Next</source>
|
||||
<translation>下一步</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ConfigCcpmWidget</name>
|
||||
<message>
|
||||
<location filename="../../../src/plugins/config/cfg_vehicletypes/configccpmwidget.cpp" line="+1081"/>
|
||||
<source><h1>Swashplate Leveling Routine</h1></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source><b>You are about to start the Swashplate levelling routine.</b><p>This process will start by downloading the current configuration from the GCS to the OP hardware and will adjust your configuration at various stages.<p>The final state of your system should match the current configuration in the GCS config gadget.</p><p>Please ensure all ccpm settings in the GCS are correct before continuing.</p><p>If this process is interrupted, then the state of your OP board may not match the GCS configuration.</p><p><i>After completing this process, please check all settings before attempting to fly.</i></p><p><font color=red><b>Please disconnect your motor to ensure it will not spin up.</b></font><p><hr><i>Do you wish to proceed?</i></p></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+128"/>
|
||||
<source><h2>Neutral levelling</h2><p>Using adjustment of:<ul><li>Servo horns,</li><li>Link lengths,</li><li>Neutral triming spinboxes to the right</li></ul><br>Ensure that the swashplate is in the center of desired travel range and is level.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+14"/>
|
||||
<source><h2>Max levelling</h2><p>Using adjustment of:<ul><li>Max triming spinboxes to the right ONLY</li></ul><br>Ensure that the swashplate is at the top of desired travel range and is level.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source><h2>Min levelling</h2><p>Using adjustment of:<ul><li>Min triming spinboxes to the right ONLY</li></ul><br>Ensure that the swashplate is at the bottom of desired travel range and is level.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+19"/>
|
||||
<source><h2>Levelling verification</h2><p>Adjust the slider to the right over it's full range and observe the swashplate motion. It should remain level over the entire range of travel.</p></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source><h2>Levelling complete</h2><p>Press the Finish button to save these settings to the SD card</p><p>Press the cancel button to return to the pre-levelling settings</p></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+68"/>
|
||||
<source><h2>Levelling Cancelled</h2><p>Previous settings have been restored.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+43"/>
|
||||
<source><h2>Levelling Completed</h2><p>New settings have been saved to the SD card</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source><font color=red><h1>Warning!!!</h2></font></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<source><h2>This code has many configurations.</h2><p>Please double check all settings before attempting flight!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+11"/>
|
||||
<source><h2>The CCPM mixer code needs more testing!</h2><p><font color=red>Use it at your own risk!</font><p>Do you wish to continue?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<source><h2>The CCPM swashplate levelling code is NOT complete!</h2><p><font color=red>DO NOT use it for flight!</font></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
@ -491,7 +491,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1228</width>
|
||||
<height>661</height>
|
||||
<height>669</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_7" rowstretch="1,0,0,0">
|
||||
@ -1967,7 +1967,7 @@ font:bold;</string>
|
||||
<string>objname:StabilizationSettings</string>
|
||||
<string>fieldname:FlightModeAssistMap</string>
|
||||
<string>index:0</string>
|
||||
<string>haslimits:no</string>
|
||||
<string>haslimits:yes</string>
|
||||
<string>scale:1</string>
|
||||
<string>buttongroup:16</string>
|
||||
</stringlist>
|
||||
@ -1993,7 +1993,7 @@ font:bold;</string>
|
||||
<string>objname:StabilizationSettings</string>
|
||||
<string>fieldname:FlightModeAssistMap</string>
|
||||
<string>index:1</string>
|
||||
<string>haslimits:no</string>
|
||||
<string>haslimits:yes</string>
|
||||
<string>scale:1</string>
|
||||
<string>buttongroup:16</string>
|
||||
</stringlist>
|
||||
@ -2019,7 +2019,7 @@ font:bold;</string>
|
||||
<string>objname:StabilizationSettings</string>
|
||||
<string>fieldname:FlightModeAssistMap</string>
|
||||
<string>index:2</string>
|
||||
<string>haslimits:no</string>
|
||||
<string>haslimits:yes</string>
|
||||
<string>scale:1</string>
|
||||
<string>buttongroup:16</string>
|
||||
</stringlist>
|
||||
@ -2048,7 +2048,7 @@ font:bold;</string>
|
||||
<string>objname:StabilizationSettings</string>
|
||||
<string>fieldname:FlightModeAssistMap</string>
|
||||
<string>index:3</string>
|
||||
<string>haslimits:no</string>
|
||||
<string>haslimits:yes</string>
|
||||
<string>scale:1</string>
|
||||
<string>buttongroup:16</string>
|
||||
</stringlist>
|
||||
@ -2077,7 +2077,7 @@ font:bold;</string>
|
||||
<string>objname:StabilizationSettings</string>
|
||||
<string>fieldname:FlightModeAssistMap</string>
|
||||
<string>index:4</string>
|
||||
<string>haslimits:no</string>
|
||||
<string>haslimits:yes</string>
|
||||
<string>scale:1</string>
|
||||
<string>buttongroup:16</string>
|
||||
</stringlist>
|
||||
@ -2106,7 +2106,7 @@ font:bold;</string>
|
||||
<string>objname:StabilizationSettings</string>
|
||||
<string>fieldname:FlightModeAssistMap</string>
|
||||
<string>index:5</string>
|
||||
<string>haslimits:no</string>
|
||||
<string>haslimits:yes</string>
|
||||
<string>scale:1</string>
|
||||
<string>buttongroup:16</string>
|
||||
</stringlist>
|
||||
@ -2220,7 +2220,7 @@ font:bold;</string>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1228</width>
|
||||
<height>661</height>
|
||||
<height>669</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
|
@ -11,7 +11,7 @@
|
||||
|
||||
At the discretion of the user of this library,
|
||||
this software may be licensed under the terms of the
|
||||
GNU Public License v3, a BSD-Style license, or the
|
||||
GNU General Public License v3, a BSD-Style license, or the
|
||||
original HIDAPI license as outlined in the LICENSE.txt,
|
||||
LICENSE-gpl3.txt, LICENSE-bsd.txt, and LICENSE-orig.txt
|
||||
files located at the root of the source distribution.
|
||||
@ -218,7 +218,8 @@ extern "C" {
|
||||
|
||||
@returns
|
||||
This function returns the actual number of bytes read and
|
||||
-1 on error.
|
||||
-1 on error. If no packet was available to be read within
|
||||
the timeout period, this function returns 0.
|
||||
*/
|
||||
int HID_API_EXPORT HID_API_CALL hid_read_timeout(hid_device *dev, unsigned char *data, size_t length, int milliseconds);
|
||||
|
||||
@ -237,7 +238,8 @@ extern "C" {
|
||||
|
||||
@returns
|
||||
This function returns the actual number of bytes read and
|
||||
-1 on error.
|
||||
-1 on error. If no packet was available to be read and
|
||||
the handle is in non-blocking mode, this function returns 0.
|
||||
*/
|
||||
int HID_API_EXPORT HID_API_CALL hid_read(hid_device *device, unsigned char *data, size_t length);
|
||||
|
||||
@ -291,22 +293,26 @@ extern "C" {
|
||||
|
||||
/** @brief Get a feature report from a HID device.
|
||||
|
||||
Make sure to set the first byte of @p data[] to the Report
|
||||
ID of the report to be read. Make sure to allow space for
|
||||
this extra byte in @p data[].
|
||||
Set the first byte of @p data[] to the Report ID of the
|
||||
report to be read. Make sure to allow space for this
|
||||
extra byte in @p data[]. Upon return, the first byte will
|
||||
still contain the Report ID, and the report data will
|
||||
start in data[1].
|
||||
|
||||
@ingroup API
|
||||
@param device A device handle returned from hid_open().
|
||||
@param data A buffer to put the read data into, including
|
||||
the Report ID. Set the first byte of @p data[] to the
|
||||
Report ID of the report to be read.
|
||||
Report ID of the report to be read, or set it to zero
|
||||
if your device does not use numbered reports.
|
||||
@param length The number of bytes to read, including an
|
||||
extra byte for the report ID. The buffer can be longer
|
||||
than the actual report.
|
||||
|
||||
@returns
|
||||
This function returns the number of bytes read and
|
||||
-1 on error.
|
||||
This function returns the number of bytes read plus
|
||||
one for the report ID (which is still in the first
|
||||
byte), or -1 on error.
|
||||
*/
|
||||
int HID_API_EXPORT HID_API_CALL hid_get_feature_report(hid_device *device, unsigned char *data, size_t length);
|
||||
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
At the discretion of the user of this library,
|
||||
this software may be licensed under the terms of the
|
||||
GNU Public License v3, a BSD-Style license, or the
|
||||
GNU General Public License v3, a BSD-Style license, or the
|
||||
original HIDAPI license as outlined in the LICENSE.txt,
|
||||
LICENSE-gpl3.txt, LICENSE-bsd.txt, and LICENSE-orig.txt
|
||||
files located at the root of the source distribution.
|
||||
@ -44,11 +44,74 @@
|
||||
#include <wchar.h>
|
||||
|
||||
/* GNU / LibUSB */
|
||||
#include "libusb.h"
|
||||
#include "iconv.h"
|
||||
#include <libusb.h>
|
||||
#ifndef __ANDROID__
|
||||
#include <iconv.h>
|
||||
#endif
|
||||
|
||||
#include "../hidapi.h"
|
||||
|
||||
#ifdef __ANDROID__
|
||||
|
||||
/* Barrier implementation because Android/Bionic don't have pthread_barrier.
|
||||
This implementation came from Brent Priddy and was posted on
|
||||
StackOverflow. It is used with his permission. */
|
||||
typedef int pthread_barrierattr_t;
|
||||
typedef struct pthread_barrier {
|
||||
pthread_mutex_t mutex;
|
||||
pthread_cond_t cond;
|
||||
int count;
|
||||
int trip_count;
|
||||
} pthread_barrier_t;
|
||||
|
||||
static int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count)
|
||||
{
|
||||
if(count == 0) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(pthread_mutex_init(&barrier->mutex, 0) < 0) {
|
||||
return -1;
|
||||
}
|
||||
if(pthread_cond_init(&barrier->cond, 0) < 0) {
|
||||
pthread_mutex_destroy(&barrier->mutex);
|
||||
return -1;
|
||||
}
|
||||
barrier->trip_count = count;
|
||||
barrier->count = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pthread_barrier_destroy(pthread_barrier_t *barrier)
|
||||
{
|
||||
pthread_cond_destroy(&barrier->cond);
|
||||
pthread_mutex_destroy(&barrier->mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pthread_barrier_wait(pthread_barrier_t *barrier)
|
||||
{
|
||||
pthread_mutex_lock(&barrier->mutex);
|
||||
++(barrier->count);
|
||||
if(barrier->count >= barrier->trip_count)
|
||||
{
|
||||
barrier->count = 0;
|
||||
pthread_cond_broadcast(&barrier->cond);
|
||||
pthread_mutex_unlock(&barrier->mutex);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
pthread_cond_wait(&barrier->cond, &(barrier->mutex));
|
||||
pthread_mutex_unlock(&barrier->mutex);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
@ -105,6 +168,7 @@ struct hid_device_ {
|
||||
pthread_cond_t condition;
|
||||
pthread_barrier_t barrier; /* Ensures correct startup sequence */
|
||||
int shutdown_thread;
|
||||
int cancelled;
|
||||
struct libusb_transfer *transfer;
|
||||
|
||||
/* List of received input reports. */
|
||||
@ -249,9 +313,9 @@ static int get_usage(uint8_t *report_descriptor, size_t size,
|
||||
}
|
||||
#endif /* INVASIVE_GET_USAGE */
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
/* The FreeBSD version of libusb doesn't have this funciton. In mainline
|
||||
libusb, it's inlined in libusb.h. This function will bear a striking
|
||||
#if defined(__FreeBSD__) && __FreeBSD__ < 10
|
||||
/* The libusb version included in FreeBSD < 10 doesn't have this function. In
|
||||
mainline libusb, it's inlined in libusb.h. This function will bear a striking
|
||||
resemblence to that one, because there's about one way to code it.
|
||||
|
||||
Note that the data parameter is Unicode in UTF-16LE encoding.
|
||||
@ -325,8 +389,9 @@ static wchar_t *get_usb_string(libusb_device_handle *dev, uint8_t idx)
|
||||
char buf[512];
|
||||
int len;
|
||||
wchar_t *str = NULL;
|
||||
wchar_t wbuf[256];
|
||||
|
||||
#ifndef __ANDROID__ /* we don't use iconv on Android */
|
||||
wchar_t wbuf[256];
|
||||
/* iconv variables */
|
||||
iconv_t ic;
|
||||
size_t inbytes;
|
||||
@ -338,6 +403,7 @@ static wchar_t *get_usb_string(libusb_device_handle *dev, uint8_t idx)
|
||||
char *inptr;
|
||||
#endif
|
||||
char *outptr;
|
||||
#endif
|
||||
|
||||
/* Determine which language to use. */
|
||||
uint16_t lang;
|
||||
@ -354,6 +420,25 @@ static wchar_t *get_usb_string(libusb_device_handle *dev, uint8_t idx)
|
||||
if (len < 0)
|
||||
return NULL;
|
||||
|
||||
#ifdef __ANDROID__
|
||||
|
||||
/* Bionic does not have iconv support nor wcsdup() function, so it
|
||||
has to be done manually. The following code will only work for
|
||||
code points that can be represented as a single UTF-16 character,
|
||||
and will incorrectly convert any code points which require more
|
||||
than one UTF-16 character.
|
||||
|
||||
Skip over the first character (2-bytes). */
|
||||
len -= 2;
|
||||
str = malloc((len / 2 + 1) * sizeof(wchar_t));
|
||||
int i;
|
||||
for (i = 0; i < len / 2; i++) {
|
||||
str[i] = buf[i * 2 + 2] | (buf[i * 2 + 3] << 8);
|
||||
}
|
||||
str[len / 2] = 0x00000000;
|
||||
|
||||
#else
|
||||
|
||||
/* buf does not need to be explicitly NULL-terminated because
|
||||
it is only passed into iconv() which does not need it. */
|
||||
|
||||
@ -387,6 +472,8 @@ static wchar_t *get_usb_string(libusb_device_handle *dev, uint8_t idx)
|
||||
err:
|
||||
iconv_close(ic);
|
||||
|
||||
#endif
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
@ -618,7 +705,8 @@ hid_device * hid_open(unsigned short vendor_id, unsigned short product_id, const
|
||||
if (cur_dev->vendor_id == vendor_id &&
|
||||
cur_dev->product_id == product_id) {
|
||||
if (serial_number) {
|
||||
if (wcscmp(serial_number, cur_dev->serial_number) == 0) {
|
||||
if (cur_dev->serial_number &&
|
||||
wcscmp(serial_number, cur_dev->serial_number) == 0) {
|
||||
path_to_open = cur_dev->path;
|
||||
break;
|
||||
}
|
||||
@ -683,10 +771,12 @@ static void read_callback(struct libusb_transfer *transfer)
|
||||
}
|
||||
else if (transfer->status == LIBUSB_TRANSFER_CANCELLED) {
|
||||
dev->shutdown_thread = 1;
|
||||
dev->cancelled = 1;
|
||||
return;
|
||||
}
|
||||
else if (transfer->status == LIBUSB_TRANSFER_NO_DEVICE) {
|
||||
dev->shutdown_thread = 1;
|
||||
dev->cancelled = 1;
|
||||
return;
|
||||
}
|
||||
else if (transfer->status == LIBUSB_TRANSFER_TIMED_OUT) {
|
||||
@ -701,6 +791,7 @@ static void read_callback(struct libusb_transfer *transfer)
|
||||
if (res != 0) {
|
||||
LOG("Unable to submit URB. libusb error code: %d\n", res);
|
||||
dev->shutdown_thread = 1;
|
||||
dev->cancelled = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -750,10 +841,10 @@ static void *read_thread(void *param)
|
||||
|
||||
/* Cancel any transfer that may be pending. This call will fail
|
||||
if no transfers are pending, but that's OK. */
|
||||
if (libusb_cancel_transfer(dev->transfer) == 0) {
|
||||
/* The transfer was cancelled, so wait for its completion. */
|
||||
libusb_handle_events(usb_context);
|
||||
}
|
||||
libusb_cancel_transfer(dev->transfer);
|
||||
|
||||
while (!dev->cancelled)
|
||||
libusb_handle_events_completed(usb_context, &dev->cancelled);
|
||||
|
||||
/* Now that the read thread is stopping, Wake any threads which are
|
||||
waiting on data (in hid_read_timeout()). Do this under a mutex to
|
||||
@ -786,11 +877,11 @@ hid_device * HID_API_EXPORT hid_open_path(const char *path)
|
||||
int d = 0;
|
||||
int good_open = 0;
|
||||
|
||||
dev = new_hid_device();
|
||||
|
||||
if(hid_init() < 0)
|
||||
return NULL;
|
||||
|
||||
dev = new_hid_device();
|
||||
|
||||
libusb_get_device_list(usb_context, &devs);
|
||||
while ((usb_dev = devs[d++]) != NULL) {
|
||||
struct libusb_device_descriptor desc;
|
||||
@ -1205,9 +1296,9 @@ int HID_API_EXPORT_CALL hid_get_indexed_string(hid_device *dev, int string_index
|
||||
}
|
||||
|
||||
|
||||
HID_API_EXPORT const wchar_t * HID_API_CALL hid_error(hid_device *dev __attribute__ ((unused)))
|
||||
HID_API_EXPORT const wchar_t * HID_API_CALL hid_error(hid_device *dev)
|
||||
{
|
||||
return NULL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
At the discretion of the user of this library,
|
||||
this software may be licensed under the terms of the
|
||||
GNU Public License v3, a BSD-Style license, or the
|
||||
GNU General Public License v3, a BSD-Style license, or the
|
||||
original HIDAPI license as outlined in the LICENSE.txt,
|
||||
LICENSE-gpl3.txt, LICENSE-bsd.txt, and LICENSE-orig.txt
|
||||
files located at the root of the source distribution.
|
||||
@ -80,6 +80,27 @@ struct hid_device_ {
|
||||
|
||||
static __u32 kernel_version = 0;
|
||||
|
||||
static __u32 detect_kernel_version(void)
|
||||
{
|
||||
struct utsname name;
|
||||
int major, minor, release;
|
||||
int ret;
|
||||
|
||||
uname(&name);
|
||||
ret = sscanf(name.release, "%d.%d.%d", &major, &minor, &release);
|
||||
if (ret == 3) {
|
||||
return KERNEL_VERSION(major, minor, release);
|
||||
}
|
||||
|
||||
ret = sscanf(name.release, "%d.%d", &major, &minor);
|
||||
if (ret == 2) {
|
||||
return KERNEL_VERSION(major, minor, 0);
|
||||
}
|
||||
|
||||
printf("Couldn't determine kernel version from version string \"%s\"\n", name.release);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static hid_device *new_hid_device(void)
|
||||
{
|
||||
hid_device *dev = calloc(1, sizeof(hid_device));
|
||||
@ -345,6 +366,8 @@ int HID_API_EXPORT hid_init(void)
|
||||
if (!locale)
|
||||
setlocale(LC_CTYPE, "");
|
||||
|
||||
kernel_version = detect_kernel_version();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -600,21 +623,6 @@ hid_device * HID_API_EXPORT hid_open_path(const char *path)
|
||||
|
||||
dev = new_hid_device();
|
||||
|
||||
if (kernel_version == 0) {
|
||||
struct utsname name;
|
||||
int major, minor, release;
|
||||
int ret;
|
||||
uname(&name);
|
||||
ret = sscanf(name.release, "%d.%d.%d", &major, &minor, &release);
|
||||
if (ret == 3) {
|
||||
kernel_version = major << 16 | minor << 8 | release;
|
||||
//printf("Kernel Version: %d\n", kernel_version);
|
||||
}
|
||||
else {
|
||||
printf("Couldn't sscanf() version string %s\n", name.release);
|
||||
}
|
||||
}
|
||||
|
||||
/* OPEN HERE */
|
||||
dev->device_handle = open(path, O_RDWR);
|
||||
|
||||
@ -700,6 +708,7 @@ int HID_API_EXPORT hid_read_timeout(hid_device *dev, unsigned char *data, size_t
|
||||
bytes_read = 0;
|
||||
|
||||
if (bytes_read >= 0 &&
|
||||
kernel_version != 0 &&
|
||||
kernel_version < KERNEL_VERSION(2,6,34) &&
|
||||
dev->uses_numbered_reports) {
|
||||
/* Work around a kernel bug. Chop off the first byte. */
|
||||
|
@ -11,7 +11,7 @@
|
||||
|
||||
At the discretion of the user of this library,
|
||||
this software may be licensed under the terms of the
|
||||
GNU Public License v3, a BSD-Style license, or the
|
||||
GNU General Public License v3, a BSD-Style license, or the
|
||||
original HIDAPI license as outlined in the LICENSE.txt,
|
||||
LICENSE-gpl3.txt, LICENSE-bsd.txt, and LICENSE-orig.txt
|
||||
files located at the root of the source distribution.
|
||||
@ -24,7 +24,6 @@
|
||||
|
||||
#include <IOKit/hid/IOHIDManager.h>
|
||||
#include <IOKit/hid/IOHIDKeys.h>
|
||||
#include <IOKit/IOKitLib.h>
|
||||
#include <CoreFoundation/CoreFoundation.h>
|
||||
#include <wchar.h>
|
||||
#include <locale.h>
|
||||
@ -265,6 +264,46 @@ static int get_string_property(IOHIDDeviceRef device, CFStringRef prop, wchar_t
|
||||
|
||||
}
|
||||
|
||||
static int get_string_property_utf8(IOHIDDeviceRef device, CFStringRef prop, char *buf, size_t len)
|
||||
{
|
||||
CFStringRef str;
|
||||
if (!len)
|
||||
return 0;
|
||||
|
||||
str = IOHIDDeviceGetProperty(device, prop);
|
||||
|
||||
buf[0] = 0;
|
||||
|
||||
if (str) {
|
||||
len--;
|
||||
|
||||
CFIndex str_len = CFStringGetLength(str);
|
||||
CFRange range;
|
||||
range.location = 0;
|
||||
range.length = str_len;
|
||||
CFIndex used_buf_len;
|
||||
CFIndex chars_copied;
|
||||
chars_copied = CFStringGetBytes(str,
|
||||
range,
|
||||
kCFStringEncodingUTF8,
|
||||
(char)'?',
|
||||
FALSE,
|
||||
(UInt8*)buf,
|
||||
len,
|
||||
&used_buf_len);
|
||||
|
||||
if (used_buf_len == len)
|
||||
buf[len] = 0; /* len is decremented above */
|
||||
else
|
||||
buf[used_buf_len] = 0;
|
||||
|
||||
return used_buf_len;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int get_serial_number(IOHIDDeviceRef device, wchar_t *buf, size_t len)
|
||||
{
|
||||
return get_string_property(device, CFSTR(kIOHIDSerialNumberKey), buf, len);
|
||||
@ -291,54 +330,33 @@ static wchar_t *dup_wcs(const wchar_t *s)
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if MAC_OS_X_VERSION_MIN_REQUIRED != MAC_OS_X_VERSION_10_5
|
||||
#warning "hidapi must be compiled/linked with -mmacosx-version-min=10.5 if you want OS X 10.5 compatibility"
|
||||
#endif
|
||||
|
||||
/* hidapi_IOHIDDeviceGetService()
|
||||
*
|
||||
* Return the io_service_t corresponding to a given IOHIDDeviceRef, either by:
|
||||
* - on OS X 10.6 and above, calling IOHIDDeviceGetService()
|
||||
* - on OS X 10.5, extract it from the IOHIDDevice struct
|
||||
*/
|
||||
static io_service_t hidapi_IOHIDDeviceGetService(IOHIDDeviceRef device)
|
||||
static int make_path(IOHIDDeviceRef device, char *buf, size_t len)
|
||||
{
|
||||
/* When compiled with '-mmacosx-version-min=10.5', IOHIDDeviceGetService()
|
||||
* is weakly linked in so we can decide to use it (or not) at runtime.
|
||||
*/
|
||||
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
|
||||
if (IOHIDDeviceGetService != NULL) {
|
||||
/* OS X 10.6 and above: IOHIDDeviceGetService() exists */
|
||||
return IOHIDDeviceGetService(device);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
/* OS X 10.5: IOHIDDeviceGetService() doesn't exist.
|
||||
* Be naughty and pull the service out of the IOHIDDevice.
|
||||
* Tested and working on OS X 10.5.8 i386, x86_64, and ppc
|
||||
*/
|
||||
struct IOHIDDevice_internal {
|
||||
/* The first field of the IOHIDDevice struct is a
|
||||
* CFRuntimeBase (which is a private CF struct).
|
||||
*
|
||||
* a, b, and c are the 3 fields that make up a CFRuntimeBase.
|
||||
* See http://opensource.apple.com/source/CF/CF-476.18/CFRuntime.h
|
||||
*
|
||||
* The second field of the IOHIDDevice is the io_service_t we're looking for.
|
||||
*/
|
||||
//CFRuntimeBase base;
|
||||
uintptr_t a;
|
||||
uint8_t b[4];
|
||||
#if __LP64__
|
||||
uint32_t c;
|
||||
#endif
|
||||
io_service_t service;
|
||||
};
|
||||
struct IOHIDDevice_internal *tmp = (struct IOHIDDevice_internal *)device;
|
||||
int res;
|
||||
unsigned short vid, pid;
|
||||
char transport[32];
|
||||
int32_t location;
|
||||
|
||||
return tmp->service;
|
||||
}
|
||||
buf[0] = '\0';
|
||||
|
||||
res = get_string_property_utf8(
|
||||
device, CFSTR(kIOHIDTransportKey),
|
||||
transport, sizeof(transport));
|
||||
|
||||
if (!res)
|
||||
return -1;
|
||||
|
||||
location = get_location_id(device);
|
||||
vid = get_vendor_id(device);
|
||||
pid = get_product_id(device);
|
||||
|
||||
res = snprintf(buf, len, "%s_%04hx_%04hx_%x",
|
||||
transport, vid, pid, location);
|
||||
|
||||
|
||||
buf[len-1] = '\0';
|
||||
return res+1;
|
||||
}
|
||||
|
||||
/* Initialize the IOHIDManager. Return 0 for success and -1 for failure. */
|
||||
@ -402,6 +420,7 @@ struct hid_device_info HID_API_EXPORT *hid_enumerate(unsigned short vendor_id,
|
||||
process_pending_events();
|
||||
|
||||
/* Get a list of the Devices */
|
||||
IOHIDManagerSetDeviceMatching(hid_mgr, NULL);
|
||||
CFSetRef device_set = IOHIDManagerCopyDevices(hid_mgr);
|
||||
|
||||
/* Convert the list into a C array so we can iterate easily. */
|
||||
@ -415,6 +434,7 @@ struct hid_device_info HID_API_EXPORT *hid_enumerate(unsigned short vendor_id,
|
||||
unsigned short dev_pid;
|
||||
#define BUF_LEN 256
|
||||
wchar_t buf[BUF_LEN];
|
||||
char cbuf[BUF_LEN];
|
||||
|
||||
IOHIDDeviceRef dev = device_array[i];
|
||||
|
||||
@ -428,9 +448,7 @@ struct hid_device_info HID_API_EXPORT *hid_enumerate(unsigned short vendor_id,
|
||||
if ((vendor_id == 0x0 || vendor_id == dev_vid) &&
|
||||
(product_id == 0x0 || product_id == dev_pid)) {
|
||||
struct hid_device_info *tmp;
|
||||
io_object_t iokit_dev;
|
||||
kern_return_t res;
|
||||
io_string_t path;
|
||||
size_t len;
|
||||
|
||||
/* VID/PID match. Create the record. */
|
||||
tmp = malloc(sizeof(struct hid_device_info));
|
||||
@ -448,14 +466,8 @@ struct hid_device_info HID_API_EXPORT *hid_enumerate(unsigned short vendor_id,
|
||||
|
||||
/* Fill out the record */
|
||||
cur_dev->next = NULL;
|
||||
|
||||
/* Fill in the path (IOService plane) */
|
||||
iokit_dev = hidapi_IOHIDDeviceGetService(dev);
|
||||
res = IORegistryEntryGetPath(iokit_dev, kIOServicePlane, path);
|
||||
if (res == KERN_SUCCESS)
|
||||
cur_dev->path = strdup(path);
|
||||
else
|
||||
cur_dev->path = strdup("");
|
||||
len = make_path(dev, cbuf, sizeof(cbuf));
|
||||
cur_dev->path = strdup(cbuf);
|
||||
|
||||
/* Serial Number */
|
||||
get_serial_number(dev, buf, BUF_LEN);
|
||||
@ -669,77 +681,76 @@ static void *read_thread(void *param)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* hid_open_path()
|
||||
*
|
||||
* path must be a valid path to an IOHIDDevice in the IOService plane
|
||||
* Example: "IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/EHC1@1D,7/AppleUSBEHCI/PLAYSTATION(R)3 Controller@fd120000/IOUSBInterface@0/IOUSBHIDDriver"
|
||||
*/
|
||||
hid_device * HID_API_EXPORT hid_open_path(const char *path)
|
||||
{
|
||||
int i;
|
||||
hid_device *dev = NULL;
|
||||
io_registry_entry_t entry = MACH_PORT_NULL;
|
||||
|
||||
CFIndex num_devices;
|
||||
|
||||
dev = new_hid_device();
|
||||
|
||||
/* Set up the HID Manager if it hasn't been done */
|
||||
if (hid_init() < 0)
|
||||
return NULL;
|
||||
|
||||
/* Get the IORegistry entry for the given path */
|
||||
entry = IORegistryEntryFromPath(kIOMasterPortDefault, path);
|
||||
if (entry == MACH_PORT_NULL) {
|
||||
/* Path wasn't valid (maybe device was removed?) */
|
||||
goto return_error;
|
||||
}
|
||||
/* give the IOHIDManager a chance to update itself */
|
||||
process_pending_events();
|
||||
|
||||
/* Create an IOHIDDevice for the entry */
|
||||
dev->device_handle = IOHIDDeviceCreate(kCFAllocatorDefault, entry);
|
||||
if (dev->device_handle == NULL) {
|
||||
/* Error creating the HID device */
|
||||
goto return_error;
|
||||
}
|
||||
CFSetRef device_set = IOHIDManagerCopyDevices(hid_mgr);
|
||||
|
||||
/* Open the IOHIDDevice */
|
||||
IOReturn ret = IOHIDDeviceOpen(dev->device_handle, kIOHIDOptionsTypeSeizeDevice);
|
||||
if (ret == kIOReturnSuccess) {
|
||||
char str[32];
|
||||
num_devices = CFSetGetCount(device_set);
|
||||
IOHIDDeviceRef *device_array = calloc(num_devices, sizeof(IOHIDDeviceRef));
|
||||
CFSetGetValues(device_set, (const void **) device_array);
|
||||
for (i = 0; i < num_devices; i++) {
|
||||
char cbuf[BUF_LEN];
|
||||
size_t len;
|
||||
IOHIDDeviceRef os_dev = device_array[i];
|
||||
|
||||
/* Create the buffers for receiving data */
|
||||
dev->max_input_report_len = (CFIndex) get_max_report_length(dev->device_handle);
|
||||
dev->input_report_buf = calloc(dev->max_input_report_len, sizeof(uint8_t));
|
||||
len = make_path(os_dev, cbuf, sizeof(cbuf));
|
||||
if (!strcmp(cbuf, path)) {
|
||||
/* Matched Paths. Open this Device. */
|
||||
IOReturn ret = IOHIDDeviceOpen(os_dev, kIOHIDOptionsTypeSeizeDevice);
|
||||
if (ret == kIOReturnSuccess) {
|
||||
char str[32];
|
||||
|
||||
/* Create the Run Loop Mode for this device.
|
||||
printing the reference seems to work. */
|
||||
sprintf(str, "HIDAPI_%p", dev->device_handle);
|
||||
dev->run_loop_mode =
|
||||
CFStringCreateWithCString(NULL, str, kCFStringEncodingASCII);
|
||||
|
||||
/* Attach the device to a Run Loop */
|
||||
IOHIDDeviceRegisterInputReportCallback(
|
||||
dev->device_handle, dev->input_report_buf, dev->max_input_report_len,
|
||||
&hid_report_callback, dev);
|
||||
IOHIDDeviceRegisterRemovalCallback(dev->device_handle, hid_device_removal_callback, dev);
|
||||
free(device_array);
|
||||
CFRetain(os_dev);
|
||||
CFRelease(device_set);
|
||||
dev->device_handle = os_dev;
|
||||
|
||||
/* Start the read thread */
|
||||
pthread_create(&dev->thread, NULL, read_thread, dev);
|
||||
/* Create the buffers for receiving data */
|
||||
dev->max_input_report_len = (CFIndex) get_max_report_length(os_dev);
|
||||
dev->input_report_buf = calloc(dev->max_input_report_len, sizeof(uint8_t));
|
||||
|
||||
/* Wait here for the read thread to be initialized. */
|
||||
pthread_barrier_wait(&dev->barrier);
|
||||
|
||||
IOObjectRelease(entry);
|
||||
return dev;
|
||||
}
|
||||
else {
|
||||
goto return_error;
|
||||
/* Create the Run Loop Mode for this device.
|
||||
printing the reference seems to work. */
|
||||
sprintf(str, "HIDAPI_%p", os_dev);
|
||||
dev->run_loop_mode =
|
||||
CFStringCreateWithCString(NULL, str, kCFStringEncodingASCII);
|
||||
|
||||
/* Attach the device to a Run Loop */
|
||||
IOHIDDeviceRegisterInputReportCallback(
|
||||
os_dev, dev->input_report_buf, dev->max_input_report_len,
|
||||
&hid_report_callback, dev);
|
||||
IOHIDDeviceRegisterRemovalCallback(dev->device_handle, hid_device_removal_callback, dev);
|
||||
|
||||
/* Start the read thread */
|
||||
pthread_create(&dev->thread, NULL, read_thread, dev);
|
||||
|
||||
/* Wait here for the read thread to be initialized. */
|
||||
pthread_barrier_wait(&dev->barrier);
|
||||
|
||||
return dev;
|
||||
}
|
||||
else {
|
||||
goto return_error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return_error:
|
||||
if (dev->device_handle != NULL)
|
||||
CFRelease(dev->device_handle);
|
||||
|
||||
if (entry != MACH_PORT_NULL)
|
||||
IOObjectRelease(entry);
|
||||
|
||||
free(device_array);
|
||||
CFRelease(device_set);
|
||||
free_hid_device(dev);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -168,7 +168,7 @@ void ConnectionDiagram::setupGraphicsScene()
|
||||
case VehicleConfigurationSource::CONTROLLER_CC3D:
|
||||
prefix = "cc-";
|
||||
if (m_configSource->getEscType() == VehicleConfigurationSource::ESC_ONESHOT ||
|
||||
m_configSource->getEscType() == VehicleConfigurationSource::ESC_RAPID) {
|
||||
m_configSource->getEscType() == VehicleConfigurationSource::ESC_SYNCHED) {
|
||||
suffix = "-oneshot";
|
||||
}
|
||||
break;
|
||||
|
@ -47,7 +47,11 @@ bool EscPage::validatePage()
|
||||
if (ui->oneshotESCButton->isChecked()) {
|
||||
getWizard()->setEscType(SetupWizard::ESC_ONESHOT);
|
||||
} else if (ui->rapidESCButton->isChecked()) {
|
||||
getWizard()->setEscType(SetupWizard::ESC_RAPID);
|
||||
if (isSynchOrOneShotAvailable()) {
|
||||
getWizard()->setEscType(SetupWizard::ESC_SYNCHED);
|
||||
} else {
|
||||
getWizard()->setEscType(SetupWizard::ESC_RAPID);
|
||||
}
|
||||
} else if (ui->defaultESCButton->isChecked()) {
|
||||
getWizard()->setEscType(SetupWizard::ESC_STANDARD);
|
||||
}
|
||||
@ -58,7 +62,18 @@ bool EscPage::validatePage()
|
||||
|
||||
void EscPage::initializePage()
|
||||
{
|
||||
bool enabled = true;
|
||||
bool enabled = isSynchOrOneShotAvailable();
|
||||
|
||||
ui->oneshotESCButton->setEnabled(enabled);
|
||||
if (ui->oneshotESCButton->isChecked() && !enabled) {
|
||||
ui->oneshotESCButton->setChecked(false);
|
||||
ui->rapidESCButton->setChecked(true);
|
||||
}
|
||||
}
|
||||
|
||||
bool EscPage::isSynchOrOneShotAvailable()
|
||||
{
|
||||
bool available = true;
|
||||
|
||||
switch (getWizard()->getControllerType()) {
|
||||
case SetupWizard::CONTROLLER_CC:
|
||||
@ -70,10 +85,10 @@ void EscPage::initializePage()
|
||||
case SetupWizard::MULTI_ROTOR_QUAD_X:
|
||||
case SetupWizard::MULTI_ROTOR_QUAD_H:
|
||||
case SetupWizard::MULTI_ROTOR_QUAD_PLUS:
|
||||
enabled = getWizard()->getInputType() != SetupWizard::INPUT_PWM;
|
||||
available = getWizard()->getInputType() != SetupWizard::INPUT_PWM;
|
||||
break;
|
||||
default:
|
||||
enabled = false;
|
||||
available = false;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@ -82,9 +97,5 @@ void EscPage::initializePage()
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
ui->oneshotESCButton->setEnabled(enabled);
|
||||
if (ui->oneshotESCButton->isChecked() && !enabled) {
|
||||
ui->oneshotESCButton->setChecked(false);
|
||||
ui->rapidESCButton->setChecked(true);
|
||||
}
|
||||
return available;
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ public:
|
||||
|
||||
private:
|
||||
Ui::EscPage *ui;
|
||||
bool isSynchOrOneShotAvailable();
|
||||
};
|
||||
|
||||
#endif // ESCPAGE_H
|
||||
|
@ -385,6 +385,9 @@ QString SetupWizard::getSummaryText()
|
||||
case ESC_RAPID:
|
||||
summary.append(tr("Rapid ESC (%1 Hz)").arg(VehicleConfigurationHelper::RAPID_ESC_FREQUENCY));
|
||||
break;
|
||||
case ESC_SYNCHED:
|
||||
summary.append(tr("Synched ESC"));
|
||||
break;
|
||||
case ESC_ONESHOT:
|
||||
summary.append(tr("Oneshot ESC"));
|
||||
break;
|
||||
|
@ -151,7 +151,7 @@ void VehicleConfigurationHelper::applyHardwareConfiguration()
|
||||
break;
|
||||
case VehicleConfigurationSource::INPUT_PPM:
|
||||
if (m_configSource->getEscType() == VehicleConfigurationSource::ESC_ONESHOT ||
|
||||
m_configSource->getEscType() == VehicleConfigurationSource::ESC_RAPID) {
|
||||
m_configSource->getEscType() == VehicleConfigurationSource::ESC_SYNCHED) {
|
||||
data.CC_RcvrPort = HwSettings::CC_RCVRPORT_PPM_PIN8ONESHOT;
|
||||
} else {
|
||||
data.CC_RcvrPort = HwSettings::CC_RCVRPORT_PPMNOONESHOT;
|
||||
@ -377,15 +377,12 @@ void VehicleConfigurationHelper::applyActuatorConfiguration()
|
||||
bankMode = ActuatorSettings::BANKMODE_PWM;
|
||||
break;
|
||||
case VehicleConfigurationSource::ESC_RAPID:
|
||||
if ((m_configSource->getControllerType() == VehicleConfigurationSource::CONTROLLER_CC ||
|
||||
m_configSource->getControllerType() == VehicleConfigurationSource::CONTROLLER_CC3D) &&
|
||||
m_configSource->getInputType() == VehicleConfigurationSource::INPUT_PWM) {
|
||||
bankMode = ActuatorSettings::BANKMODE_PWM;
|
||||
escFrequence = RAPID_ESC_FREQUENCY;
|
||||
} else {
|
||||
bankMode = ActuatorSettings::BANKMODE_PWMSYNC;
|
||||
escFrequence = PWMSYNC_ESC_FREQUENCY;
|
||||
}
|
||||
bankMode = ActuatorSettings::BANKMODE_PWM;
|
||||
escFrequence = RAPID_ESC_FREQUENCY;
|
||||
break;
|
||||
case VehicleConfigurationSource::ESC_SYNCHED:
|
||||
bankMode = ActuatorSettings::BANKMODE_PWMSYNC;
|
||||
escFrequence = PWMSYNC_ESC_FREQUENCY;
|
||||
break;
|
||||
case VehicleConfigurationSource::ESC_ONESHOT:
|
||||
bankMode = ActuatorSettings::BANKMODE_ONESHOT125;
|
||||
|
@ -64,7 +64,7 @@ public:
|
||||
MULTI_ROTOR_OCTO_X, MULTI_ROTOR_OCTO_V, MULTI_ROTOR_OCTO_COAX_X, MULTI_ROTOR_OCTO_COAX_PLUS,
|
||||
FIXED_WING_DUAL_AILERON, FIXED_WING_AILERON, FIXED_WING_ELEVON, FIXED_WING_VTAIL, HELI_CCPM,
|
||||
GROUNDVEHICLE_MOTORCYCLE, GROUNDVEHICLE_CAR, GROUNDVEHICLE_DIFFERENTIAL };
|
||||
enum ESC_TYPE { ESC_ONESHOT, ESC_RAPID, ESC_STANDARD, ESC_UNKNOWN };
|
||||
enum ESC_TYPE { ESC_ONESHOT, ESC_SYNCHED, ESC_RAPID, ESC_STANDARD, ESC_UNKNOWN };
|
||||
enum SERVO_TYPE { SERVO_ANALOG, SERVO_DIGITAL, SERVO_UNKNOWN };
|
||||
enum INPUT_TYPE { INPUT_PWM, INPUT_PPM, INPUT_SBUS, INPUT_DSM, INPUT_UNKNOWN };
|
||||
enum AIRSPEED_TYPE { AIRSPEED_ESTIMATE, AIRSPEED_EAGLETREE, AIRSPEED_MS4525, AIRSPEED_DISABLED };
|
||||
|
@ -49,7 +49,26 @@
|
||||
<field name="FlightModeAssistMap" units="" type="enum"
|
||||
options="None,GPSAssist"
|
||||
elements="6"
|
||||
defaultvalue="None,None,None,None,None,None"/>
|
||||
defaultvalue="None,None,None,None,None,None"
|
||||
limits="\
|
||||
%0401NE:GPSAssist,\
|
||||
%0402NE:GPSAssist;\
|
||||
\
|
||||
%0401NE:GPSAssist,\
|
||||
%0402NE:GPSAssist;\
|
||||
\
|
||||
%0401NE:GPSAssist,\
|
||||
%0402NE:GPSAssist;\
|
||||
\
|
||||
%0401NE:GPSAssist,\
|
||||
%0402NE:GPSAssist;\
|
||||
\
|
||||
%0401NE:GPSAssist,\
|
||||
%0402NE:GPSAssist;\
|
||||
\
|
||||
%0401NE:GPSAssist,\
|
||||
%0402NE:GPSAssist;"
|
||||
/>
|
||||
|
||||
<access gcs="readwrite" flight="readwrite"/>
|
||||
<telemetrygcs acked="true" updatemode="onchange" period="0"/>
|
||||
|
Loading…
x
Reference in New Issue
Block a user