Compare commits

...

61 Commits

Author SHA1 Message Date
Pedro-Roque bbd6d9794f fix: add whitelist on dds em 2026-03-12 22:50:46 -07:00
Pedro-Roque 695e2c7caa Merge branch 'feat/safe_dds' of github.com:PX4/PX4-Autopilot into feat/safe_dds 2026-03-12 15:25:42 -07:00
Pedro-Roque 627072b811 feat: added module name 2026-03-12 15:25:31 -07:00
Pedro Roque d651d9e8e2 Merge branch 'main' into feat/safe_dds 2026-03-12 15:08:41 -07:00
Pedro-Roque 574295998b Merge branch 'feat/safe_dds' of github.com:PX4/PX4-Autopilot into feat/safe_dds 2026-03-12 15:07:21 -07:00
Pedro-Roque 71807c93d8 fix: schema failure 2026-03-12 15:07:09 -07:00
PX4BuildBot 59ded6affd docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-03-12 20:51:32 +00:00
Ege Kural 4a33fb169f fix(ci): enable clang-tidy bugprone-macro-parentheses (#26722)
Signed-off-by: kuralme <kuralme@protonmail.com>
2026-03-12 12:42:07 -08:00
Ramon Roche 11700382f6 docs(contributing): add coding standards and test policy
Add explicit coding standards section referencing astyle and
clang-tidy enforcement. Add formal test policy requiring tests
where practical and types of tests table.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-03-12 13:15:45 -07:00
Ramon Roche 3f0ddf9793 docs(security): update policy for OpenSSF badge
Update supported versions to 1.16.x, add response process with
7-day acknowledgment timeline, reporter credit policy, and secure
development practices section.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-03-12 13:15:45 -07:00
Ramon Roche 400bb253bd docs(mavlink): security hardening guide for production deployments (#26730)
* docs(mavlink): add security hardening guide for production deployments

Add a dedicated security hardening page covering MAVLink authentication
risks, a hardening checklist (enable signing, secure physical access,
secure network links), and integrator responsibility for deployment
security. Add a warning block to the main MAVLink page linking to the
new guide.

---------

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-03-12 12:53:29 -07:00
PX4BuildBot d6e31f59cf docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-03-12 19:52:00 +00:00
Ramon Roche 3ed2f23d9c fix(build): resolve Dependabot security alerts (#26729)
Fix 4 Dependabot alerts:
- CVE-2021-34141: remove duplicate vulnerable numpy==1.21.5 pin
- markdown-it ReDoS (>= 13.0.0, < 14.1.1): add yarn resolution to 14.1.1
- preact JSON VNode injection: resolved by yarn upgrade to 10.29.0
- esbuild dev server request leak (<= 0.24.2): add yarn resolution to 0.25.0

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-03-12 12:40:35 -07:00
Balduin ab6c9b7909 docs(ekf2): clarify EKF2_HGT_REF param description (#26725)
* docs(ekf2): clarify EKF2_HGT_REF param description

To me it was not obvious that with EKF2_GPS_CTRL=0 this altitude
initialisation based on GPS again does not apply.

* docs(ekf2): separate paragraph
2026-03-12 11:30:22 -08:00
Pedro Roque b0d061b0b7 Merge branch 'main' into feat/safe_dds 2026-03-12 11:15:05 -07:00
Pedro-Roque 23613e7e4a rft(dds): reduce the number of conditional checks 2026-03-12 11:13:59 -07:00
PX4BuildBot eeb251aa52 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-03-12 17:47:04 +00:00
Matthias Grob 7b3fe3478b ESC check cleanup 2026-03-12 18:30:51 +01:00
ttechnick 7aa28de922 ESC check: use constants for ESC timeout 2026-03-12 18:30:51 +01:00
Matthias Grob a9461c4d1a escCheck: Change MOTFAIL_TIME unit to seconds for better UX 2026-03-12 18:30:51 +01:00
Matthias Grob fb9f8d1835 escCheck: remove thrust threshold above which current model applies
The newer upper lower bound offset current model should apply more accurately and not require a lower bount for thrust where there's no detection.
2026-03-12 18:30:51 +01:00
Matthias Grob 6361b4cd7e Unify motor function mapping checks to only depend on the interface 2026-03-12 18:30:51 +01:00
Matthias Grob 8bb82c70ee escCheck: structure suggestions 2026-03-12 18:30:51 +01:00
Matthias Grob 0071699348 HealthChecks: correct indentation for EVENT metadata 2026-03-12 18:30:51 +01:00
Matthias Grob 54df6d64a6 Commander: move FD_ACT_EN to esc check 2026-03-12 18:30:51 +01:00
Matthias Grob 7207c34c5b Commander: avoid leaking health checks into failure detector 2026-03-12 18:30:51 +01:00
Matthias Grob 270ad06e5f Remove traces of FD_ESCS_EN 2026-03-12 18:30:51 +01:00
Matthias Grob 8bafcfbac7 Rename parameters file for ESC checks 2026-03-12 18:30:51 +01:00
Matthias Grob 2ff83e7e7c escCheck: rename MOTFAIL_TOUT -> MOTFAIL_TIME and further cleanup 2026-03-12 18:30:51 +01:00
Matthias Grob 035ccc8395 FailureDetector: disarm again with ESC failures during spoolup 2026-03-12 18:30:51 +01:00
Matthias Grob 7d84911668 FailureDetector: remove obsolete subscriptions 2026-03-12 18:30:51 +01:00
ttechnick 4e279b16c2 uavcan: optimization and edge cases 2026-03-12 18:30:51 +01:00
ttechnick c5652b2084 escChecks: param reorg
Reorganise parameters
fix esc & motor indices
set failsafe flags
2026-03-12 18:30:51 +01:00
ttechnick 03fc051c29 uavcan:fix check 2026-03-12 18:30:51 +01:00
ttechnick 96c5c7ba02 work on: feed back checks to commander 2026-03-12 18:30:51 +01:00
ttechnick e9874b6f05 ensure motor faults are cleared 2026-03-12 18:30:51 +01:00
ttechnick 15f5a18629 uavcan: cleanup 2026-03-12 18:30:51 +01:00
ttechnick b2ea7ffab6 fd: reorganise motor & esc failures 2026-03-12 18:30:51 +01:00
ttechnick 9f978b05f3 uavcan: unify timeout handling 2026-03-12 18:30:51 +01:00
Pedro-Roque 71ac74827a feat: add whitelisting 2026-03-12 10:00:05 -07:00
PX4BuildBot aa998d88b8 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-03-12 03:57:59 +00:00
Hamish Willee 7e776a7b9c fix(docs): src_parser.py keep empty lines in param desciption (#26656) 2026-03-11 20:29:53 -07:00
Hamish Willee 57cf570bb4 fix(docs): Fix internal docs links (#26718) 2026-03-12 14:29:35 +11:00
Jacob Dahl 55b62e5f2b fix(mavlink): use >= for depth check to match MAX_DEPTH semantics 2026-03-11 19:50:36 -07:00
Jacob Dahl 8d99569643 fix(mavlink): bound recursion depth in delete_all_logs
Prevent potential stack overflow from symlink loops or deeply nested
directories by capping recursion to 3 levels. Also fixes dot-entry
skipping to use strcmp instead of prefix check, and deduplicates the
filepath construction.
2026-03-11 19:50:36 -07:00
Eric Katzfey 7c1dee0b41 feat(voxl2): add qcs6490 DSP signature support 2026-03-11 19:32:17 -07:00
Eric Katzfey 70e98f17ff fix(voxl2): remove obsolete build-deps.sh script 2026-03-11 19:32:17 -07:00
Eric Katzfey e3e26b4bfd feat(voxl2): Check the SDLOG_MODE parameter before starting the logger module to provide the proper options 2026-03-11 19:28:14 -07:00
Pedro-Roque 41e1ee6023 feat: ensure safe DDS interface by default 2026-03-11 15:58:47 -07:00
PX4BuildBot 51b56a7390 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-03-11 19:01:55 +00:00
ttechnick 05d94b9820 feat(px4io): enable pwm center 2026-03-11 19:50:52 +01:00
PX4BuildBot a38cf4d9e6 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-03-11 15:27:17 +00:00
Ege Kural d72d99f2d8 fix(ci): clang-tidy bugprone-too-small-loop-variable(#26709) 2026-03-11 08:18:53 -07:00
vertiq-jack a2808a991c fix(vertiq): Parameter Setting Reliability Update (#26521)
Updates to the backend to allow faster and more reliable parameter configuration.

---------

Co-authored-by: Jordan <jordan.leiber@vertiq.co>
2026-03-11 08:08:05 -07:00
PX4BuildBot 20ded97d8a docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-03-11 09:20:13 +00:00
Balduin e5071beaa3 fix(ekf2): fuse airspeed in both transition if above EKF2_ARSP_THR 2026-03-11 10:08:32 +01:00
PX4BuildBot 2c337b77ab docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-03-11 06:07:59 +00:00
PX4 Build Bot a36334de50 docs(i18n): PX4 guide translations (Crowdin) - ko (#26688)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2026-03-11 17:00:24 +11:00
PX4 Build Bot 02d9c32645 docs(i18n): PX4 guide translations (Crowdin) - uk (#26689)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2026-03-11 16:59:47 +11:00
PX4 Build Bot 10e3c15c54 docs(i18n): PX4 guide translations (Crowdin) - zh-CN (#26690)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2026-03-11 16:58:59 +11:00
Hamish Willee 359b43e575 build(actions): Crowdin download to a conventional commit (#26705) 2026-03-11 16:46:56 +11:00
147 changed files with 3892 additions and 2468 deletions
-2
View File
@@ -150,10 +150,8 @@ Checks: '*,
-readability-convert-member-functions-to-static,
-readability-make-member-function-const,
-bugprone-implicit-widening-of-multiplication-result,
-bugprone-macro-parentheses,
-bugprone-multi-level-implicit-pointer-conversion,
-bugprone-signed-char-misuse,
-bugprone-too-small-loop-variable,
-cppcoreguidelines-avoid-non-const-global-variables,
-cppcoreguidelines-use-default-member-init,
-hicpp-multiway-paths-covered,
+3 -3
View File
@@ -34,13 +34,13 @@ jobs:
upload_sources: false
upload_translations: false
download_translations: true
commit_message: New Crowdin translations - ${{ matrix.lc }}
commit_message: 'docs(i18n): PX4 guide translations (Crowdin) - ${{ matrix.lc }}'
localization_branch_name: l10n_crowdin_docs_translations_${{ matrix.lc }}
crowdin_branch_name: main
create_pull_request: true
pull_request_base_branch_name: 'main'
pull_request_title: New PX4 guide translations (Crowdin) - ${{ matrix.lc }}
pull_request_body: 'New PX4 guide Crowdin translations by [Crowdin GH Action](https://github.com/crowdin/github-action) for ${{ matrix.lc }}'
pull_request_title: 'docs(i18n): PX4 guide translations (Crowdin) - ${{ matrix.lc }}'
pull_request_body: 'docs(i18n): PX4 guide Crowdin translations by [Crowdin GH Action](https://github.com/crowdin/github-action) for ${{ matrix.lc }}'
pull_request_labels: 'Documentation 📑'
pull_request_reviewers: hamishwillee
download_language: ${{ matrix.lc }}
+21 -1
View File
@@ -16,7 +16,13 @@ git checkout -b mydescriptivebranchname
## Edit and build the code
The [developer guide](https://docs.px4.io/main/en/development/development.html) explains how to set up the development environment on Mac OS, Linux or Windows. Please take note of our [coding style](https://docs.px4.io/main/en/contribute/code.html) when editing files.
The [developer guide](https://docs.px4.io/main/en/development/development.html) explains how to set up the development environment on Mac OS, Linux or Windows.
### Coding standards
All C/C++ code must follow the [PX4 coding style](https://docs.px4.io/main/en/contribute/code.html). Formatting is enforced by [astyle](http://astyle.sourceforge.net/) in CI (`make check_format`). Code quality checks run via [clang-tidy](https://clang.llvm.org/extra/clang-tidy/). Pull requests that fail either check will not be merged.
Python code is checked with [mypy](https://mypy-lang.org/) and [flake8](https://flake8.pycqa.org/).
## Commit message convention
@@ -141,6 +147,20 @@ git push --force-with-lease
## Test your changes
PX4 is safety-critical software. All contributions must include adequate testing where practical:
- **New features** must include unit tests and/or integration tests that exercise the new functionality, where practical. Hardware-dependent changes that cannot be tested in SITL should include bench test or flight test evidence.
- **Bug fixes** must include a regression test where practical. When automated testing is not feasible (hardware-specific issues, race conditions, etc.), provide a link to a flight log demonstrating the fix and the reproduction steps for the original bug.
- **Reviewers** will verify that tests or test evidence exist before approving a pull request.
### Types of tests
| Test type | When to use | How to run |
|-----------|-------------|------------|
| **Unit tests** (gtest) | Module-level logic, math, parsing | `make tests` |
| **SITL integration tests** (MAVSDK) | Flight behavior, failsafes, missions | `test/mavsdk_tests/` |
| **Bench tests / flight logs** | Hardware-dependent changes | Upload logs to [Flight Review](https://logs.px4.io) |
Since we care about safety, we will regularly ask you for test results. Best is to do a test flight (or bench test where it applies) and upload the log file from it (on the microSD card in the logs directory) to Google Drive or Dropbox and share the link.
## Push your changes
@@ -44,8 +44,6 @@ param set-default FW_T_SINK_MIN 3
param set-default FW_W_EN 1
param set-default FD_ESCS_EN 0
param set-default MIS_TAKEOFF_ALT 30
param set-default NAV_ACC_RAD 15
@@ -104,4 +104,3 @@ param set-default VT_FWD_THRUST_EN 4
param set-default VT_PITCH_MIN -5
param set-default VT_F_TRANS_THR 1
param set-default VT_TYPE 2
param set-default FD_ESCS_EN 0
@@ -26,7 +26,6 @@ param set-default SENS_EN_GPSSIM 1
param set-default SENS_EN_BAROSIM 1
param set-default SENS_EN_MAGSIM 1
param set-default COM_ARM_CHK_ESCS 0 # We don't have ESCs
param set-default FD_ESCS_EN 0 # We don't have ESCs - but maybe we need this later?
# Set proper failsafes
param set-default COM_ACT_FAIL_ACT 0
@@ -28,7 +28,6 @@ param set-default SIM_GZ_EN 1
param set-default SENS_EN_MAGSIM 1
param set-default COM_ARM_CHK_ESCS 0 # We don't have ESCs
param set-default FD_ESCS_EN 0
param set-default CA_AIRFRAME 14
param set-default MAV_TYPE 45
@@ -28,7 +28,6 @@ param set-default SIM_GZ_EN 1
param set-default SENS_EN_MAGSIM 1
param set-default COM_ARM_CHK_ESCS 0 # We don't have ESCs
param set-default FD_ESCS_EN 0
param set-default CA_AIRFRAME 14
param set-default MAV_TYPE 45
+28 -12
View File
@@ -2,24 +2,40 @@
## Supported Versions
The following is a list of versions the development team is currently supporting.
The following versions receive security updates:
| Version | Supported |
| ------- | ------------------ |
| 1.4.x | :white_check_mark: |
| 1.3.3 | :white_check_mark: |
| < 1.3 | :x: |
| 1.16.x | :white_check_mark: |
| < 1.16 | :x: |
## Reporting a Vulnerability
We currently only receive security vulnerability reports through GitHub.
We receive security vulnerability reports through GitHub Security Advisories.
To begin a report, please go to the top-level repository, for example, PX4/PX4-Autopilot,
and click on the Security tab. If you are on mobile, click the ... dropdown menu, and then click Security.
To begin a report, go to the [PX4/PX4-Autopilot](https://github.com/PX4/PX4-Autopilot) repository
and click on the **Security** tab. If you are on mobile, click the **...** dropdown menu, then click **Security**.
Click Report a Vulnerability to open the advisory form. Fill in the advisory details form.
Make sure your title is descriptive, and the development team can find all of the relevant details needed
to verify on the description box. We recommend you add as much data as possible. We welcome logs,
screenshots, photos, and videos, anything that can help us verify and identify the issues being reported.
Click **Report a Vulnerability** to open the advisory form. Fill in the advisory details form.
Make sure your title is descriptive and the description contains all relevant details needed
to verify the issue. We welcome logs, screenshots, photos, and videos.
At the bottom of the form, click Submit report. The maintainer team will be notified and will get back to you ASAP.
At the bottom of the form, click **Submit report**.
## Response Process
1. **Acknowledgment**: The maintainer team will acknowledge your report within **7 days**.
2. **Triage**: We will assess severity and impact and communicate next steps.
3. **Disclosure**: We coordinate disclosure with the reporter. We follow responsible disclosure practices and will credit reporters in the advisory unless they request anonymity.
If you do not receive acknowledgment within 7 days, please follow up by emailing the [release managers](MAINTAINERS.md).
## Secure Development Practices
The PX4 development team applies the following practices to reduce security risk:
- **Code review**: All changes require peer review before merging.
- **Static analysis**: [clang-tidy](https://clang.llvm.org/extra/clang-tidy/) runs on every pull request with warnings treated as errors.
- **Fuzzing**: A daily fuzzing pipeline using [Google fuzztest](https://github.com/google/fuzztest) tests MAVLink message handling and GNSS driver protocol parsing.
- **Input validation**: All external inputs (MAVLink messages, RC signals, sensor data) are validated against expected ranges before use.
- **Compiler hardening**: Builds use `-Wall -Werror`, stack protectors, and other hardening flags where supported by the target platform.
@@ -1,9 +0,0 @@
#!/bin/bash
cd boards/modalai/voxl2/libfc-sensor-api
rm -fR build
mkdir build
cd build
CC=/home/4.1.0.4/tools/linaro64/bin/aarch64-linux-gnu-gcc cmake ..
make
cd ../../../../..
+6 -4
View File
@@ -29,10 +29,12 @@ if /bin/ls /usr/lib/rfsa/adsp/testsig-*.so &> /dev/null; then
/bin/echo "Found DSP signature file"
else
/bin/echo "[WARNING] Could not find DSP signature file"
# Look for the DSP signature generation script
if [ -f /share/modalai/qrb5165-slpi-test-sig/generate-test-sig.sh ]; then
/bin/echo "[INFO] Attempting to generate the DSP signature file"
# Automatically generate the test signature so that px4 can run on SLPI DSP
# Look for the DSP signature generation script (platform-specific)
if [ -f /share/modalai/qcs6490-slpi-test-sig/generate-test-sig.sh ]; then
/bin/echo "[INFO] Attempting to generate the DSP signature file (qcs6490)"
/share/modalai/qcs6490-slpi-test-sig/generate-test-sig.sh
elif [ -f /share/modalai/qrb5165-slpi-test-sig/generate-test-sig.sh ]; then
/bin/echo "[INFO] Attempting to generate the DSP signature file (qrb5165)"
/share/modalai/qrb5165-slpi-test-sig/generate-test-sig.sh
else
/bin/echo "[ERROR] Could not find the DSP signature file generation script"
+6 -4
View File
@@ -6,10 +6,12 @@ if /bin/ls /usr/lib/rfsa/adsp/testsig-*.so &> /dev/null; then
/bin/echo "Found DSP signature file"
else
/bin/echo "[WARNING] Could not find DSP signature file"
# Look for the DSP signature generation script
if [ -f /share/modalai/qrb5165-slpi-test-sig/generate-test-sig.sh ]; then
/bin/echo "[INFO] Attempting to generate the DSP signature file"
# Automatically generate the test signature so that px4 can run on SLPI DSP
# Look for the DSP signature generation script (platform-specific)
if [ -f /share/modalai/qcs6490-slpi-test-sig/generate-test-sig.sh ]; then
/bin/echo "[INFO] Attempting to generate the DSP signature file (qcs6490)"
/share/modalai/qcs6490-slpi-test-sig/generate-test-sig.sh
elif [ -f /share/modalai/qrb5165-slpi-test-sig/generate-test-sig.sh ]; then
/bin/echo "[INFO] Attempting to generate the DSP signature file (qrb5165)"
/share/modalai/qrb5165-slpi-test-sig/generate-test-sig.sh
else
/bin/echo "[ERROR] Could not find the DSP signature file generation script"
+25 -1
View File
@@ -302,4 +302,28 @@ done
# marked as optional will only be logged if they have been advertised when
# this is started. By starting it last it makes sure to see those
# advertisements as the other modules are starting before it.
logger start
#
# Set logger mode based on SDLOG_MODE parameter:
# 0: log when armed until disarm (default)
# 1: log from boot until disarm
# 2: log from boot until shutdown
# 3: log based on AUX1 RC channel
# 4: log from first armed until shutdown
LOGGER_ARGS=""
if param compare SDLOG_MODE 1
then
LOGGER_ARGS="-e"
fi
if param compare SDLOG_MODE 2
then
LOGGER_ARGS="-f"
fi
if param compare SDLOG_MODE 3
then
LOGGER_ARGS="-x"
fi
if param compare SDLOG_MODE 4
then
LOGGER_ARGS="-a"
fi
logger start $LOGGER_ARGS
@@ -2,7 +2,7 @@
#
# Stack: PX4 Pro
# Vehicle: Amovlab F410
# Version: 1.15.4
# Version: 1.15.4
# Git Revision: 99c40407ff000000
#
# Vehicle-Id Component-Id Name Value Type
@@ -479,11 +479,6 @@
1 1 EKF2_WIND_NSD 0.050000000745058060 9
1 1 EV_TSK_RC_LOSS 0 6
1 1 EV_TSK_STAT_DIS 0 6
1 1 FD_ACT_EN 1 6
1 1 FD_ACT_MOT_C2T 2.000000000000000000 9
1 1 FD_ACT_MOT_THR 0.200000002980232239 9
1 1 FD_ACT_MOT_TOUT 100 6
1 1 FD_ESCS_EN 1 6
1 1 FD_EXT_ATS_EN 0 6
1 1 FD_EXT_ATS_TRIG 1900 6
1 1 FD_FAIL_P 60 6
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

+1
View File
@@ -759,6 +759,7 @@
- [Receiving Messages](mavlink/receiving_messages.md)
- [Custom MAVLink Messages](mavlink/custom_messages.md)
- [Message Signing](mavlink/message_signing.md)
- [Security Hardening](mavlink/security_hardening.md)
- [Protocols/Microservices](mavlink/protocols.md)
- [Standard Modes Protocol](mavlink/standard_modes.md)
- [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/uxrce_dds.md)
File diff suppressed because it is too large Load Diff
-1
View File
@@ -413,7 +413,6 @@ They recommend sensors, power systems, and other components from the same manufa
- [Holybro Pixhawk 6X Wiring Quickstart](../assembly/quick_start_pixhawk6x.md)
- [Holybro Pixhawk 5X Wiring Quickstart](../assembly/quick_start_pixhawk5x.md)
- [Holybro Pixhawk 4 Wiring Quickstart](../assembly/quick_start_pixhawk4.md)
- [Holybro Pixhawk 4 Mini (Discontinued) Wiring Quickstart](../assembly/quick_start_pixhawk4_mini.md)
- [Holybro Durandal Wiring Quickstart](../assembly/quick_start_durandal.md)
- [Holybro Pix32 v5 Wiring Quickstart](../assembly/quick_start_holybro_pix32_v5.md)
- [Cube Wiring Quickstart](../assembly/quick_start_cube.md) (All cube variants)
@@ -1,161 +0,0 @@
# _Pixhawk 4 Mini_ Wiring Quick Start
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://holybro.com/) for hardware support or compliance issues.
:::
This quick start guide shows how to power the [_Pixhawk<sup>&reg;</sup> 4 Mini_](../flight_controller/pixhawk4_mini.md) flight controller and connect its most important peripherals.
![Pixhawk4 mini](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_iso_1.png)
## Wiring Chart Overview
The image below shows where to connect the most important sensors and peripherals (except for motors and servos).
![*Pixhawk 4 Mini* Wiring Overview](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_wiring_overview.png)
:::tip
More information about available ports can be found here: [_Pixhawk 4 Mini_ > Interfaces](../flight_controller/pixhawk4_mini.md#interfaces).
:::
## Mount and Orient Controller
_Pixhawk 4 Mini_ should be mounted on your frame using vibration-damping foam pads (included in the kit).
It should be positioned as close to your vehicles center of gravity as possible, oriented top-side up with the arrow pointing towards the front of the vehicle.
![*Pixhawk 4 Mini* Orientation](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_orientation.png)
::: info
If the controller cannot be mounted in the recommended/default orientation (e.g. due to space constraints) you will need to configure the autopilot software with the orientation that you actually used: [Flight Controller Orientation](../config/flight_controller_orientation.md).
:::
## GPS + Compass + Buzzer + Safety Switch + LED
Attach the provided GPS with integrated compass, safety switch, buzzer, and LED to the **GPS MODULE** port. The GPS/Compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible, with the direction marker towards the front of the vehicle (separating the compass from other electronics will reduce interference).
![Connect compass/GPS to Pixhawk 4](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_gps.png)
::: info
The GPS module's integrated safety switch is enabled _by default_ (when enabled, PX4 will not let you arm the vehicle).
To disable the safety press and hold the safety switch for 1 second.
You can press the safety switch again to enable safety and disarm the vehicle (this can be useful if, for whatever reason, you are unable to disarm the vehicle from your remote control or ground station).
:::
## Power
The Power Management Board (PMB) serves the purpose of a power module as well as a power distribution board.
In addition to providing regulated power to _Pixhawk 4 Mini_ and the ESCs, it sends information to the autopilot about the batterys voltage and current draw.
Connect the output of the PMB that comes with the kit to the **POWER** port of the _Pixhawk 4 Mini_ using a 6-wire cable.
The connections of the PMB, including power supply and signal connections to the ESCs and servos, are explained in the image below.
![Pixhawk 4 - Power Management Board](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_power_management.png)
::: info
The image above only shows the connection of a single ESC and a single servo.
Connect the remaining ESCs and servos similarly.
:::
| Pin(s) or Connector | Function |
| ------------------- | -------------------------------------------------------------------------- |
| B+ | Connect to ESC B+ to power the ESC |
| GND | Connect to ESC Ground |
| PWR | JST-GH 6-pin Connector, 5V 3A output<br> connect to _Pixhawk 4 Mini_ POWER |
| BAT | Power Input, connect to 2~12s LiPo Battery |
The pinout of the _Pixhawk 4 Mini_ **POWER** port is shown below.
The `CURRENT` signal should carry an analog voltage from 0-3.3V for 0-120A as default.
The `VOLTAGE` signal should carry an analog voltage from 0-3.3V for 0-60V as default.
The VCC lines have to offer at least 3A continuous and should default to 5.1V. A lower voltage of 5V is still acceptable, but discouraged.
| Pin | Signal | Volt |
| -------- | ------- | ----- |
| 1(red) | VCC | +5V |
| 2(black) | VCC | +5V |
| 3(black) | CURRENT | +3.3V |
| 4(black) | VOLTAGE | +3.3V |
| 5(black) | GND | GND |
| 6(black) | GND | GND |
::: info
If using a plane or rover, the 8 pin power (+) rail of **MAIN OUT** will need to be separately powered in order to drive servos for rudders, elevons, etc.
To do this, the power rail needs to be connected to a BEC equipped ESC, a standalone 5V BEC, or a 2S LiPo battery.
Be careful with the voltage of servo you are going to use here.
:::
<!--In the future, when Pixhawk 4 kit is available, add wiring images/videos for different airframes.-->
::: info
Using the Power Module that comes with the kit you will need to configure the _Number of Cells_ in the [Power Settings](https://docs.qgroundcontrol.com/master/en/qgc-user-guide/setup_view/power.html) but you won't need to calibrate the _voltage divider_.
You will have to update the _voltage divider_ if you are using any other power module (e.g. the one from the Pixracer).
:::
## Radio Control
A remote control (RC) radio system is required if you want to _manually_ control your vehicle (PX4 does not require a radio system for autonomous flight modes).
You will need to [select a compatible transmitter/receiver](../getting_started/rc_transmitter_receiver.md) and then _bind_ them so that they communicate (read the instructions that come with your specific transmitter/receiver).
The instructions below show how to connect the different types of receivers to _Pixhawk 4 Mini_:
- Spektrum/DSM or S.BUS receivers connect to the **DSM/SBUS RC** input.
![Pixhawk 4 Mini - Radio port for Spektrum receivers](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_rc_dsmsbus.png)
- PPM receivers connect to the **PPM RC** input port.
![Pixhawk 4 Mini - Radio port for PPM receivers](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_rc_ppm.png)
- PPM and PWM receivers that have an _individual wire for each channel_ must connect to the **PPM RC** port _via a PPM encoder_ [like this one](https://www.getfpv.com/radios/radio-accessories/holybro-ppm-encoder-module.html) (PPM-Sum receivers use a single signal wire for all channels).
For more information about selecting a radio system, receiver compatibility, and binding your transmitter/receiver pair, see: [Remote Control Transmitters & Receivers](../getting_started/rc_transmitter_receiver.md).
## Telemetry Radio (Optional)
Telemetry radios may be used to communicate and control a vehicle in flight from a ground station (for example, you can direct the UAV to a particular position, or upload a new mission).
The vehicle-based radio should be connected to the **TELEM1** port as shown below (if connected to this port, no further configuration is required).
The other radio is connected to your ground station computer or mobile device (usually by USB).
![Pixhawk 4 Mini Telemetry](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_telemetry.png)
## microSD Card (Optional)
SD cards are highly recommended as they are needed to [log and analyse flight details](../getting_started/flight_reporting.md), to run missions, and to use UAVCAN-bus hardware.
Insert the card (included in the kit) into _Pixhawk 4 Mini_ as shown below.
![Pixhawk 4 Mini SD Card](../../assets/flight_controller/pixhawk4mini/pixhawk4mini_sdcard.png)
:::tip
For more information see [Basic Concepts > SD Cards (Removable Memory)](../getting_started/px4_basic_concepts.md#sd-cards-removable-memory).
:::
## Motors
Motors/servos are connected to the **MAIN OUT** ports in the order specified for your vehicle in the [Airframe Reference](../airframes/airframe_reference.md). See [_Pixhawk 4 Mini_ > Supported Platforms](../flight_controller/pixhawk4_mini.md#supported-platforms) for more information.
::: info
This reference lists the output port to motor/servo mapping for all supported air and ground frames (if your frame is not listed in the reference then use a "generic" airframe of the correct type).
:::
:::warning
The mapping is not consistent across frames (e.g. you can't rely on the throttle being on the same output for all plane frames).
Make sure to use the correct mapping for your vehicle.
:::
## Other Peripherals
The wiring and configuration of optional/less common components is covered within the topics for individual [peripherals](../peripherals/index.md).
## Configuration
General configuration information is covered in: [Autopilot Configuration](../config/index.md).
QuadPlane specific configuration is covered here: [QuadPlane VTOL Configuration](../config_vtol/vtol_quad_configuration.md)
<!-- Nice to have detailed wiring infographic and instructions for different vehicle types. -->
## Further information
- [_Pixhawk 4 Mini_](../flight_controller/pixhawk4_mini.md)
@@ -28,7 +28,7 @@ In addition you will need:
The _Kopis 2_ comes preinstalled with Betaflight.
Before loading PX4 firmware you must first install the PX4 bootloader.
Instructions for installing the bootloader can be found in the [Kakute F7](../flight_controller/kakutef7.md#bootloader) topic (this is the flight controller board on the _Kopis 2_).
Download the [kakutef7_bl.hex](https://raw.githubusercontent.com/PX4/PX4-Autopilot/release/1.17/docs/assets/flight_controller/kakutef7/kakutef7_bl_0b3fbe2da0.hex?download=true) bootloader binary and read [PX4 Bootloader Flashing onto Betaflight Systems](../advanced_config/bootloader_update_from_betaflight.md) for flashing instructions.
:::tip
You can always [reinstall Betaflight](../advanced_config/bootloader_update_from_betaflight.md#reinstall-betaflight) later if you want!
+3 -9
View File
@@ -23,16 +23,10 @@ The sections below outline/link to the wiring and system console information for
### Board-Specific Wiring
The System Console UART pinouts/debug ports are typically documented in [autopilot overview pages](../flight_controller/index.md) (some are linked below):
The System Console UART pinouts/debug ports are typically documented in the affected [autopilot overview pages](../flight_controller/index.md).
For example, see [mRo Pixhawk](../flight_controller/mro_pixhawk.md#console-port) and [Pixracer](../flight_controller/pixracer.md#debug-port).
- [3DR Pixhawk v1 Flight Controller](../flight_controller/pixhawk.md#console-port) (also applies to
[mRo Pixhawk](../flight_controller/mro_pixhawk.md#debug-ports), [Holybro pix32](../flight_controller/holybro_pix32.md#debug-port))
- [Pixhawk 3](../flight_controller/pixhawk3_pro.md#debug-port)
- [Pixracer](../flight_controller/pixracer.md#debug-port)
<a id="pixhawk_debug_port"></a>
### Pixhawk Debug Port
### Pixhawk Debug Port {#pixhawk_debug_port}
Pixhawk flight controllers usually come with a [Pixhawk Connector Standard Debug Port](../debug/swd_debug.md#pixhawk-connector-standard-debug-ports) which will be either the 10 pin [Pixhawk Debug Full](../debug/swd_debug.md#pixhawk-debug-full) or 6 pin [Pixhawk Debug Mini](../debug/swd_debug.md#pixhawk-debug-mini) port.
@@ -14,10 +14,11 @@ They are listed because you may be using them in an existing drone, and because
- _CUAV Pixhack v3_ (FMUv3) — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/pixhack_v3) <!-- 202603 removed doc -->
- _Aerotenna OcPoC-Zynq Mini_ — last published in [PX4v1.11](https://docs.px4.io/v1.11/en/flight_controller/ocpoc_zynq#aerotenna-ocpoc-zynq-mini-flight-controller) <!-- 202603 removed doc -->
- _Holybro Pixhawk 4 Mini_ (FMUv5) -— last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/pixhawk4_mini) <!-- 202603 removed doc -->
- _Holybro Kakute F7_ — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/kakutef7) <!-- 202603 removed doc -->
- _Holybro Pixhawk Mini_ (FMUv3) — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/pixhawk_mini) <!-- 202603 removed doc -->
- _Holybro Kakute F7_ — Marked as discontinued in PX4 v1.15.
Last published in [PX4 v1.17](https://docs.px4.io/v1.17/en/flight_controller/kakutef7). <!-- 202603 removed doc -->
- _Holybro Pixhawk Mini_ (FMUv3) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/pixhawk_mini) <!-- 202603 removed doc -->
- _Holybro Pixfalcon_ (Pixhawk FMUv2) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/pixfalcon) <!-- Discontinued around v1.15/2024. -->
- _Holybro Pix32_ (FMUv2) — last published in [PX4 v1.15](https://docs.px4.io/v1.15/en/flight_controller/holybro_pix32) <!-- 202603 removed doc -->
- _Holybro Pix32_ (FMUv2) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/holybro_pix32) <!-- 202603 removed doc -->
- _ModalAI VOXL Flight_ — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/modalai_voxl_flight) <!-- 202603 removed doc -->
- _ModalAI Flight Core v1_ — last published in [PX4 v1.11](https://docs.px4.io/v1.11/en/flight_controller/modalai_fc_v1) <!-- 202603 removed doc -->
- _mRobotics-X2.1_ (FMUv2) — last published in [PX4 v1.16](https://docs.px4.io/v1.16/en/flight_controller/mro_x2.1) <!-- 202507 removed doc -->
+163 -2
View File
@@ -75,11 +75,172 @@ make px4_fmu-v3_default
## Debug Ports
See [3DR Pixhawk 1 > Debug Ports](../flight_controller/pixhawk.md#debug-ports)
### Console Port
The [PX4 System Console](../debug/system_console.md) runs on the port labeled [SERIAL4/5](#serial-4-5-port).
::: tip
A convenient way to connect to the console is to use a [Zubax BugFace BF1](https://github.com/Zubax/bugface_bf1), as it comes with connectors that can be used with several different Pixhawk devices.
Simply connect the 6-pos DF13 1:1 cable on the [Zubax BugFace BF1](https://github.com/Zubax/bugface_bf1) to the Pixhawk `SERIAL4/5` port.
![Zubax BugFace BF1](../../assets/flight_controller/mro/dronecode_probe.jpg)
:::
The pinout is standard serial pinout, designed to connect to a [3.3V FTDI](https://www.digikey.com/en/products/detail/TTL-232R-3V3/768-1015-ND/1836393) cable (5V tolerant).
| 3DR Pixhawk 1 | | FTDI | |
| ------------- | --------- | ---- | ---------------- |
| 1 | +5V (red) | | N/C |
| 2 | S4 Tx | | N/C |
| 3 | S4 Rx | | N/C |
| 4 | S5 Tx | 5 | FTDI RX (yellow) |
| 5 | S5 Rx | 4 | FTDI TX (orange) |
| 6 | GND | 1 | FTDI GND (black) |
The wiring for an FTDI cable to a 6-pos DF13 1:1 connector is shown in the figure below.
![Console Connector](../../assets/flight_controller/mro/console_connector.jpg)
The complete wiring is shown below.
![Console Debug](../../assets/flight_controller/mro/console_debug.jpg)
::: info
For information on how to _use_ the console see: [System Console](../debug/system_console.md).
:::
### SWD Port
The [SWD](../debug/swd_debug.md) (JTAG) ports are hidden under the cover (which must be removed for hardware debugging).
There are separate ports for FMU and IO, as highlighted below.
![Pixhawk SWD](../../assets/flight_controller/mro/pixhawk_swd.jpg)
The ports are ARM 10-pin JTAG connectors, which you will probably have to solder.
The pinout for the ports is shown below (the square markers in the corners above indicates pin 1).
![ARM 10-Pin connector pinout](../../assets/flight_controller/mro/arm_10pin_jtag_connector_pinout.jpg)
::: info
All Pixhawk FMUv2 boards have a similar SWD port.
:::
## Pinouts
See [3DR Pixhawk 1 > Pinouts](../flight_controller/pixhawk.md#pinouts)
#### TELEM1, TELEM2 ports
| Pin | Signal | Volt |
| ------- | --------- | ----- |
| 1 (red) | VCC | +5V |
| 2 (blk) | TX (OUT) | +3.3V |
| 3 (blk) | RX (IN) | +3.3V |
| 4 (blk) | CTS (IN) | +3.3V |
| 5 (blk) | RTS (OUT) | +3.3V |
| 6 (blk) | GND | GND |
#### GPS port
| Pin | Signal | Volt |
| ------- | -------- | ----- |
| 1 (red) | VCC | +5V |
| 2 (blk) | TX (OUT) | +3.3V |
| 3 (blk) | RX (IN) | +3.3V |
| 4 (blk) | CAN2 TX | +3.3V |
| 5 (blk) | CAN2 RX | +3.3V |
| 6 (blk) | GND | GND |
#### SERIAL 4/5 port
Due to space constraints two ports are on one connector.
| Pin | Signal | Volt |
| ------- | ------- | ----- |
| 1 (red) | VCC | +5V |
| 2 (blk) | TX (#4) | +3.3V |
| 3 (blk) | RX (#4) | +3.3V |
| 4 (blk) | TX (#5) | +3.3V |
| 5 (blk) | RX (#5) | +3.3V |
| 6 (blk) | GND | GND |
#### ADC 6.6V
| Pin | Signal | Volt |
| ------- | ------ | ----------- |
| 1 (red) | VCC | +5V |
| 2 (blk) | ADC IN | up to +6.6V |
| 3 (blk) | GND | GND |
#### ADC 3.3V
| Pin | Signal | Volt |
| ------- | ------ | ----------- |
| 1 (red) | VCC | +5V |
| 2 (blk) | ADC IN | up to +3.3V |
| 3 (blk) | GND | GND |
| 4 (blk) | ADC IN | up to +3.3V |
| 5 (blk) | GND | GND |
#### I2C
| Pin | Signal | Volt |
| ------- | ------ | -------------- |
| 1 (red) | VCC | +5V |
| 2 (blk) | SCL | +3.3 (pullups) |
| 3 (blk) | SDA | +3.3 (pullups) |
| 4 (blk) | GND | GND |
#### CAN
| Pin | Signal | Volt |
| ------- | ------ | ---- |
| 1 (red) | VCC | +5V |
| 2 (blk) | CAN_H | +12V |
| 3 (blk) | CAN_L | +12V |
| 4 (blk) | GND | GND |
#### SPI
| Pin | Signal | Volt |
| ------- | ------------ | ---- |
| 1 (red) | VCC | +5V |
| 2 (blk) | SPI_EXT_SCK | +3.3 |
| 3 (blk) | SPI_EXT_MISO | +3.3 |
| 4 (blk) | SPI_EXT_MOSI | +3.3 |
| 5 (blk) | !SPI_EXT_NSS | +3.3 |
| 6 (blk) | !GPIO_EXT | +3.3 |
| 7 (blk) | GND | GND |
#### POWER
| Pin | Signal | Volt |
| ------- | ------- | ----- |
| 1 (red) | VCC | +5V |
| 2 (blk) | VCC | +5V |
| 3 (blk) | CURRENT | +3.3V |
| 4 (blk) | VOLTAGE | +3.3V |
| 5 (blk) | GND | GND |
| 6 (blk) | GND | GND |
#### SWITCH
| Pin | Signal | Volt |
| ------- | -------------- | ----- |
| 1 (red) | VCC | +3.3V |
| 2 (blk) | !IO_LED_SAFETY | GND |
| 3 (blk) | SAFETY | GND |
## Serial Port Mapping
| UART | Device | Port |
| ------ | ---------- | --------------------- |
| UART1 | /dev/ttyS0 | IO debug |
| USART2 | /dev/ttyS1 | TELEM1 (flow control) |
| USART3 | /dev/ttyS2 | TELEM2 (flow control) |
| UART4 | |
| UART7 | CONSOLE |
| UART8 | SERIAL4 |
<!-- Note: Got ports using https://github.com/PX4/PX4-user_guide/pull/672#issuecomment-598198434 -->
## Serial Port Mapping
+3 -3
View File
@@ -93,8 +93,8 @@ Order from [Holybro](https://holybro.com/products/pixhawk-6c-mini).
## Assembly/Setup
The Pixhawk 4 Mini's port is very similar to the Pixhawk 6C Mini's port.
Please refer to the [Pixhawk 4 Mini Wiring Quick Start](../assembly/quick_start_pixhawk4_mini.md) as it provides instructions on how to assemble required/important peripherals including GPS, Power Module etc.
The Pixhawk 6C Mini's ports are very similar to the Pixhawk 4 Mini's ports.
Please refer to the [Pixhawk 4 Mini Wiring Quick Start](https://docs.px4.io/v1.16/en/assembly/quick_start_pixhawk4_mini) (Discontinued) as it provides instructions on how to assemble required/important peripherals including GPS, Power Module etc.
## Pinouts
@@ -199,7 +199,7 @@ The complete set of supported configurations can be seen in the [Airframes Refer
## See Also
- [Holybro Docs](https://docs.holybro.com/) (Holybro)
- [Pixhawk 4 Mini Wiring Quick Start](../assembly/quick_start_pixhawk4_mini.md) (and [Pixhawk 6C Wiring QuickStart](../assembly/quick_start_pixhawk6c.md))
- [Pixhawk 6C Wiring QuickStart](../assembly/quick_start_pixhawk6c.md)
- [PM02 Power Module](../power_module/holybro_pm02.md)
- [PM06 Power Module](../power_module/holybro_pm06_pixhawk4mini_power_module.md)
- [PM07 Power Module](../power_module/holybro_pm07_pixhawk4_power_module.md)
@@ -169,7 +169,7 @@ As we have no ground or positive BEC voltage connections we connect our `PWM` ES
### GPS / External Magnetometer
I took the GPS cable which fits the connector of the used GPS and came with the Pixracer set.
Sadly the pin assignment was completely wrong and I rewired the connector again using tweezers according to the [3DR Pixhawk Mini user manual](../flight_controller/pixhawk_mini.md#connector-pin-assignments-pin-outs) GPS port.
Sadly the pin assignment was completely wrong and I rewired the connector again using tweezers according to the [3DR Pixhawk Mini user manual](https://docs.px4.io/v1.16/en/flight_controller/pixhawk_mini#connector-pin-assignments-pin-outs) GPS port.
#### Pixracer GPS/I2C Port
+4
View File
@@ -14,6 +14,10 @@ It also links instructions for how you can add PX4 support for:
- [Message Signing](../mavlink/message_signing.md)
- [Protocols/Microservices](../mavlink/protocols.md)
::: warning
MAVLink messages are unauthenticated by default. Without [message signing](../mavlink/message_signing.md) enabled, any device that can send MAVLink messages to the vehicle can execute commands including shell access, file operations, and flight termination. Production deployments must enable signing and follow the [Security Hardening](../mavlink/security_hardening.md) guide.
:::
::: info
We do not yet cover _command_ handling and sending, or how to implement your own microservices.
:::
+84
View File
@@ -0,0 +1,84 @@
# MAVLink Security Hardening for Production Deployments
<Badge type="tip" text="PX4 v1.17" />
MAVLink is an open communication protocol designed for lightweight, low-latency communication between drones and ground stations.
By default, all MAVLink messages are unauthenticated.
This is intentional for development and testing, but **production deployments must enable [message signing](message_signing.md)** to prevent unauthorized access.
::: warning
Without message signing enabled, any device that can send MAVLink messages to the vehicle (via radio, network, or serial) can execute any command, including shell access, file operations, parameter changes, mission uploads, arming, and flight termination.
:::
## What Is at Risk
When MAVLink signing is not enabled, an attacker within communication range can:
| Capability | MAVLink mechanism |
| ---------------------------- | ------------------------------------------------ |
| Execute shell commands | `SERIAL_CONTROL` with `SERIAL_CONTROL_DEV_SHELL` |
| Read, write, or delete files | MAVLink FTP protocol |
| Change any flight parameter | `PARAM_SET` / `PARAM_EXT_SET` |
| Upload or overwrite missions | Mission protocol |
| Arm or disarm motors | `MAV_CMD_COMPONENT_ARM_DISARM` |
| Terminate flight (crash) | `MAV_CMD_DO_FLIGHTTERMINATION` |
| Trigger emergency landing | Spoofed `BATTERY_STATUS` |
| Reboot the vehicle | `MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN` |
All of these are standard MAVLink capabilities used by ground control stations.
Without signing, there is no distinction between a legitimate GCS and an unauthorized sender.
## Hardening Checklist
### 1. Enable Message Signing
Message signing provides cryptographic authentication for all MAVLink communication.
See [Message Signing](message_signing.md) for full details.
Steps:
1. Connect the vehicle via **USB** (key provisioning only works over USB).
2. Provision a 32-byte secret key using the [SETUP_SIGNING](https://mavlink.io/en/messages/common.html#SETUP_SIGNING) message.
3. Set [MAV_SIGN_CFG](../advanced_config/parameter_reference.md#MAV_SIGN_CFG) to **1** (signing enabled on all links except USB) or **2** (signing on all links including USB).
4. Provision the same key on all ground control stations and companion computers that need to communicate with the vehicle.
5. Verify that unsigned messages from unknown sources are rejected.
::: info
`MAV_SIGN_CFG=1` is recommended for most deployments.
This enforces signing on telemetry radios and network links while allowing unsigned access over USB for maintenance.
USB connections require physical access to the vehicle, which provides equivalent security to physical key access.
:::
### 2. Secure Physical Access
- Protect access to the SD card. The signing key is stored at `/mavlink/mavlink-signing-key.bin` and can be read or removed by anyone with physical access.
- USB connections bypass signing when `MAV_SIGN_CFG=1`. Ensure USB ports are not exposed in deployed configurations.
### 3. Secure Network Links
- Do not expose MAVLink UDP/TCP ports to untrusted networks or the internet.
- Place MAVLink communication links behind firewalls or VPNs.
- Segment MAVLink networks from business or public networks.
- When using companion computers, audit which network interfaces MAVLink is bound to.
### 4. Understand the Limitations
- **No encryption**: Message signing provides authentication and integrity, but messages are sent in plaintext. An eavesdropper can read telemetry and commands but cannot forge them.
- **Allowlisted messages**: A small set of [safety-critical messages](message_signing.md#unsigned-message-allowlist) (RADIO_STATUS, ADSB_VEHICLE, COLLISION) are always accepted unsigned.
- **Key management**: There is no automatic key rotation. Keys must be reprovisioned manually via USB if compromised.
## Integrator Responsibility
PX4 is open-source flight controller firmware used by manufacturers and system integrators to build commercial and custom drone platforms.
Securing the communication links for a specific deployment is the responsibility of the system integrator.
This includes:
- Choosing appropriate radio hardware and link security
- Enabling and managing MAVLink message signing
- Restricting network access to MAVLink interfaces
- Applying firmware updates that address security issues
- Evaluating whether the default configuration meets the security requirements of the target application
PX4 provides the tools for securing MAVLink communication.
Integrators must enable and configure them for their deployment context.
+192 -192
View File
@@ -95,202 +95,202 @@ They are not build into the module, and hence are neither published or subscribe
::: details See messages
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
- [DebugVect](../msg_docs/DebugVect.md)
- [NeuralControl](../msg_docs/NeuralControl.md)
- [DebugArray](../msg_docs/DebugArray.md)
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
- [Mission](../msg_docs/Mission.md)
- [GpioRequest](../msg_docs/GpioRequest.md)
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
- [Event](../msg_docs/Event.md)
- [SensorUwb](../msg_docs/SensorUwb.md)
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
- [LedControl](../msg_docs/LedControl.md)
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
- [SensorMag](../msg_docs/SensorMag.md)
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
- [RcParameterMap](../msg_docs/RcParameterMap.md)
- [VehicleRoi](../msg_docs/VehicleRoi.md)
- [GpioIn](../msg_docs/GpioIn.md)
- [GimbalControls](../msg_docs/GimbalControls.md)
- [AirspeedWind](../msg_docs/AirspeedWind.md)
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
- [DeviceInformation](../msg_docs/DeviceInformation.md)
- [OrbitStatus](../msg_docs/OrbitStatus.md)
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
- [RcChannels](../msg_docs/RcChannels.md)
- [GpioOut](../msg_docs/GpioOut.md)
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
- [HealthReport](../msg_docs/HealthReport.md)
- [Cpuload](../msg_docs/Cpuload.md)
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
- [PpsCapture](../msg_docs/PpsCapture.md)
- [MountOrientation](../msg_docs/MountOrientation.md)
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
- [Ping](../msg_docs/Ping.md)
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
- [GainCompression](../msg_docs/GainCompression.md)
- [Rpm](../msg_docs/Rpm.md)
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
- [LogMessage](../msg_docs/LogMessage.md)
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
- [EscReport](../msg_docs/EscReport.md)
- [PowerButtonState](../msg_docs/PowerButtonState.md)
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
- [ActionRequest](../msg_docs/ActionRequest.md)
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
- [SensorTemp](../msg_docs/SensorTemp.md)
- [SensorAccel](../msg_docs/SensorAccel.md)
- [AdcReport](../msg_docs/AdcReport.md)
- [VehicleAirData](../msg_docs/VehicleAirData.md)
- [PwmInput](../msg_docs/PwmInput.md)
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
- [WheelEncoders](../msg_docs/WheelEncoders.md)
- [DatamanResponse](../msg_docs/DatamanResponse.md)
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
- [ActuatorTest](../msg_docs/ActuatorTest.md)
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
- [Gripper](../msg_docs/Gripper.md)
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
- [VelocityLimits](../msg_docs/VelocityLimits.md)
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
- [EstimatorBias](../msg_docs/EstimatorBias.md)
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
- [FollowTarget](../msg_docs/FollowTarget.md)
- [QshellRetval](../msg_docs/QshellRetval.md)
- [SystemPower](../msg_docs/SystemPower.md)
- [DebugValue](../msg_docs/DebugValue.md)
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
- [MavlinkLog](../msg_docs/MavlinkLog.md)
- [GpsDump](../msg_docs/GpsDump.md)
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
- [RadioStatus](../msg_docs/RadioStatus.md)
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
- [TecsStatus](../msg_docs/TecsStatus.md)
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
- [Airspeed](../msg_docs/Airspeed.md)
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
- [VehicleImu](../msg_docs/VehicleImu.md)
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
- [CameraTrigger](../msg_docs/CameraTrigger.md)
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
- [GpsInjectData](../msg_docs/GpsInjectData.md)
- [LoggerStatus](../msg_docs/LoggerStatus.md)
- [UlogStream](../msg_docs/UlogStream.md)
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
- [DatamanRequest](../msg_docs/DatamanRequest.md)
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
- [GpioConfig](../msg_docs/GpioConfig.md)
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
- [Vtx](../msg_docs/Vtx.md)
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
- [ButtonEvent](../msg_docs/ButtonEvent.md)
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
- [OrbTest](../msg_docs/OrbTest.md)
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
- [HomePositionV0](../msg_docs/HomePositionV0.md)
- [RtlStatus](../msg_docs/RtlStatus.md)
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
- [SensorAirflow](../msg_docs/SensorAirflow.md)
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
- [SensorGyro](../msg_docs/SensorGyro.md)
- [GeofenceResult](../msg_docs/GeofenceResult.md)
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
- [SensorBaro](../msg_docs/SensorBaro.md)
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
- [SensorsStatus](../msg_docs/SensorsStatus.md)
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
- [RaptorStatus](../msg_docs/RaptorStatus.md)
- [EstimatorStates](../msg_docs/EstimatorStates.md)
- [CameraStatus](../msg_docs/CameraStatus.md)
- [MagWorkerData](../msg_docs/MagWorkerData.md)
- [HeaterStatus](../msg_docs/HeaterStatus.md)
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
- [DeviceInformation](../msg_docs/DeviceInformation.md)
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
- [Mission](../msg_docs/Mission.md)
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
- [LedControl](../msg_docs/LedControl.md)
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
- [LoggerStatus](../msg_docs/LoggerStatus.md)
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
- [DebugVect](../msg_docs/DebugVect.md)
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
- [EscReport](../msg_docs/EscReport.md)
- [AirspeedWind](../msg_docs/AirspeedWind.md)
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
- [EscStatus](../msg_docs/EscStatus.md)
- [TuneControl](../msg_docs/TuneControl.md)
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
- [EventV0](../msg_docs/EventV0.md)
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
- [RaptorInput](../msg_docs/RaptorInput.md)
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
- [QshellReq](../msg_docs/QshellReq.md)
- [CellularStatus](../msg_docs/CellularStatus.md)
- [BatteryInfo](../msg_docs/BatteryInfo.md)
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
- [CameraCapture](../msg_docs/CameraCapture.md)
- [InputRc](../msg_docs/InputRc.md)
- [MissionResult](../msg_docs/MissionResult.md)
- [PowerMonitor](../msg_docs/PowerMonitor.md)
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
- [MountOrientation](../msg_docs/MountOrientation.md)
- [Cpuload](../msg_docs/Cpuload.md)
- [RaptorStatus](../msg_docs/RaptorStatus.md)
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
- [MavlinkLog](../msg_docs/MavlinkLog.md)
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
- [GainCompression](../msg_docs/GainCompression.md)
- [ActuatorTest](../msg_docs/ActuatorTest.md)
- [ButtonEvent](../msg_docs/ButtonEvent.md)
- [HeaterStatus](../msg_docs/HeaterStatus.md)
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
- [OrbTest](../msg_docs/OrbTest.md)
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
- [FollowTarget](../msg_docs/FollowTarget.md)
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
- [QshellReq](../msg_docs/QshellReq.md)
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
- [TecsStatus](../msg_docs/TecsStatus.md)
- [Vtx](../msg_docs/Vtx.md)
- [SensorGyro](../msg_docs/SensorGyro.md)
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
- [GpioIn](../msg_docs/GpioIn.md)
- [DatamanResponse](../msg_docs/DatamanResponse.md)
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
- [SensorSelection](../msg_docs/SensorSelection.md)
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
- [IrlockReport](../msg_docs/IrlockReport.md)
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
- [GimbalControls](../msg_docs/GimbalControls.md)
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
- [SensorMag](../msg_docs/SensorMag.md)
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
- [QshellRetval](../msg_docs/QshellRetval.md)
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
- [RcChannels](../msg_docs/RcChannels.md)
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
- [RtlStatus](../msg_docs/RtlStatus.md)
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
- [Rpm](../msg_docs/Rpm.md)
- [PwmInput](../msg_docs/PwmInput.md)
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
- [SensorUwb](../msg_docs/SensorUwb.md)
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
- [GpioRequest](../msg_docs/GpioRequest.md)
- [DebugValue](../msg_docs/DebugValue.md)
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
- [VelocityLimits](../msg_docs/VelocityLimits.md)
- [SensorCorrection](../msg_docs/SensorCorrection.md)
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
- [BatteryInfo](../msg_docs/BatteryInfo.md)
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
- [GpioOut](../msg_docs/GpioOut.md)
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
- [MissionResult](../msg_docs/MissionResult.md)
- [TuneControl](../msg_docs/TuneControl.md)
- [WheelEncoders](../msg_docs/WheelEncoders.md)
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
- [HealthReport](../msg_docs/HealthReport.md)
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
- [CellularStatus](../msg_docs/CellularStatus.md)
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
- [VehicleRoi](../msg_docs/VehicleRoi.md)
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
- [PpsCapture](../msg_docs/PpsCapture.md)
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
- [ActionRequest](../msg_docs/ActionRequest.md)
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
- [DebugArray](../msg_docs/DebugArray.md)
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
- [CameraStatus](../msg_docs/CameraStatus.md)
- [LogMessage](../msg_docs/LogMessage.md)
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
- [SensorBaro](../msg_docs/SensorBaro.md)
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
- [GpsDump](../msg_docs/GpsDump.md)
- [GpioConfig](../msg_docs/GpioConfig.md)
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
- [GeofenceResult](../msg_docs/GeofenceResult.md)
- [EstimatorBias](../msg_docs/EstimatorBias.md)
- [SystemPower](../msg_docs/SystemPower.md)
- [EventV0](../msg_docs/EventV0.md)
- [CameraCapture](../msg_docs/CameraCapture.md)
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
- [HomePositionV0](../msg_docs/HomePositionV0.md)
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
- [EstimatorStates](../msg_docs/EstimatorStates.md)
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
- [InputRc](../msg_docs/InputRc.md)
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
- [DatamanRequest](../msg_docs/DatamanRequest.md)
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
- [NeuralControl](../msg_docs/NeuralControl.md)
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
- [CameraTrigger](../msg_docs/CameraTrigger.md)
- [PowerButtonState](../msg_docs/PowerButtonState.md)
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
- [AdcReport](../msg_docs/AdcReport.md)
- [SensorsStatus](../msg_docs/SensorsStatus.md)
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
- [UlogStream](../msg_docs/UlogStream.md)
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
- [SensorAccel](../msg_docs/SensorAccel.md)
- [PowerMonitor](../msg_docs/PowerMonitor.md)
- [OrbitStatus](../msg_docs/OrbitStatus.md)
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
- [Airspeed](../msg_docs/Airspeed.md)
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
- [RadioStatus](../msg_docs/RadioStatus.md)
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
- [VehicleAirData](../msg_docs/VehicleAirData.md)
- [SensorAirflow](../msg_docs/SensorAirflow.md)
- [Ping](../msg_docs/Ping.md)
- [MagWorkerData](../msg_docs/MagWorkerData.md)
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
- [GpsInjectData](../msg_docs/GpsInjectData.md)
- [Event](../msg_docs/Event.md)
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
- [RcParameterMap](../msg_docs/RcParameterMap.md)
- [Gripper](../msg_docs/Gripper.md)
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
- [VehicleImu](../msg_docs/VehicleImu.md)
- [SensorSelection](../msg_docs/SensorSelection.md)
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
- [IrlockReport](../msg_docs/IrlockReport.md)
- [SensorTemp](../msg_docs/SensorTemp.md)
- [RaptorInput](../msg_docs/RaptorInput.md)
:::
+6 -6
View File
@@ -22,11 +22,11 @@ Published by the vehicle's allocation and consumed by the ESC protocol drivers e
## Constants
| Name | Type | Value | Description |
| --------------------------------------------------------------- | -------- | ----- | ----------- |
| Name | Type | Value | Description |
| --------------------------------------------------------------- | -------- | ----- | --------------------------------- |
| <a id="#MESSAGE_VERSION"></a> MESSAGE_VERSION | `uint32` | 0 |
| <a id="#ACTUATOR_FUNCTION_MOTOR1"></a> ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 |
| <a id="#NUM_CONTROLS"></a> NUM_CONTROLS | `uint8` | 12 |
| <a id="#ACTUATOR_FUNCTION_MOTOR1"></a> ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 | output_functions.yaml Motor.start |
| <a id="#NUM_CONTROLS"></a> NUM_CONTROLS | `uint8` | 12 | output_functions.yaml Motor.count |
## Source Message
@@ -47,9 +47,9 @@ uint64 timestamp_sample # [us] Sampling timestamp of the data this control respo
uint16 reversible_flags # [-] Bitset indicating which motors are configured to be reversible
uint8 ACTUATOR_FUNCTION_MOTOR1 = 101
uint8 ACTUATOR_FUNCTION_MOTOR1 = 101 # output_functions.yaml Motor.start
uint8 NUM_CONTROLS = 12
uint8 NUM_CONTROLS = 12 # output_functions.yaml Motor.count
float32[12] control # [@range -1, 1] Normalized thrust. Where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors)
```
+2 -23
View File
@@ -29,17 +29,7 @@ pageClass: is-wide-page
| Name | Type | Value | Description |
| --------------------------------------------------------------------------- | ------- | ----- | ---------------------------------------------------------------------------- |
| <a id="#ACTUATOR_FUNCTION_MOTOR1"></a> ACTUATOR_FUNCTION_MOTOR1 | `uint8` | 101 |
| <a id="#ACTUATOR_FUNCTION_MOTOR2"></a> ACTUATOR_FUNCTION_MOTOR2 | `uint8` | 102 |
| <a id="#ACTUATOR_FUNCTION_MOTOR3"></a> ACTUATOR_FUNCTION_MOTOR3 | `uint8` | 103 |
| <a id="#ACTUATOR_FUNCTION_MOTOR4"></a> ACTUATOR_FUNCTION_MOTOR4 | `uint8` | 104 |
| <a id="#ACTUATOR_FUNCTION_MOTOR5"></a> ACTUATOR_FUNCTION_MOTOR5 | `uint8` | 105 |
| <a id="#ACTUATOR_FUNCTION_MOTOR6"></a> ACTUATOR_FUNCTION_MOTOR6 | `uint8` | 106 |
| <a id="#ACTUATOR_FUNCTION_MOTOR7"></a> ACTUATOR_FUNCTION_MOTOR7 | `uint8` | 107 |
| <a id="#ACTUATOR_FUNCTION_MOTOR8"></a> ACTUATOR_FUNCTION_MOTOR8 | `uint8` | 108 |
| <a id="#ACTUATOR_FUNCTION_MOTOR9"></a> ACTUATOR_FUNCTION_MOTOR9 | `uint8` | 109 |
| <a id="#ACTUATOR_FUNCTION_MOTOR10"></a> ACTUATOR_FUNCTION_MOTOR10 | `uint8` | 110 |
| <a id="#ACTUATOR_FUNCTION_MOTOR11"></a> ACTUATOR_FUNCTION_MOTOR11 | `uint8` | 111 |
| <a id="#ACTUATOR_FUNCTION_MOTOR12"></a> ACTUATOR_FUNCTION_MOTOR12 | `uint8` | 112 |
| <a id="#ACTUATOR_FUNCTION_MOTOR_MAX"></a> ACTUATOR_FUNCTION_MOTOR_MAX | `uint8` | 112 | output_functions.yaml Motor.start + Motor.count - 1 |
| <a id="#FAILURE_OVER_CURRENT"></a> FAILURE_OVER_CURRENT | `uint8` | 0 | (1 << 0) |
| <a id="#FAILURE_OVER_VOLTAGE"></a> FAILURE_OVER_VOLTAGE | `uint8` | 1 | (1 << 1) |
| <a id="#FAILURE_MOTOR_OVER_TEMPERATURE"></a> FAILURE_MOTOR_OVER_TEMPERATURE | `uint8` | 2 | (1 << 2) |
@@ -72,19 +62,8 @@ uint8 esc_cmdcount # Counter of number of commands
uint8 esc_state # State of ESC - depend on Vendor
uint8 actuator_function # actuator output function (one of Motor1...MotorN)
uint8 ACTUATOR_FUNCTION_MOTOR1 = 101
uint8 ACTUATOR_FUNCTION_MOTOR2 = 102
uint8 ACTUATOR_FUNCTION_MOTOR3 = 103
uint8 ACTUATOR_FUNCTION_MOTOR4 = 104
uint8 ACTUATOR_FUNCTION_MOTOR5 = 105
uint8 ACTUATOR_FUNCTION_MOTOR6 = 106
uint8 ACTUATOR_FUNCTION_MOTOR7 = 107
uint8 ACTUATOR_FUNCTION_MOTOR8 = 108
uint8 ACTUATOR_FUNCTION_MOTOR9 = 109
uint8 ACTUATOR_FUNCTION_MOTOR10 = 110
uint8 ACTUATOR_FUNCTION_MOTOR11 = 111
uint8 ACTUATOR_FUNCTION_MOTOR12 = 112
uint8 ACTUATOR_FUNCTION_MOTOR_MAX = 112 # output_functions.yaml Motor.start + Motor.count - 1
uint16 failures # Bitmask to indicate the internal ESC faults
int8 esc_power # Applied power 0-100 in % (negative values reserved)
@@ -26,6 +26,8 @@ This power module has integrated power distribution board and provides regulated
## Wiring/Connections
Wiring and connection examples can be found in: [Pixhawk 4 Mini > Power](../assembly/quick_start_pixhawk4_mini.md#power).
![pm06_pin_map](../../assets/hardware/power_module/holybro_pm06/pm06_pin_map.jpg)
<img src="../../assets/hardware/power_module/holybro_pm06/pm06_pin_map.jpg" width="450px" title="pm06" />
This image shows the wiring and connections for the [Pixhawk 4 Mini](https://docs.px4.io/v1.16/en/assembly/quick_start_pixhawk4_mini#power) (discontinued).
![Pixhawk 4 - Power Management Board](../../assets/hardware/power_module/holybro_pm06/pixhawk4mini_power_management.png)
+1
View File
@@ -779,6 +779,7 @@
- [Streaming Messages](mavlink/streaming_messages.md)
- [Receiving Messages](mavlink/receiving_messages.md)
- [Custom MAVLink Messages](mavlink/custom_messages.md)
- [Message Signing](mavlink/message_signing.md)
- [Protocols/Microservices](mavlink/protocols.md)
- [Standard Modes Protocol](mavlink/standard_modes.md)
- [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/uxrce_dds.md)
+24 -25
View File
@@ -151,36 +151,35 @@ else {
## 커밋과 커밋 메시지
Use descriptive, multi-paragraph commit messages for all non-trivial changes.
쉽게 이해할 수 있는 한 줄 요약과 자세한 세부정보도 기록하십시오.
PX4 uses [conventional commits](https://www.conventionalcommits.org/) for all commit messages and PR titles.
```plain
Component: Explain the change in one sentence. Fixes #1234
### Format
Prepend the software component to the start of the summary
line, either by the module name or a description of it.
(e.g. "mc_att_ctrl" or "multicopter attitude controller").
If the issue number is appended as <Fixes #1234>, Github
will automatically close the issue when the commit is
merged to the master branch.
The body of the message can contain several paragraphs.
Describe in detail what you changed. Link issues and flight
logs either related to this fix or to the testing results
of this commit.
Describe the change and why you changed it, avoid to
paraphrase the code change (Good: "Adds an additional
safety check for vehicles with low quality GPS reception".
Bad: "Add gps_reception_check() function").
Reported-by: Name <email@px4.io>
```
type(scope): short description of the change
```
**Use **`git commit -s`** to sign off on all of your commits.** This will add `signed-off-by:` with your name and email as the last line.
Where **type** is the category of change (`feat`, `fix`, `docs`, `refactor`, `perf`, `test`, `build`, `ci`, `style`, `chore`, `revert`) and **scope** is the module or area affected (e.g. `ekf2`, `mavlink`, `navigator`). See the full [types and scopes tables](https://github.com/PX4/PX4-Autopilot/blob/main/CONTRIBUTING.md#commit-message-convention) in CONTRIBUTING.md.
This commit guide is based on best practices for the Linux Kernel and other [projects maintained](https://github.com/torvalds/subsurface-for-dirk/blob/a48494d2fbed58c751e9b7e8fbff88582f9b2d02/README#L88-L115) by Linus Torvalds.
Append `!` before the colon to mark a breaking change: `feat(ekf2)!: remove deprecated API`.
### 예
```
feat(ekf2): add height fusion timeout. Fixes #1234
The previous implementation did not handle the case where
height fusion data stops arriving mid-flight. This adds a
configurable timeout that falls back to barometric height.
Tested in SITL with simulated sensor dropout.
Signed-off-by: Your Name <your@email.com>
```
The body of the message can contain several paragraphs. Describe in detail what you changed and why. Link related issues and flight logs. Describe the change and why you made it, rather than paraphrasing the code change.
**Use `git commit -s` to sign off on all of your commits.** This adds `Signed-off-by:` with your name and email as the last line.
## Pull Requests
+3 -3
View File
@@ -49,15 +49,15 @@ PX4 기능 추가 절차는 다음과 같습니다. 다음 예제를 따라 PX4
git add <file name>
```
If you prefer having a GUI to add your files see [Gitk](https://git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Graphical-Interfaces) or [`git add -p`](https://nuclearsquid.com/writings/git-add/).
If you prefer having a GUI to add your files see [Gitk](https://git-scm.com/book/en/v2/Git-in-Other-Environments-Graphical-Interfaces) or [`git add -p`](https://nuclearsquid.com/writings/git-add/).
- 변경 사항을 설명하는 메시지와 함께 추가된 파일을 커밋합니다.
```sh
git commit -m "<your commit message>"
git commit -s -m "feat(ekf2): add height fusion timeout"
```
For a good commit message, please refer to the [Source Code Management](../contribute/code.md#commits-and-commit-messages) section.
Use [conventional commits](https://www.conventionalcommits.org/) format: `type(scope): description`. For details on types and scopes, see the [Source Code Management](../contribute/code.md#commits-and-commit-messages) section.
- Some time might have passed and the [upstream main](https://github.com/PX4/PX4-Autopilot) has changed.
PX4 prefers a linear commit history and uses [git rebase](https://git-scm.com/book/en/v2/Git-Branching-Rebasing).
+4 -4
View File
@@ -136,13 +136,13 @@ The following list shows the build commands for the [Pixhawk standard](../flight
- [mRo Pixhawk (FMUv3)](../flight_controller/mro_pixhawk.md): `make px4_fmu-v3_default` (supports 2MB Flash)
- [Holybro pix32 (FMUv2)](../flight_controller/holybro_pix32.md): `make px4_fmu-v2_default`
- [Holybro pix32 (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued
- [Pixfalcon (FMUv2)](../flight_controller/pixfalcon.md): `make px4_fmu-v2_default`
- [Pixfalcon (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued
- [Dropix (FMUv2)](../flight_controller/dropix.md): `make px4_fmu-v2_default`
- [Dropix (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued
- [Pixhawk 1 (FMUv2)](../flight_controller/pixhawk.md): `make px4_fmu-v2_default`
- [Pixhawk 1 (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued
:::warning
You **must** use a supported version of GCC to build this board (e.g. the `gcc-arm-none-eabi` package from the current Ubuntu LTS, which is the same toolchain used by CI) or remove modules from the build.
+1 -1
View File
@@ -71,7 +71,7 @@ PX4 _developers_ need to know the FMU version of their board, as this is require
주요 차이점은 아래와 같습니다.
- **FMUv2:** Single board with STM32427VI processor ([Pixhawk 1 (Discontinued)](../flight_controller/pixhawk.md), [pix32](../flight_controller/holybro_pix32.md), [Pixfalcon](../flight_controller/pixfalcon.md), [Drotek DroPix](../flight_controller/dropix.md))
- **FMUv2:** Single board with STM32427VI processor (Pixhawk 1 (discontinued), Holybro pix32 (discontinued), Pixfalcon (discontinued), Drotek DroPix (discontinued))
- **FMUv3:** Identical to FMUv2, but usable flash doubled to 2MB ([Hex Cube Black](../flight_controller/pixhawk-2.md),[CUAV Pixhack v3](../flight_controller/pixhack_v3.md),[mRo Pixhawk](../flight_controller/mro_pixhawk.md), [Pixhawk Mini (Discontinued)](../flight_controller/pixhawk_mini.md))
- **FMUv4:** Increased RAM. 더 빨라진 CPU. 더 많은 직렬 포트. No IO processor ([Pixracer](../flight_controller/pixracer.md))
- **FMUv4-PRO:** Slightly increased RAM. 더 많은 직렬 포트. IO processor ([Pixhawk 3 Pro](../flight_controller/pixhawk3_pro.md))
+3 -3
View File
@@ -6,7 +6,7 @@ It is small, rugged and just large enough to host a [Pixracer](../flight_control
주요 정보:
- **Frame:** Wing Wing Z-84
- **Flight controller:** Pixracer
- **Flight controller:** Pixracer (Discontinued)
![Wing Wing Z-84 build](../../assets/airframes/fw/wing_wing/wing_wing_build11.jpg)
@@ -31,8 +31,8 @@ Any small (>=12A) ESC will do:
- [Pixracer](../flight_controller/pixracer.md) kit (including GPS and power module)
- FrSky D4R-II 수신기 또는 동급 (설명서에 따라 PPM 합계 출력으로 점퍼됨)
- [Mini telemetry set](../flight_controller/pixfalcon.md#availability) for Holybro pix32
- [Digital airspeed sensor](../flight_controller/pixfalcon.md#availability) for Holybro pix32 / Pixfalcon
- _Mini telemetry set_ for Holybro pix32
- _Digital airspeed sensor_ for Holybro pix32 / Pixfalcon
- 1800 mAh 2S LiPo Battery - e.g. Team Orion 1800mAh 7.4V 50C 2S1P with XT 60 plug.
### 권장 예비 부품
@@ -3,6 +3,7 @@
:::warning
Discontinued
The Falcon Venturi FPV Wing frame on which this vehicle is based is no longer available.
The Dropix FC used by this vehicle is discontinued.
:::
The _Falcon Vertigo Hybrid VTOL_ is a quadplane VTOL aircraft that has been designed to work with PX4 and the Dropix (Pixhawk compatible) flight controller. 소형 GoPro 카메라를 장착할 수 있습니다.
@@ -13,7 +14,7 @@ RTF 키트에는 RC 수신기와 텔레메트리를 제외하고, 시스템에
주요 정보:
- **Frame:** Falcon Vertigo Hybrid VTOL
- **Flight controller:** Dropix
- **Flight controller:** Dropix (Discontineud)
- **Wing span:** 1.3m
![Falcon Vertigo Hybrid VTOL RTF](../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_complete.jpg)
@@ -115,21 +116,17 @@ RTF 키트는 아래와 같이 조립하여야 합니다.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_23_dropix_and_other_electronics.jpg" width="500px" title="Falcon Vertigo Electronics" />
:::info
General information about connecting Dropix can be found in [Dropix Flight Controller](../flight_controller/dropix.md).
:::
#### Connect the ESC power connector and pass the signals cables to the flight controller
#### ESC 전원 커넥터를 연결하고, 신호 케이블을 비행 컨트롤러에 연결합니다.
1. XT60 커넥터를 사용하여 ESC를 전원 모듈에 연결합니다.
1. Connect the ESC to the power module using the XT60 connector
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_25_aileron_esc_connections.jpg" width="500px" title="" />
2. 신호 케이블을 비행 컨트롤러로 연결합니다.
2. Pass the signals cables through to the flight controller
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_27_gps_esc_servo_connections.jpg" width="500px" title="GPS, ESC, Servo connections" />
#### 모터 배선
#### Motor Wiring
Motor and servo wiring is nearly entirely up to you, but should match the [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) configuration, as shown in the airframe reference.
The geometry and output assignment can be configured in the [Actuators Configuration](../config/actuators.md#actuator-outputs)
@@ -139,81 +136,81 @@ For example, you might wire it up like this example (orientation as if "sitting
| 포트 | 연결 |
| ------ | ---------------------- |
| MAIN 1 | Front right motor, CCW |
| MAIN 2 | 후방 촤즉 모터, 반시계 방향 |
| MAIN 3 | 전방 좌측 모터, 시계방향 |
| MAIN 4 | 후방 우측 모터, 시계 방향 |
| AUX 1 | 좌측 보조익 |
| AUX 2 | 우측 보조익 |
| AUX 3 | 승강타 |
| AUX 4 | 방향타 |
| AUX 5 | 스로틀 |
| MAIN 2 | Back left motor, CCW |
| MAIN 3 | Front left motor, CW |
| MAIN 4 | Back right motor, CW |
| AUX 1 | Left aileron |
| AUX 2 | Right aileron |
| AUX 3 | Elevator |
| AUX 4 | Rudder |
| AUX 5 | Throttle |
<a id="dropix_back"></a>
#### 비행 컨트롤러 연결 : 모터, 서보, RC 수신기, 전류 센서
#### Flight Controller Connections: Motors, Servos, RC receiver, current sensor
아래 이미지는 dropix 비행 컨트롤러의 뒷면을 보여, 주며 쿼드 모터 케이블, 에일러론 신호 케이블, 스로틀 모터, 전류 센서 및 수신기 (RC IN) 입력 핀을 연결하기위한 출력 핀을 강조하여 표시합니다.
The image below shows back of the dropix flight controller, highlighting the outputs pins to connect quad motors cables, aileron signal cables, throttle motor, and the current sensor and receiver (RC IN) input pins.
<img id="dropix_outputs" src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_33_dropix_outputs.jpg" width="500px" title="Dropix motor/servo outputs" />
1. 쿼드 모터 신호 케이블을 연결합니다.
1. Connect quad motors signal cables.
2. 보조 출력에 에일러론 케이블과 스로틀 모터를 연결합니다.
2. Connect the aileron cables and throttle motor in the auxiliary outputs.
3. ESC의 스로틀 모터 신호 케이블을 적절한 비행 컨트롤러 보조 포트에 연결합니다. ESC를 스로틀 모터에 연결합니다.
3. Connect the throttle motor signal cable from the ESC to the appropriate flight controller auxiliary port. Connect the ESC to the throttle motor.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_37_connect_throttle_motor.jpg" width="500px" title="Connect throttle motor" />
4. 수신기를 RC IN에 연결합니다.
4. Connect the receiver (RC IN).
<a id="dropix_front"></a>
#### 비행 컨트롤러 연결 : 원격 측정, 대기 속도 센서, GPS, 부저 및 안전 스위치
#### Flight Controller Connections: Telemetry, Airspeed Sensor, GPS, Buzzer and Safety Switch
센서 입력, 원격 측정, 부저 및 안전 스위치는 아래 연결 다이어그램과 같이 비행 컨트롤러의 전면에 위치합니다.
The sensor inputs, telemetry, buzzer and safety switch are located in the front of the flight controller, as shown in the connection diagram below.
<img src="../../assets/flight_controller/dropix/dropix_connectors_front.jpg" width="500px" alt="Dropix connectors front" title="Dropix connectors front" />
1. 그림과 같이 원격 측정, 대기 속도 센서, GPS, 부저 및 안전 스위치를 연결합니다.
1. Connect the telemetry, airspeed sensor, GPS, buzzer and safety switch as shown.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_39_connect_sensors.jpg" width="500px" title="Connect sensors" />
#### 비행 컨트롤러 : 전원 모듈 및 외부 USB 연결
#### Flight Controller: Connect power module and external USB
USB 포트, 전원 모듈 및 외부 USB에 대한 입력은 비행 컨트롤러의 오른쪽에 있습니다.
The inputs for the USB port, power module and external USB are located on the right side of the flight controller.
1. 그림과 같이 전원과 USB를 연결합니다.
1. Connect power and USB as shown
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_41_connect_power_module_usb.jpg" width="500px" title="Connect power module and USB" />
:::tip
The external USB is optional.
비행 컨트롤러를 장착 후, USB 포트에 액세스하기 어려운 경우에 사용하여야 합니다.
It should be used if access to the USB port is difficult once the flight controller is mounted.
:::
#### -- 피토 튜브 (대기 속도 센서) 설치
#### Install the pitot tube (airspeed sensor)
피토 튜브는 비행기 전면에 설치되며 튜브를 통해 대기 속도 센서에 연결됩니다.
The pitot tube is installed on the front of the plane and connected to the airspeed sensor via a tube.
:::warning
It is important that nothing obstructs airflow to the Pitot tube. 이것은 고정익 비행과 쿼드에서 비행기로의 전환에 매우 중요합니다.
It is important that nothing obstructs airflow to the Pitot tube. This is critical for fixed-wing flight and for transitioning from quad to plane.
:::
1. 비행기 전면에 피토 튜브를 설치합니다
1. Install the Pitot tube in the front of the plane
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_43_airspeed_sensor_mounting.jpg" width="500px" title="Airspeed sensor mounting" />
2. 연결 튜브를 고정하고 구부러 지거나 꼬이지 않았는 지 확인합니다.
2. Secure the connecting tubing and ensure that it is not bent/kinked.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_45_airspeed_sensor_tubing.jpg" width="500px" title="Airspeed sensor mounting" />
3. 튜브를 대기 속도 센서에 연결합니다.
3. Connect the tubes to the airspeed sensor.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_47_connect_airspeed_sensor_tubing.jpg" width="500px" title="Connect airspeed sensor and tubing" />
#### 수신기 및 원격 측정 모듈 설치 / 연결
#### Install/connect receiver and telemetry module
1. 수신기와 원격 측정 모듈을 차량 프레임 외부에 붙여 넣습니다.
1. Paste the receiver and telemetry module to the outside of the vehicle frame.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_49_receiver_mounting.jpg" width="500px" title="Paste receiver" />
@@ -225,27 +222,27 @@ It is important that nothing obstructs airflow to the Pitot tube. 이것은 고
<a id="compass_gps"></a>
#### GPS / 나침반 모듈
#### GPS/Compass module
GPS / 나침반 모듈은 기본 방향으로 날개에 이미 장착되어 있습니다. 이를 위해 추가 작업을 할 필요가 없습니다!
The GPS/Compass module is already mounted on the wing, in the default orientation. You don't need to have to do anything extra for this!
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_gps_compass.jpg" width="500px" title="GPS/Compass" />
<a id="flight_controller_orientation"></a>
#### 비행 컨트롤러 장착 및 방향 설정
#### Mount and orient the flight controller
1. 비행 컨트롤러 방향을 270도로 설정합니다.
1. Set your flight controller orientation to 270 degrees.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_53_flight_controller_orientation.jpg" width="500px" title="Flight controller orientation" />
2. 진동 감쇠폼을 사용하여 컨트롤러를 제자리에 고정합니다.
2. Secure the controller in place using vibration damping foam.
### 4 단계 : 최종 조립 확인
### Step 4: Final Assembly Checks
마지막 조립 단계는 차량이 안정적이고 모터가 올바르게 설정되었는 지 확인하는 것입니다.
The final assembly step is to check the vehicle is stable and that the motors have been set up correctly.
1. 모터가 올바른 방향으로 회전하는지 확인하십시오 (아래 QuadX 다이어그램 참조).
1. Check that the motors turn in the correct directions (as in the QuadX diagram below).
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_35_quad_motor_directions.png" width="200px" title="Quad motor order/directions" />
@@ -254,12 +251,12 @@ GPS / 나침반 모듈은 기본 방향으로 날개에 이미 장착되어 있
:::
2. 차량이 예상 무게 중심 주변에서 균형을 이루는 지 확인하십시오.
- 손가락으로 기체의 무게 중심을 잡고 차량이 안정적인지 확인하십시오.
2. Check the vehicle is balanced around the expected centre of gravity
- Hold the vehicle with your fingers at the center of gravity and check that the vehicle remains stable.
![Level Centre of Gravity](../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_57_level_centre_of_gravity.jpg)
- 차량이 앞이나 뒤로 기울면 모터를 움직여 균형을 잡으십시오.
- If the vehicle leans forward or backwards, move the motors to balance it.
![Level Motors](../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_55_level_motors.jpg)
@@ -267,7 +264,7 @@ GPS / 나침반 모듈은 기본 방향으로 날개에 이미 장착되어 있
Perform the normal [Basic Configuration](../config/index.md).
참고:
Notes:
1. For [Airframe](../config/airframe.md) select the vehicle group/type as _Standard VTOL_ and the specific vehicle as [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) as shown below.
@@ -279,7 +276,7 @@ Perform the normal [Basic Configuration](../config/index.md).
4. The default parameters are often sufficient for stable flight. For more detailed tuning information see [Standard VTOL Wiring and Configuration](../config_vtol/vtol_quad_configuration.md).
보정을 마치면 VTOL이 비행할 준비가 됩니다.
After you finish calibration the VTOL is ready to fly.
## 비디오
+1
View File
@@ -11,6 +11,7 @@ It also links instructions for how you can add PX4 support for:
- [Streaming MAVLink messages](../mavlink/streaming_messages.md)
- [Handling incoming MAVLink messages (and writing to a uORB topic)](../mavlink/receiving_messages.md)
- [Custom MAVLink Messages](../mavlink/custom_messages.md)
- [Message Signing](../mavlink/message_signing.md)
- [Protocols/Microservices](../mavlink/protocols.md)
:::info
+126
View File
@@ -0,0 +1,126 @@
# MAVLink Message Signing
[MAVLink 2 message signing](https://mavlink.io/en/guide/message_signing.html) allows PX4 to cryptographically verify that incoming MAVLink messages originate from a trusted source (authentication).
:::info
This mechanism does not _encrypt_ the message payload.
:::
## 개요
When signing is enabled, PX4 appends a 13-byte [signature](https://mavlink.io/en/guide/message_signing.html#signature) to every outgoing MAVLink 2 message.
Incoming messages are checked against the shared secret key, and unsigned or incorrectly signed messages are rejected (with [exceptions for safety-critical messages](#unsigned-message-allowlist)).
The signing implementation is built into the MAVLink module and is always available — no special build flags are required.
It is enabled and disabled at runtime through the [MAV_SIGN_CFG](../advanced_config/parameter_reference.md#MAV_SIGN_CFG) parameter.
## Enable/Disable Signing
The [MAV_SIGN_CFG](../advanced_config/parameter_reference.md#MAV_SIGN_CFG) parameter controls whether signing is active:
| Value | Mode | 설명 |
| ----- | ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| 0 | Disabled (default) | No signing. All messages are accepted regardless of signature. |
| 1 | Non-USB | Signing is enabled on all links **except** USB serial connections. USB links accept unsigned messages. |
| 2 | Always | Signing is enforced on all links, including USB. |
:::warning
Setting `MAV_SIGN_CFG` alone does not enable signing — a secret key must also be present (see [Key Provisioning](#key-provisioning) below).
If no key has been set (or the key is all zeros with a zero timestamp), all messages are accepted regardless of this parameter.
:::
To **disable** signing, set `MAV_SIGN_CFG` to zero.
## Key Provisioning
The signing key is set by sending the MAVLink [SETUP_SIGNING](https://mavlink.io/en/messages/common.html#SETUP_SIGNING) message (ID 256) to PX4.
This message contains:
- A 32-byte secret key
- A 64-bit initial timestamp
:::warning
For security, PX4 only accepts `SETUP_SIGNING` messages received on a **USB** connection.
The message is silently ignored on all other link types (telemetry radios, network, and so on).
This ensures that an attacker cannot remotely change the signing key.
:::
## Key Storage
The secret key and timestamp are stored on the SD card at:
```txt
/mavlink/mavlink-signing-key.bin
```
The file is a 40-byte binary file:
| Offset | Size | Content |
| ------ | -------- | -------------------------------------------------------- |
| 0 | 32 bytes | Secret key |
| 32 | 8 bytes | Timestamp (`uint64_t`, little-endian) |
The file is created with mode `0600` (owner read/write only), and the containing `/mavlink/` directory is created with mode `0700` (owner only).
On startup, PX4 reads the key from this file.
If the file exists and contains a non-zero key or timestamp, signing is initialized automatically.
:::info
The timestamp in the file is set when `SETUP_SIGNING` is received.
A graceful shutdown also writes the current timestamp back, but in practice most vehicles are powered off by pulling the battery, so the on-disk timestamp will typically remain at the value from the last key provisioning.
:::
:::info
Storage of the key on the SD card means that signing can be disabled by removing the card.
Note that this requires physical access to the vehicle, and therefore provides the same level of security as allowing signing to be modified via the USB channel.
:::
## How It Works
### Initialization
1. The MAVLink module calls `MavlinkSignControl::start()` during startup.
2. The `/mavlink/` directory is created if it doesn't exist.
3. The `mavlink-signing-key.bin` file is opened (or created empty).
4. If a valid key is found (non-zero key or timestamp), signing is marked as initialized.
5. The `accept_unsigned` callback is registered with the MAVLink library.
### Outgoing Messages
When signing is initialized, the `MAVLINK_SIGNING_FLAG_SIGN_OUTGOING` flag is set, which causes the MAVLink library to automatically append a [SHA-256 based signature](https://mavlink.io/en/guide/message_signing.html#signature) to every outgoing MAVLink 2 message.
### Incoming Messages
For each incoming message, the MAVLink library checks whether a valid signature is present.
If the message is unsigned or has an invalid signature, the library calls the `accept_unsigned` callback, which decides whether to accept or reject the message based on:
1. **Signing not initialized** — If no key has been loaded, all messages are accepted.
2. **Allowlisted message** — Certain [safety-critical messages](#unsigned-message-allowlist) are always accepted.
3. **Sign mode** — The `MAV_SIGN_CFG` parameter determines behavior:
- Mode 0 (disabled): All unsigned messages are accepted.
- Mode 1 (non-USB): Unsigned messages are accepted only on USB links.
- Mode 2 (always): Unsigned messages are rejected on all links.
## Unsigned Message Allowlist
The following messages are **always** accepted unsigned, regardless of the signing mode.
These are safety-critical messages that may originate from systems that don't support signing:
| 메시지 | ID | Reason |
| -------------------------------------------------------------------------------------------- | --- | -------------------------------------------------------- |
| [RADIO_STATUS](https://mavlink.io/en/messages/common.html#RADIO_STATUS) | 109 | Radio link status from SiK radios and other radio modems |
| [ADSB_VEHICLE](https://mavlink.io/en/messages/common.html#ADSB_VEHICLE) | 246 | ADS-B traffic information for collision avoidance |
| [COLLISION](https://mavlink.io/en/messages/common.html#COLLISION) | 247 | Collision threat warnings |
## Security Considerations
- **Physical access required for key setup**: The `SETUP_SIGNING` message is only accepted over USB, so an attacker must have physical access to the vehicle to provision or change the key.
- **Key not exposed via parameters**: The secret key is stored in a separate file on the SD card, not as a MAVLink parameter, so it cannot be read back through the parameter protocol.
- **SD card access**: Anyone with physical access to the SD card can read or modify the `mavlink-signing-key.bin` file, or just remove the card.
Ensure physical security of the vehicle if signing is used as a security control.
- **Replay protection**: The MAVLink signing protocol includes a timestamp that prevents replay attacks.
The on-disk timestamp is updated when a new key is provisioned via `SETUP_SIGNING`.
A graceful shutdown also persists the current timestamp, but since most vehicles are powered off by pulling the battery, the timestamp will typically reset to the value from the last key provisioning on reboot.
- **No encryption**: Message signing provides authentication and integrity, but messages are still sent in plaintext.
An eavesdropper can read message contents but cannot forge or modify them without the key.
+1
View File
@@ -30,6 +30,7 @@ These services are known to be supported in some form:
- [Landing Target Protocol](https://mavlink.io/en/services/landing_target.html)
- [Manual Control (Joystick) Protocol](https://mavlink.io/en/services/manual_control.html)
- [MAVLink Id Assignment (sysid, compid)](https://mavlink.io/en/services/mavlink_id_assignment.html)
- [Message Signing](../mavlink/message_signing.md) ([MAVLink spec](https://mavlink.io/en/guide/message_signing.html))
- [Mission Protocol](https://mavlink.io/en/services/mission.html)
- [Offboard Control Protocol](https://mavlink.io/en/services/offboard_control.html)
- [Remote ID](../peripherals/remote_id.md) ([Open Drone ID Protocol](https://mavlink.io/en/services/opendroneid.html))
+183 -183
View File
@@ -96,203 +96,203 @@ They are not build into the module, and hence are neither published or subscribe
:::details
See messages
- [GpioConfig](../msg_docs/GpioConfig.md)
- [MavlinkLog](../msg_docs/MavlinkLog.md)
- [Event](../msg_docs/Event.md)
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
- [MagWorkerData](../msg_docs/MagWorkerData.md)
- [OrbTest](../msg_docs/OrbTest.md)
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
- [EventV0](../msg_docs/EventV0.md)
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
- [EstimatorBias](../msg_docs/EstimatorBias.md)
- [QshellRetval](../msg_docs/QshellRetval.md)
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
- [GpioIn](../msg_docs/GpioIn.md)
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
- [Airspeed](../msg_docs/Airspeed.md)
- [SensorMag](../msg_docs/SensorMag.md)
- [QshellReq](../msg_docs/QshellReq.md)
- [RcChannels](../msg_docs/RcChannels.md)
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
- [TecsStatus](../msg_docs/TecsStatus.md)
- [CameraStatus](../msg_docs/CameraStatus.md)
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
- [DatamanRequest](../msg_docs/DatamanRequest.md)
- [SensorAccel](../msg_docs/SensorAccel.md)
- [HomePositionV0](../msg_docs/HomePositionV0.md)
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
- [OrbitStatus](../msg_docs/OrbitStatus.md)
- [RcParameterMap](../msg_docs/RcParameterMap.md)
- [PowerButtonState](../msg_docs/PowerButtonState.md)
- [GpioRequest](../msg_docs/GpioRequest.md)
- [VehicleRoi](../msg_docs/VehicleRoi.md)
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
- [EscStatus](../msg_docs/EscStatus.md)
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
- [GpioOut](../msg_docs/GpioOut.md)
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
- [ActionRequest](../msg_docs/ActionRequest.md)
- [GimbalControls](../msg_docs/GimbalControls.md)
- [MountOrientation](../msg_docs/MountOrientation.md)
- [LedControl](../msg_docs/LedControl.md)
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
- [VehicleAirData](../msg_docs/VehicleAirData.md)
- [BatteryInfo](../msg_docs/BatteryInfo.md)
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
- [RaptorInput](../msg_docs/RaptorInput.md)
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
- [VehicleImu](../msg_docs/VehicleImu.md)
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
- [SensorUwb](../msg_docs/SensorUwb.md)
- [LogMessage](../msg_docs/LogMessage.md)
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
- [SensorTemp](../msg_docs/SensorTemp.md)
- [SensorGyro](../msg_docs/SensorGyro.md)
- [PowerMonitor](../msg_docs/PowerMonitor.md)
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
- [HeaterStatus](../msg_docs/HeaterStatus.md)
- [SensorAirflow](../msg_docs/SensorAirflow.md)
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
- [LoggerStatus](../msg_docs/LoggerStatus.md)
- [TuneControl](../msg_docs/TuneControl.md)
- [GpsDump](../msg_docs/GpsDump.md)
- [WheelEncoders](../msg_docs/WheelEncoders.md)
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
- [HealthReport](../msg_docs/HealthReport.md)
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
- [GpsInjectData](../msg_docs/GpsInjectData.md)
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
- [EscReport](../msg_docs/EscReport.md)
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
- [SensorCorrection](../msg_docs/SensorCorrection.md)
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
- [EstimatorStates](../msg_docs/EstimatorStates.md)
- [CameraCapture](../msg_docs/CameraCapture.md)
- [RadioStatus](../msg_docs/RadioStatus.md)
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
- [SensorsStatus](../msg_docs/SensorsStatus.md)
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
- [NeuralControl](../msg_docs/NeuralControl.md)
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
- [GeofenceResult](../msg_docs/GeofenceResult.md)
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
- [GimbalControls](../msg_docs/GimbalControls.md)
- [SystemPower](../msg_docs/SystemPower.md)
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
- [CameraTrigger](../msg_docs/CameraTrigger.md)
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
- [EscReport](../msg_docs/EscReport.md)
- [IrlockReport](../msg_docs/IrlockReport.md)
- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
- [VelocityLimits](../msg_docs/VelocityLimits.md)
- [Gripper](../msg_docs/Gripper.md)
- [Mission](../msg_docs/Mission.md)
- [RtlStatus](../msg_docs/RtlStatus.md)
- [GainCompression](../msg_docs/GainCompression.md)
- [DatamanResponse](../msg_docs/DatamanResponse.md)
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
- [DeviceInformation](../msg_docs/DeviceInformation.md)
- [UlogStream](../msg_docs/UlogStream.md)
- [SensorSelection](../msg_docs/SensorSelection.md)
- [DebugVect](../msg_docs/DebugVect.md)
- [PpsCapture](../msg_docs/PpsCapture.md)
- [GpioConfig](../msg_docs/GpioConfig.md)
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
- [GpioRequest](../msg_docs/GpioRequest.md)
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
- [MissionResult](../msg_docs/MissionResult.md)
- [GeofenceResult](../msg_docs/GeofenceResult.md)
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
- [FollowTarget](../msg_docs/FollowTarget.md)
- [DebugArray](../msg_docs/DebugArray.md)
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
- [MavlinkLog](../msg_docs/MavlinkLog.md)
- [DebugValue](../msg_docs/DebugValue.md)
- [Rpm](../msg_docs/Rpm.md)
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
- [CellularStatus](../msg_docs/CellularStatus.md)
- [ButtonEvent](../msg_docs/ButtonEvent.md)
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
- [PwmInput](../msg_docs/PwmInput.md)
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
- [RaptorStatus](../msg_docs/RaptorStatus.md)
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
- [PowerButtonState](../msg_docs/PowerButtonState.md)
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
- [VehicleRoi](../msg_docs/VehicleRoi.md)
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
- [WheelEncoders](../msg_docs/WheelEncoders.md)
- [UlogStream](../msg_docs/UlogStream.md)
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
- [ButtonEvent](../msg_docs/ButtonEvent.md)
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
- [GainCompression](../msg_docs/GainCompression.md)
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
- [RcParameterMap](../msg_docs/RcParameterMap.md)
- [DeviceInformation](../msg_docs/DeviceInformation.md)
- [Rpm](../msg_docs/Rpm.md)
- [NeuralControl](../msg_docs/NeuralControl.md)
- [Event](../msg_docs/Event.md)
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
- [PpsCapture](../msg_docs/PpsCapture.md)
- [FollowTarget](../msg_docs/FollowTarget.md)
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
- [CameraTrigger](../msg_docs/CameraTrigger.md)
- [Airspeed](../msg_docs/Airspeed.md)
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
- [ActuatorTest](../msg_docs/ActuatorTest.md)
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
- [LedControl](../msg_docs/LedControl.md)
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
- [MagWorkerData](../msg_docs/MagWorkerData.md)
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
- [DebugVect](../msg_docs/DebugVect.md)
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
- [CellularStatus](../msg_docs/CellularStatus.md)
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
- [QshellRetval](../msg_docs/QshellRetval.md)
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
- [SensorBaro](../msg_docs/SensorBaro.md)
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
- [DatamanResponse](../msg_docs/DatamanResponse.md)
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
- [GpsInjectData](../msg_docs/GpsInjectData.md)
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
- [SensorUwb](../msg_docs/SensorUwb.md)
- [CameraCapture](../msg_docs/CameraCapture.md)
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
- [DatamanRequest](../msg_docs/DatamanRequest.md)
- [GpioIn](../msg_docs/GpioIn.md)
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
- [Mission](../msg_docs/Mission.md)
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
- [DebugArray](../msg_docs/DebugArray.md)
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
- [SensorGyro](../msg_docs/SensorGyro.md)
- [InputRc](../msg_docs/InputRc.md)
- [AirspeedWind](../msg_docs/AirspeedWind.md)
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
- [OrbitStatus](../msg_docs/OrbitStatus.md)
- [Vtx](../msg_docs/Vtx.md)
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
- [MissionResult](../msg_docs/MissionResult.md)
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
- [ActuatorTest](../msg_docs/ActuatorTest.md)
- [IrlockReport](../msg_docs/IrlockReport.md)
- [AdcReport](../msg_docs/AdcReport.md)
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
- [Ping](../msg_docs/Ping.md)
- [LoggerStatus](../msg_docs/LoggerStatus.md)
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
- [Gripper](../msg_docs/Gripper.md)
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
- [RaptorInput](../msg_docs/RaptorInput.md)
- [GpioOut](../msg_docs/GpioOut.md)
- [CameraStatus](../msg_docs/CameraStatus.md)
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
- [LogMessage](../msg_docs/LogMessage.md)
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
- [RaptorStatus](../msg_docs/RaptorStatus.md)
- [SensorCorrection](../msg_docs/SensorCorrection.md)
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
- [OrbTest](../msg_docs/OrbTest.md)
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
- [PowerMonitor](../msg_docs/PowerMonitor.md)
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
- [SensorAirflow](../msg_docs/SensorAirflow.md)
- [TecsStatus](../msg_docs/TecsStatus.md)
- [EstimatorBias](../msg_docs/EstimatorBias.md)
- [SensorMag](../msg_docs/SensorMag.md)
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
- [ActionRequest](../msg_docs/ActionRequest.md)
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
- [MountOrientation](../msg_docs/MountOrientation.md)
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
- [QshellReq](../msg_docs/QshellReq.md)
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
- [EscStatus](../msg_docs/EscStatus.md)
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
- [Cpuload](../msg_docs/Cpuload.md)
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
- [SensorsStatus](../msg_docs/SensorsStatus.md)
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
- [SensorAccel](../msg_docs/SensorAccel.md)
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
- [HomePositionV0](../msg_docs/HomePositionV0.md)
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
- [HealthReport](../msg_docs/HealthReport.md)
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
- [SensorSelection](../msg_docs/SensorSelection.md)
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
- [RtlStatus](../msg_docs/RtlStatus.md)
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
- [BatteryInfo](../msg_docs/BatteryInfo.md)
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
- [AdcReport](../msg_docs/AdcReport.md)
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
- [VehicleImu](../msg_docs/VehicleImu.md)
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
- [HeaterStatus](../msg_docs/HeaterStatus.md)
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
- [TuneControl](../msg_docs/TuneControl.md)
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
- [VehicleAirData](../msg_docs/VehicleAirData.md)
- [RadioStatus](../msg_docs/RadioStatus.md)
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
- [VelocityLimits](../msg_docs/VelocityLimits.md)
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
- [EstimatorStates](../msg_docs/EstimatorStates.md)
- [Ping](../msg_docs/Ping.md)
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
- [GpsDump](../msg_docs/GpsDump.md)
- [SensorTemp](../msg_docs/SensorTemp.md)
- [RcChannels](../msg_docs/RcChannels.md)
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
:::
+57 -47
View File
@@ -12,13 +12,15 @@ These are covered in [Application/Module Template](../modules/module_template.md
다음과 같은 것이 필요합니다.
- [PX4 SITL Simulator](../simulation/index.md) _or_ a [PX4-compatible flight controller](../flight_controller/index.md).
- [Gazebo Simulator](../sim_gazebo_gz/index.md) (or another [PX4 SITL Simulator](../simulation/index.md)) _or_ a [PX4-compatible flight controller](../flight_controller/index.md).
- [PX4 Development Toolchain](../dev_setup/dev_env.md) for the desired target.
- [Download the PX4 Source Code](../dev_setup/building_px4.md#download-the-px4-source-code) from Github
The source code [PX4-Autopilot/src/examples/px4_simple_app](https://github.com/PX4/PX4-Autopilot/tree/main/src/examples/px4_simple_app) directory contains a completed version of this tutorial that you can review if you get stuck.
- Rename (or delete) the **px4_simple_app** directory.
:::tip
Rename (or delete) the **px4_simple_app** directory.
:::
## 간단한 어플리케이션
@@ -34,7 +36,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
```c
/****************************************************************************
*
* Copyright (c) 2012-2022 PX4 Development Team. All rights reserved.
* Copyright (c) 2012-2026 PX4 Development Team. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -67,7 +69,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
```
- 기본 헤더 아래에 다음 코드를 복사합니다.
이것은 기여한 모든 파일에 첨부하여야 합니다.
Similar code should be present in all contributed files!
```c
/**
@@ -150,6 +152,9 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
)
```
Note that in your own modules you'd use the current copyright year!
We're using `2015` here to match the example.
The `px4_add_module()` method builds a static library from a module description.
- The `MODULE` block is the Firmware-unique name of the module (by convention the module name is prefixed by parent directories back to `src`).
@@ -170,7 +175,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
4. Create and open a new _Kconfig_ definition file named **Kconfig** and define your symbol for naming (see [Kconfig naming convention](../hardware/porting_guide_config.md#px4-kconfig-symbol-naming-convention)).
아래 텍스트를 복사하십시오.
```text
```txt
menuconfig EXAMPLES_PX4_SIMPLE_APP
bool "px4_simple_app"
default n
@@ -185,27 +190,34 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
Applications are added to the build/firmware in the appropriate board-level _px4board_ file for your target:
- PX4 SITL (Simulator): [PX4-Autopilot/boards/px4/sitl/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/sitl/default.px4board)
- Pixhawk v1/2: [PX4-Autopilot/boards/px4/fmu-v2/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v2/default.px4board)
- Pixracer (px4/fmu-v4): [PX4-Autopilot/boards/px4/fmu-v4/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v4/default.px4board)
- Pixhawk 6X (px4/fmu-v6x): [PX4-Autopilot/boards/px4/fmu-v6x/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board)
- _px4board_ files for other boards can be found in [PX4-Autopilot/boards/](https://github.com/PX4/PX4-Autopilot/tree/main/boards)
To enable the compilation of the application into the firmware add the corresponding Kconfig key `CONFIG_EXAMPLES_PX4_SIMPLE_APP=y` in the _px4board_ file or run [boardconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup) `make px4_fmu-v4_default boardconfig`:
To enable the compilation of the application into the firmware add the corresponding Kconfig key `CONFIG_EXAMPLES_PX4_SIMPLE_APP=y` in the _px4board_ file or run [boardconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup).
For example, to edit the board config for FMUv6x you would do:
```sh
make fmu-v6x_default boardconfig
```
And then enable the app in the _boardconfig_ UI as shown:
```txt
examples --->
[x] PX4 Simple app ----
```
:::info
The line will already be present for most files, because the examples are included in firmware by default.
Examples are opt-in and not included in firmware by default (although they are in SITL).
You must explicitly enable them as shown above.
:::
보드별 명령어를 사용하여, 예제를 빌드합니다.
- jMAVSim Simulator: `make px4_sitl_default jmavsim`
- Pixhawk v1/2: `make px4_fmu-v2_default` (or just `make px4_fmu-v2`)
- Pixhawk v3: `make px4_fmu-v4_default`
- Other boards: [Building the Code](../dev_setup/building_px4.md#building-for-nuttx)
- Gazebo Simulator: `make px4_sitl gz_x500`
- Pixhawk 6X: `make px4_fmu-v6x_default`
- Other boards: [Building the Code](../dev_setup/building_px4.md)
## 앱 테스트(하드웨어)
@@ -213,8 +225,7 @@ The line will already be present for most files, because the examples are includ
업로더를 활성화한 다음 보드를 재설정합니다.
- Pixhawk v1/2: `make px4_fmu-v2_default upload`
- Pixhawk v3: `make px4_fmu-v4_default upload`
- Pixhawk 6X: `make px4_fmu-v6x_default upload`
보드 재설정전에 컴파일 메시지를 인쇄하고 마지막에 다음을 인쇄합니다.
@@ -299,14 +310,14 @@ The benefits of the PX4 hardware abstraction comes into play here!
센서 드라이버와 어떤 식으로든 상호 작용할 필요가 없으며, 보드 또는 센서가 업데이트된 경우 앱을 업데이트할 필요도 없습니다.
:::
Individual message channels between applications are called [topics](../middleware/uorb.md). For this tutorial, we are interested in the [SensorCombined](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorCombined.msg) topic, which holds the synchronized sensor data of the complete system.
Individual message channels between applications are called [topics](../middleware/uorb.md). For this tutorial, we are interested in the [VehicleAcceleration](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAcceleration.msg) topic, which holds the filtered vehicle acceleration data.
주제 구독은 간단합니다.
```cpp
#include <uORB/topics/sensor_combined.h>
#include <uORB/topics/vehicle_acceleration.h>
..
int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined));
int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration));
```
The `sensor_sub_fd` is a topic handle and can be used to very efficiently perform a blocking wait for new data.
@@ -317,9 +328,9 @@ Adding `poll()` to the subscription looks like (_pseudocode, look for the full i
```cpp
#include <poll.h>
#include <uORB/topics/sensor_combined.h>
#include <uORB/topics/vehicle_acceleration.h>
..
int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined));
int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration));
/* one could wait for multiple topics with this technique, just using one here */
px4_pollfd_struct_t fds[] = {
@@ -327,26 +338,26 @@ px4_pollfd_struct_t fds[] = {
};
while (true) {
/* wait for sensor update of 1 file descriptor for 1000 ms (1 second) */
int poll_ret = px4_poll(fds, 1, 1000);
..
if (fds[0].revents & POLLIN) {
/* obtained data for the first file descriptor */
struct sensor_combined_s raw;
/* copy sensors raw data into local buffer */
orb_copy(ORB_ID(sensor_combined), sensor_sub_fd, &raw);
PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f",
(double)raw.accelerometer_m_s2[0],
(double)raw.accelerometer_m_s2[1],
(double)raw.accelerometer_m_s2[2]);
}
/* wait for sensor update of 1 file descriptor for 1000 ms (1 second) */
int poll_ret = px4_poll(fds, 1, 1000);
..
if (fds[0].revents & POLLIN) {
/* obtained data for the first file descriptor */
struct vehicle_acceleration_s accel;
/* copy sensors raw data into local buffer */
orb_copy(ORB_ID(vehicle_acceleration), sensor_sub_fd, &accel);
PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f",
(double)accel.xyz[0],
(double)accel.xyz[1],
(double)accel.xyz[2]);
}
}
```
아래의 명령어로 앱을 다시 컴파일합니다.
```sh
make
make px4_sitl_default
```
### uORB 구독 테스트
@@ -405,7 +416,7 @@ The [complete example code](https://github.com/PX4/PX4-Autopilot/blob/main/src/e
```c
/****************************************************************************
*
* Copyright (c) 2012-2019 PX4 Development Team. All rights reserved.
* Copyright (c) 2012-2026 PX4 Development Team. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -454,7 +465,7 @@ The [complete example code](https://github.com/PX4/PX4-Autopilot/blob/main/src/e
#include <math.h>
#include <uORB/uORB.h>
#include <uORB/topics/sensor_combined.h>
#include <uORB/topics/vehicle_acceleration.h>
#include <uORB/topics/vehicle_attitude.h>
__EXPORT int px4_simple_app_main(int argc, char *argv[]);
@@ -463,8 +474,8 @@ int px4_simple_app_main(int argc, char *argv[])
{
PX4_INFO("Hello Sky!");
/* subscribe to sensor_combined topic */
int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined));
/* subscribe to vehicle_acceleration topic */
int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration));
/* limit the update rate to 5 Hz */
orb_set_interval(sensor_sub_fd, 200);
@@ -505,20 +516,20 @@ int px4_simple_app_main(int argc, char *argv[])
if (fds[0].revents & POLLIN) {
/* obtained data for the first file descriptor */
struct sensor_combined_s raw;
struct vehicle_acceleration_s accel;
/* copy sensors raw data into local buffer */
orb_copy(ORB_ID(sensor_combined), sensor_sub_fd, &raw);
orb_copy(ORB_ID(vehicle_acceleration), sensor_sub_fd, &accel);
PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f",
(double)raw.accelerometer_m_s2[0],
(double)raw.accelerometer_m_s2[1],
(double)raw.accelerometer_m_s2[2]);
(double)accel.xyz[0],
(double)accel.xyz[1],
(double)accel.xyz[2]);
/* set att and publish this information for other apps
the following does not have any meaning, it's just an example
*/
att.q[0] = raw.accelerometer_m_s2[0];
att.q[1] = raw.accelerometer_m_s2[1];
att.q[2] = raw.accelerometer_m_s2[2];
att.q[0] = accel.xyz[0];
att.q[1] = accel.xyz[1];
att.q[2] = accel.xyz[2];
orb_publish(ORB_ID(vehicle_attitude), att_pub, &att);
}
@@ -530,7 +541,6 @@ int px4_simple_app_main(int argc, char *argv[])
}
PX4_INFO("exiting");
return 0;
}
```
+7 -4
View File
@@ -22,7 +22,8 @@ PX4-Autopilot contains a template for writing a new application (module) that ru
요약
1. Specify the dependency on the work queue library in the cmake definition file ([CMakeLists.txt](https://github.com/PX4/PX4-Autopilot/blob/main/src/examples/work_item/CMakeLists.txt)):
```
```txt
...
DEPENDS
px4_work_queue
@@ -48,9 +49,11 @@ PX4-Autopilot contains a template for writing a new application (module) that ru
4. Implement the `ScheduledWorkItem::Run()` method to perform "work".
5. Implement the `task_spawn` method, specifying that the task is a work queue (using the `task_id_is_work_queue` id.
5. Implement the `task_spawn` method, specifying that the task is a work queue (using the `task_id_is_work_queue` id).
6. Schedule the work queue task using one of the scheduling methods (in the example we use `ScheduleOnInterval` from within the `init` method).
6. Schedule the work queue task using one of the scheduling methods.
In the example, `init()` calls `registerCallback()` on a uORB subscription so that `Run()` is triggered whenever a new `sensor_accel` message is published.
`ScheduleOnInterval` is an alternative for fixed-rate scheduling.
## 작업
@@ -66,6 +69,6 @@ PX4/PX4-Autopilot contains a template for writing a new application (module) tha
[startup script](../concept/system_startup.md).
- 명령줄 인수 구문 분석.
- Documentation: the `PRINT_MODULE_*` methods serve two purposes (the API is
documented [in the source code](https://github.com/PX4/PX4-Autopilot/blob/v1.8.0/src/platforms/px4_module.h#L381)):
documented [in the source code](https://github.com/PX4/PX4-Autopilot/blob/v1.17/platforms/common/include/px4_platform_common/module.h)):
- They are used to print the command-line usage when entering `module help` on the console.
- They are automatically extracted via script to generate the [Modules & Commands Reference](../modules/modules_main.md) page.
+1 -1
View File
@@ -926,7 +926,7 @@ that can be accepted by most ESCs and servos.
It is typically started with:
```
pca9685_pwm_out start -a 0x40 -b 1
pca9685_pwm_out start -X -a 0x40 -b 1
```
### Usage {#pca9685_pwm_out_usage}
+26
View File
@@ -130,6 +130,32 @@ adis16507 <command> [arguments...]
status print status info
```
## adis16607
Source: [drivers/imu/analog_devices/adis16607](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16607)
### Usage {#adis16607_usage}
```
adis16607 <command> [arguments...]
Commands:
start
[-s] Internal SPI bus(es)
[-S] External SPI bus(es)
[-b <val>] board-specific bus (default=all) (external SPI: n-th bus
(default=1))
[-c <val>] chip-select pin (for internal SPI) or index (for external SPI)
[-m <val>] SPI mode
[-f <val>] bus frequency in kHz
[-q] quiet startup (no message if no device found)
[-R <val>] Rotation
default: 0
stop
status print status info
```
## bmi055
Source: [drivers/imu/bosch/bmi055](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi055)
+1 -1
View File
@@ -59,7 +59,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide).
### 시뮬레이션
- TBD
- SIH: Add option to set wind velocity ([PX4-Autopilot#26467](https://github.com/PX4-Autopilot/pull/26467))
<!-- MOVED THIS TO v1.17
+6
View File
@@ -156,6 +156,12 @@ The airplane needs to takeoff in manual mode at full throttle.
Also, if the airplane crashes the state estimator might lose its fix.
:::
## Simulation Configuration
### Wind
SIH supports setting a wind velocity with the PX4 parameters [`SIH_WIND_N`](../advanced_config/parameter_reference.md#SIH_WIND_E) and [`SIH_WIND_E`](../advanced_config/parameter_reference.md#SIH_WIND_E) [m/s]. The parameters can also be changed during flight to simulate changing wind.
## Display/Visualisation (optional)
The SIH-simulated vehicle can be displayed using [jMAVSim](../sim_jmavsim/index.md) as a visualiser.
+2 -1
View File
@@ -86,7 +86,8 @@ vtxtable save
This will create a VTX table with 5 power levels.
```nsh> vtxtable status
```sh
nsh> vtxtable status
INFO [vtxtable] VTX table "Peak THOR T67":
INFO [vtxtable] Power levels:
INFO [vtxtable] 1: 0 = 25
+4
View File
@@ -27,5 +27,9 @@
},
"devDependencies": {
"prettier": "^3.2.0"
},
"resolutions": {
"markdown-it": "^14.1.1",
"esbuild": "^0.25.0"
}
}
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
+1
View File
@@ -779,6 +779,7 @@
- [Streaming Messages](mavlink/streaming_messages.md)
- [Receiving Messages](mavlink/receiving_messages.md)
- [Custom MAVLink Messages](mavlink/custom_messages.md)
- [Message Signing](mavlink/message_signing.md)
- [Protocols/Microservices](mavlink/protocols.md)
- [Standard Modes Protocol](mavlink/standard_modes.md)
- [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/uxrce_dds.md)
+24 -25
View File
@@ -151,36 +151,35 @@ else {
## Коміти та повідомлення комітів
Використовуйте описові повідомлення з кількома абзацами для всіх нетривіальних змін.
Добре структуруйте їх, щоб вони мали сенс у підсумку в один рядок, але також надавали повну деталізацію.
PX4 uses [conventional commits](https://www.conventionalcommits.org/) for all commit messages and PR titles.
```plain
Component: Explain the change in one sentence. Fixes #1234
### Format
Prepend the software component to the start of the summary
line, either by the module name or a description of it.
(e.g. "mc_att_ctrl" or "multicopter attitude controller").
If the issue number is appended as <Fixes #1234>, Github
will automatically close the issue when the commit is
merged to the master branch.
The body of the message can contain several paragraphs.
Describe in detail what you changed. Link issues and flight
logs either related to this fix or to the testing results
of this commit.
Describe the change and why you changed it, avoid to
paraphrase the code change (Good: "Adds an additional
safety check for vehicles with low quality GPS reception".
Bad: "Add gps_reception_check() function").
Reported-by: Name <email@px4.io>
```
type(scope): short description of the change
```
**Use **`git commit -s`** to sign off on all of your commits.** This will add `signed-off-by:` with your name and email as the last line.
Where **type** is the category of change (`feat`, `fix`, `docs`, `refactor`, `perf`, `test`, `build`, `ci`, `style`, `chore`, `revert`) and **scope** is the module or area affected (e.g. `ekf2`, `mavlink`, `navigator`). See the full [types and scopes tables](https://github.com/PX4/PX4-Autopilot/blob/main/CONTRIBUTING.md#commit-message-convention) in CONTRIBUTING.md.
This commit guide is based on best practices for the Linux Kernel and other [projects maintained](https://github.com/torvalds/subsurface-for-dirk/blob/a48494d2fbed58c751e9b7e8fbff88582f9b2d02/README#L88-L115) by Linus Torvalds.
Append `!` before the colon to mark a breaking change: `feat(ekf2)!: remove deprecated API`.
### Приклади
```
feat(ekf2): add height fusion timeout. Fixes #1234
The previous implementation did not handle the case where
height fusion data stops arriving mid-flight. This adds a
configurable timeout that falls back to barometric height.
Tested in SITL with simulated sensor dropout.
Signed-off-by: Your Name <your@email.com>
```
The body of the message can contain several paragraphs. Describe in detail what you changed and why. Link related issues and flight logs. Describe the change and why you made it, rather than paraphrasing the code change.
**Use `git commit -s` to sign off on all of your commits.** This adds `Signed-off-by:` with your name and email as the last line.
## Запити на злиття
+3 -3
View File
@@ -49,15 +49,15 @@
git add <file name>
```
If you prefer having a GUI to add your files see [Gitk](https://git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Graphical-Interfaces) or [`git add -p`](https://nuclearsquid.com/writings/git-add/).
If you prefer having a GUI to add your files see [Gitk](https://git-scm.com/book/en/v2/Git-in-Other-Environments-Graphical-Interfaces) or [`git add -p`](https://nuclearsquid.com/writings/git-add/).
-
```sh
git commit -m "<your commit message>"
git commit -s -m "feat(ekf2): add height fusion timeout"
```
For a good commit message, please refer to the [Source Code Management](../contribute/code.md#commits-and-commit-messages) section.
Use [conventional commits](https://www.conventionalcommits.org/) format: `type(scope): description`. For details on types and scopes, see the [Source Code Management](../contribute/code.md#commits-and-commit-messages) section.
- Some time might have passed and the [upstream main](https://github.com/PX4/PX4-Autopilot) has changed.
PX4 prefers a linear commit history and uses [git rebase](https://git-scm.com/book/en/v2/Git-Branching-Rebasing).
+4 -4
View File
@@ -136,13 +136,13 @@ The following list shows the build commands for the [Pixhawk standard](../flight
- [mRo Pixhawk (FMUv3)](../flight_controller/mro_pixhawk.md): `make px4_fmu-v3_default` (supports 2MB Flash)
- [Holybro pix32 (FMUv2)](../flight_controller/holybro_pix32.md): `make px4_fmu-v2_default`
- [Holybro pix32 (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued
- [Pixfalcon (FMUv2)](../flight_controller/pixfalcon.md): `make px4_fmu-v2_default`
- [Pixfalcon (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued
- [Dropix (FMUv2)](../flight_controller/dropix.md): `make px4_fmu-v2_default`
- [Dropix (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued
- [Pixhawk 1 (FMUv2)](../flight_controller/pixhawk.md): `make px4_fmu-v2_default`
- [Pixhawk 1 (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued
:::warning
You **must** use a supported version of GCC to build this board (e.g. the `gcc-arm-none-eabi` package from the current Ubuntu LTS, which is the same toolchain used by CI) or remove modules from the build.
+1 -1
View File
@@ -71,7 +71,7 @@ PX4 _developers_ need to know the FMU version of their board, as this is require
На дуже високому рівні, основні відмінності полягають у наступному:
- **FMUv2:** Single board with STM32427VI processor ([Pixhawk 1 (Discontinued)](../flight_controller/pixhawk.md), [pix32](../flight_controller/holybro_pix32.md), [Pixfalcon](../flight_controller/pixfalcon.md), [Drotek DroPix](../flight_controller/dropix.md))
- **FMUv2:** Single board with STM32427VI processor (Pixhawk 1 (discontinued), Holybro pix32 (discontinued), Pixfalcon (discontinued), Drotek DroPix (discontinued))
- **FMUv3:** Identical to FMUv2, but usable flash doubled to 2MB ([Hex Cube Black](../flight_controller/pixhawk-2.md),[CUAV Pixhack v3](../flight_controller/pixhack_v3.md),[mRo Pixhawk](../flight_controller/mro_pixhawk.md), [Pixhawk Mini (Discontinued)](../flight_controller/pixhawk_mini.md))
- **FMUv4:** Increased RAM. Швидший процесор. Більше послідовних портів. No IO processor ([Pixracer](../flight_controller/pixracer.md))
- **FMUv4-PRO:** Slightly increased RAM. Більше послідовних портів. IO processor ([Pixhawk 3 Pro](../flight_controller/pixhawk3_pro.md))
+3 -3
View File
@@ -6,7 +6,7 @@ It is small, rugged and just large enough to host a [Pixracer](../flight_control
Основна Інформація:
- **Frame:** Wing Wing Z-84
- **Flight controller:** Pixracer
- **Flight controller:** Pixracer (Discontinued)
![Wing Wing Z-84 build](../../assets/airframes/fw/wing_wing/wing_wing_build11.jpg)
@@ -31,8 +31,8 @@ Any small (>=12A) ESC will do:
- [Pixracer](../flight_controller/pixracer.md) kit (including GPS and power module)
- Приймач FrSky D4R-II або йому еквівалентний (з'єднаний за допомогою перемички з виходом PPM sum відповідно до інструкції)
- [Mini telemetry set](../flight_controller/pixfalcon.md#availability) for Holybro pix32
- [Digital airspeed sensor](../flight_controller/pixfalcon.md#availability) for Holybro pix32 / Pixfalcon
- _Mini telemetry set_ for Holybro pix32
- _Digital airspeed sensor_ for Holybro pix32 / Pixfalcon
- 1800 mAh 2S LiPo Battery - e.g. Team Orion 1800mAh 7.4V 50C 2S1P with XT 60 plug.
### Рекомендовані запасні частини
@@ -3,6 +3,7 @@
:::warning
Discontinued
The Falcon Venturi FPV Wing frame on which this vehicle is based is no longer available.
The Dropix FC used by this vehicle is discontinued.
:::
The _Falcon Vertigo Hybrid VTOL_ is a quadplane VTOL aircraft that has been designed to work with PX4 and the Dropix (Pixhawk compatible) flight controller. Він може нести невелику камеру GoPro.
@@ -13,7 +14,7 @@ The _Falcon Vertigo Hybrid VTOL_ is a quadplane VTOL aircraft that has been desi
Основна Інформація:
- **Frame:** Falcon Vertigo Hybrid VTOL
- **Flight controller:** Dropix
- **Flight controller:** Dropix (Discontineud)
- **Wing span:** 1.3m
![Falcon Vertigo Hybrid VTOL RTF](../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_complete.jpg)
@@ -115,105 +116,101 @@ The _Falcon Vertigo Hybrid VTOL_ is a quadplane VTOL aircraft that has been desi
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_23_dropix_and_other_electronics.jpg" width="500px" title="Falcon Vertigo Electronics" />
:::info
General information about connecting Dropix can be found in [Dropix Flight Controller](../flight_controller/dropix.md).
:::
#### Connect the ESC power connector and pass the signals cables to the flight controller
#### Підключіть роз'єм живлення ESC та прокладіть кабелі сигналів до контролера польоту
1. Підключіть ЕСС до модуля живлення за допомогою роз'єму XT60
1. Connect the ESC to the power module using the XT60 connector
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_25_aileron_esc_connections.jpg" width="500px" title="" />
2. Передайте кабелі сигналів до контролера польоту
2. Pass the signals cables through to the flight controller
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_27_gps_esc_servo_connections.jpg" width="500px" title="GPS, ESC, Servo connections" />
#### Підключення двигуна
#### Motor Wiring
Motor and servo wiring is nearly entirely up to you, but should match the [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) configuration, as shown in the airframe reference.
The geometry and output assignment can be configured in the [Actuators Configuration](../config/actuators.md#actuator-outputs)
Наприклад, ви можете з’єднати його так, як у цьому прикладі (орієнтація як у "сидячи в літаку"):
For example, you might wire it up like this example (orientation as if "sitting in the plane"):
| Порт | Підключення |
| ------ | -------------------------- |
| MAIN 1 | Передній правий мотор, CCW |
| MAIN 2 | Задній лівий мотор, CCW |
| MAIN 3 | Передній лівий мотор, CW |
| MAIN 4 | Задній правий мотор, CW |
| AUX 1 | Лівий елерон |
| AUX 2 | Правий елерон |
| AUX 3 | Elevator |
| AUX 4 | Rudder |
| AUX 5 | Тяга |
| Порт | Підключення |
| ------ | ---------------------- |
| MAIN 1 | Front right motor, CCW |
| MAIN 2 | Back left motor, CCW |
| MAIN 3 | Front left motor, CW |
| MAIN 4 | Back right motor, CW |
| AUX 1 | Left aileron |
| AUX 2 | Right aileron |
| AUX 3 | Elevator |
| AUX 4 | Rudder |
| AUX 5 | Throttle |
<a id="dropix_back"></a>
#### Підключення контролера польоту: Мотори, Сервомеханізми, Приймач RC, датчик струму
#### Flight Controller Connections: Motors, Servos, RC receiver, current sensor
Нижче показане зображення задньої плати керування польотом dropix, підкреслюючи вихідні контакти для підключення кабелів квадрокоптерних моторів, кабелів сигналу елерону, мотору, дросельного мотору, а також контактів поточного сенсора та введення радіоприймача (RC IN).
The image below shows back of the dropix flight controller, highlighting the outputs pins to connect quad motors cables, aileron signal cables, throttle motor, and the current sensor and receiver (RC IN) input pins.
<img id="dropix_outputs" src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_33_dropix_outputs.jpg" width="500px" title="Dropix motor/servo outputs" />
1. Підключіть сигнальні кабелі квадро моторів.
1. Connect quad motors signal cables.
2. Підключіть кабелі елеронів та мотора керування ручкою газу в допоміжні виходи.
2. Connect the aileron cables and throttle motor in the auxiliary outputs.
3. Підключіть кабель сигналу двигуна дроселя від ESC до відповідного допоміжного порту контролера польоту. Підключіть ESC до регулятора газу.
3. Connect the throttle motor signal cable from the ESC to the appropriate flight controller auxiliary port. Connect the ESC to the throttle motor.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_37_connect_throttle_motor.jpg" width="500px" title="Connect throttle motor" />
4. Підключіть приймач (RC IN).
4. Connect the receiver (RC IN).
<a id="dropix_front"></a>
#### Підключення контролера польоту: телеметрія, датчик швидкості повітря, GPS, сигналізація та перемикач безпеки
#### Flight Controller Connections: Telemetry, Airspeed Sensor, GPS, Buzzer and Safety Switch
Датчикові входи, телеметрія, сигналізація та безпечний вимикач розташовані з переднього боку керування польотом, як показано на схемі підключення нижче.
The sensor inputs, telemetry, buzzer and safety switch are located in the front of the flight controller, as shown in the connection diagram below.
<img src="../../assets/flight_controller/dropix/dropix_connectors_front.jpg" width="500px" alt="Dropix connectors front" title="Dropix connectors front" />
1. Підключіть телеметрію, датчик швидкості, GPS, гудок та безпечний перемикач, як показано.
1. Connect the telemetry, airspeed sensor, GPS, buzzer and safety switch as shown.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_39_connect_sensors.jpg" width="500px" title="Connect sensors" />
#### Контролер польоту: Підключіть модуль живлення та зовнішній USB
#### Flight Controller: Connect power module and external USB
Входи для порту USB, модуля живлення та зовнішнього USB розташовані на правому боці контролера польоту.
The inputs for the USB port, power module and external USB are located on the right side of the flight controller.
1. Підключіть живлення та USB, як показано
1. Connect power and USB as shown
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_41_connect_power_module_usb.jpg" width="500px" title="Connect power module and USB" />
:::tip
The external USB is optional.
Він повинен бути використано, якщо доступ до порту USB ускладнений після закріплення контролера польоту.
It should be used if access to the USB port is difficult once the flight controller is mounted.
:::
#### Встановіть пітотрубку (датчик швидкості)
#### Install the pitot tube (airspeed sensor)
Труба пітота встановлена спереду літака й підключена до датчика швидкості через трубу.
The pitot tube is installed on the front of the plane and connected to the airspeed sensor via a tube.
:::warning
It is important that nothing obstructs airflow to the Pitot tube. Це критично для фіксованих крил та для переходу від квадрокоптера до літака.
It is important that nothing obstructs airflow to the Pitot tube. This is critical for fixed-wing flight and for transitioning from quad to plane.
:::
1. Встановіть трубку Піто у передній частині літака
1. Install the Pitot tube in the front of the plane
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_43_airspeed_sensor_mounting.jpg" width="500px" title="Airspeed sensor mounting" />
2. Зафіксуйте з'єднуючі трубки та переконайтеся, що вони не зігнуті / пом'яті.
2. Secure the connecting tubing and ensure that it is not bent/kinked.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_45_airspeed_sensor_tubing.jpg" width="500px" title="Airspeed sensor mounting" />
3. Підключіть трубки до датчика швидкості.
3. Connect the tubes to the airspeed sensor.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_47_connect_airspeed_sensor_tubing.jpg" width="500px" title="Connect airspeed sensor and tubing" />
#### Встановлення/підключення приймача та модуля телеметрії
#### Install/connect receiver and telemetry module
1. Вставте приймач та телеметричний модуль на зовнішню сторону рами транспортного засобу.
1. Paste the receiver and telemetry module to the outside of the vehicle frame.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_49_receiver_mounting.jpg" width="500px" title="Paste receiver" />
@@ -225,27 +222,27 @@ It is important that nothing obstructs airflow to the Pitot tube. Це крит
<a id="compass_gps"></a>
#### Модуль GPS/Компас
#### GPS/Compass module
Модуль GPS/Компас вже встановлено на крило в типовому положенні. Вам не потрібно робити щось додаткове для цього!
The GPS/Compass module is already mounted on the wing, in the default orientation. You don't need to have to do anything extra for this!
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_gps_compass.jpg" width="500px" title="GPS/Compass" />
<a id="flight_controller_orientation"></a>
#### Монтаж та орієнтація політного контролера
#### Mount and orient the flight controller
1. Встановіть орієнтацію вашого політ контролеру на 270 градусів.
1. Set your flight controller orientation to 270 degrees.
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_53_flight_controller_orientation.jpg" width="500px" title="Flight controller orientation" />
2. Закріпіть контролер на місці за допомогою піни для поглинання вібрації.
2. Secure the controller in place using vibration damping foam.
### Крок 4: Перевірка остаточної збірки
### Step 4: Final Assembly Checks
Останнім етапом збирання є перевірка стійкості дрона та правильності налаштування двигунів.
The final assembly step is to check the vehicle is stable and that the motors have been set up correctly.
1. Перевірте, що двигуни обертаються у правильних напрямках (як у діаграмі QuadX нижче).
1. Check that the motors turn in the correct directions (as in the QuadX diagram below).
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_35_quad_motor_directions.png" width="200px" title="Quad motor order/directions" />
@@ -254,12 +251,12 @@ It is important that nothing obstructs airflow to the Pitot tube. Це крит
:::
2. Перевірте, чи транспортний засіб збалансований навколо очікуваного центру мас
- Утримуйте транспортний засіб пальцями у центрі ваги та переконайтеся, що транспортний засіб залишається стабільним.
2. Check the vehicle is balanced around the expected centre of gravity
- Hold the vehicle with your fingers at the center of gravity and check that the vehicle remains stable.
![Level Centre of Gravity](../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_57_level_centre_of_gravity.jpg)
- Якщо транспортний засіб нахиляється вперед або назад, перемістіть двигуни, щоб утримати рівновагу.
- If the vehicle leans forward or backwards, move the motors to balance it.
![Level Motors](../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_55_level_motors.jpg)
@@ -267,7 +264,7 @@ It is important that nothing obstructs airflow to the Pitot tube. Це крит
Perform the normal [Basic Configuration](../config/index.md).
Примітки:
Notes:
1. For [Airframe](../config/airframe.md) select the vehicle group/type as _Standard VTOL_ and the specific vehicle as [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) as shown below.
@@ -277,9 +274,9 @@ Perform the normal [Basic Configuration](../config/index.md).
3. Configure the outputs and geometry following the instructions in [Actuators Configuration](../config/actuators.md)
4. За замовчуванням параметри часто достатні для стабільного польоту. For more detailed tuning information see [Standard VTOL Wiring and Configuration](../config_vtol/vtol_quad_configuration.md).
4. The default parameters are often sufficient for stable flight. For more detailed tuning information see [Standard VTOL Wiring and Configuration](../config_vtol/vtol_quad_configuration.md).
Після завершення калібрування, VTOL готовий до польоту.
After you finish calibration the VTOL is ready to fly.
## Відео
+1
View File
@@ -11,6 +11,7 @@ It also links instructions for how you can add PX4 support for:
- [Streaming MAVLink messages](../mavlink/streaming_messages.md)
- [Handling incoming MAVLink messages (and writing to a uORB topic)](../mavlink/receiving_messages.md)
- [Custom MAVLink Messages](../mavlink/custom_messages.md)
- [Message Signing](../mavlink/message_signing.md)
- [Protocols/Microservices](../mavlink/protocols.md)
:::info
+126
View File
@@ -0,0 +1,126 @@
# MAVLink Message Signing
[MAVLink 2 message signing](https://mavlink.io/en/guide/message_signing.html) allows PX4 to cryptographically verify that incoming MAVLink messages originate from a trusted source (authentication).
:::info
This mechanism does not _encrypt_ the message payload.
:::
## Загальний огляд
When signing is enabled, PX4 appends a 13-byte [signature](https://mavlink.io/en/guide/message_signing.html#signature) to every outgoing MAVLink 2 message.
Incoming messages are checked against the shared secret key, and unsigned or incorrectly signed messages are rejected (with [exceptions for safety-critical messages](#unsigned-message-allowlist)).
The signing implementation is built into the MAVLink module and is always available — no special build flags are required.
It is enabled and disabled at runtime through the [MAV_SIGN_CFG](../advanced_config/parameter_reference.md#MAV_SIGN_CFG) parameter.
## Enable/Disable Signing
The [MAV_SIGN_CFG](../advanced_config/parameter_reference.md#MAV_SIGN_CFG) parameter controls whether signing is active:
| Значення | Режим | Опис |
| -------- | ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| 0 | Disabled (default) | No signing. All messages are accepted regardless of signature. |
| 1 | Non-USB | Signing is enabled on all links **except** USB serial connections. USB links accept unsigned messages. |
| 2 | Always | Signing is enforced on all links, including USB. |
:::warning
Setting `MAV_SIGN_CFG` alone does not enable signing — a secret key must also be present (see [Key Provisioning](#key-provisioning) below).
If no key has been set (or the key is all zeros with a zero timestamp), all messages are accepted regardless of this parameter.
:::
To **disable** signing, set `MAV_SIGN_CFG` to zero.
## Key Provisioning
The signing key is set by sending the MAVLink [SETUP_SIGNING](https://mavlink.io/en/messages/common.html#SETUP_SIGNING) message (ID 256) to PX4.
This message contains:
- A 32-byte secret key
- A 64-bit initial timestamp
:::warning
For security, PX4 only accepts `SETUP_SIGNING` messages received on a **USB** connection.
The message is silently ignored on all other link types (telemetry radios, network, and so on).
This ensures that an attacker cannot remotely change the signing key.
:::
## Key Storage
The secret key and timestamp are stored on the SD card at:
```txt
/mavlink/mavlink-signing-key.bin
```
The file is a 40-byte binary file:
| Offset | Розмір | Content |
| ------ | -------- | -------------------------------------------------------- |
| 0 | 32 bytes | Secret key |
| 32 | 8 bytes | Timestamp (`uint64_t`, little-endian) |
The file is created with mode `0600` (owner read/write only), and the containing `/mavlink/` directory is created with mode `0700` (owner only).
On startup, PX4 reads the key from this file.
If the file exists and contains a non-zero key or timestamp, signing is initialized automatically.
:::info
The timestamp in the file is set when `SETUP_SIGNING` is received.
A graceful shutdown also writes the current timestamp back, but in practice most vehicles are powered off by pulling the battery, so the on-disk timestamp will typically remain at the value from the last key provisioning.
:::
:::info
Storage of the key on the SD card means that signing can be disabled by removing the card.
Note that this requires physical access to the vehicle, and therefore provides the same level of security as allowing signing to be modified via the USB channel.
:::
## How It Works
### Initialization
1. The MAVLink module calls `MavlinkSignControl::start()` during startup.
2. The `/mavlink/` directory is created if it doesn't exist.
3. The `mavlink-signing-key.bin` file is opened (or created empty).
4. If a valid key is found (non-zero key or timestamp), signing is marked as initialized.
5. The `accept_unsigned` callback is registered with the MAVLink library.
### Outgoing Messages
When signing is initialized, the `MAVLINK_SIGNING_FLAG_SIGN_OUTGOING` flag is set, which causes the MAVLink library to automatically append a [SHA-256 based signature](https://mavlink.io/en/guide/message_signing.html#signature) to every outgoing MAVLink 2 message.
### Incoming Messages
For each incoming message, the MAVLink library checks whether a valid signature is present.
If the message is unsigned or has an invalid signature, the library calls the `accept_unsigned` callback, which decides whether to accept or reject the message based on:
1. **Signing not initialized** — If no key has been loaded, all messages are accepted.
2. **Allowlisted message** — Certain [safety-critical messages](#unsigned-message-allowlist) are always accepted.
3. **Sign mode** — The `MAV_SIGN_CFG` parameter determines behavior:
- Mode 0 (disabled): All unsigned messages are accepted.
- Mode 1 (non-USB): Unsigned messages are accepted only on USB links.
- Mode 2 (always): Unsigned messages are rejected on all links.
## Unsigned Message Allowlist
The following messages are **always** accepted unsigned, regardless of the signing mode.
These are safety-critical messages that may originate from systems that don't support signing:
| Повідомлення | ID | Reason |
| -------------------------------------------------------------------------------------------- | --- | -------------------------------------------------------- |
| [RADIO_STATUS](https://mavlink.io/en/messages/common.html#RADIO_STATUS) | 109 | Radio link status from SiK radios and other radio modems |
| [ADSB_VEHICLE](https://mavlink.io/en/messages/common.html#ADSB_VEHICLE) | 246 | ADS-B traffic information for collision avoidance |
| [COLLISION](https://mavlink.io/en/messages/common.html#COLLISION) | 247 | Collision threat warnings |
## Security Considerations
- **Physical access required for key setup**: The `SETUP_SIGNING` message is only accepted over USB, so an attacker must have physical access to the vehicle to provision or change the key.
- **Key not exposed via parameters**: The secret key is stored in a separate file on the SD card, not as a MAVLink parameter, so it cannot be read back through the parameter protocol.
- **SD card access**: Anyone with physical access to the SD card can read or modify the `mavlink-signing-key.bin` file, or just remove the card.
Ensure physical security of the vehicle if signing is used as a security control.
- **Replay protection**: The MAVLink signing protocol includes a timestamp that prevents replay attacks.
The on-disk timestamp is updated when a new key is provisioned via `SETUP_SIGNING`.
A graceful shutdown also persists the current timestamp, but since most vehicles are powered off by pulling the battery, the timestamp will typically reset to the value from the last key provisioning on reboot.
- **No encryption**: Message signing provides authentication and integrity, but messages are still sent in plaintext.
An eavesdropper can read message contents but cannot forge or modify them without the key.
+1
View File
@@ -30,6 +30,7 @@ These services are known to be supported in some form:
- [Landing Target Protocol](https://mavlink.io/en/services/landing_target.html)
- [Manual Control (Joystick) Protocol](https://mavlink.io/en/services/manual_control.html)
- [MAVLink Id Assignment (sysid, compid)](https://mavlink.io/en/services/mavlink_id_assignment.html)
- [Message Signing](../mavlink/message_signing.md) ([MAVLink spec](https://mavlink.io/en/guide/message_signing.html))
- [Mission Protocol](https://mavlink.io/en/services/mission.html)
- [Offboard Control Protocol](https://mavlink.io/en/services/offboard_control.html)
- [Remote ID](../peripherals/remote_id.md) ([Open Drone ID Protocol](https://mavlink.io/en/services/opendroneid.html))
+183 -183
View File
@@ -96,203 +96,203 @@ They are not build into the module, and hence are neither published or subscribe
:::details
See messages
- [GpioConfig](../msg_docs/GpioConfig.md)
- [MavlinkLog](../msg_docs/MavlinkLog.md)
- [Event](../msg_docs/Event.md)
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
- [MagWorkerData](../msg_docs/MagWorkerData.md)
- [OrbTest](../msg_docs/OrbTest.md)
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
- [EventV0](../msg_docs/EventV0.md)
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
- [EstimatorBias](../msg_docs/EstimatorBias.md)
- [QshellRetval](../msg_docs/QshellRetval.md)
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
- [GpioIn](../msg_docs/GpioIn.md)
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
- [Airspeed](../msg_docs/Airspeed.md)
- [SensorMag](../msg_docs/SensorMag.md)
- [QshellReq](../msg_docs/QshellReq.md)
- [RcChannels](../msg_docs/RcChannels.md)
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
- [TecsStatus](../msg_docs/TecsStatus.md)
- [CameraStatus](../msg_docs/CameraStatus.md)
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
- [DatamanRequest](../msg_docs/DatamanRequest.md)
- [SensorAccel](../msg_docs/SensorAccel.md)
- [HomePositionV0](../msg_docs/HomePositionV0.md)
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
- [OrbitStatus](../msg_docs/OrbitStatus.md)
- [RcParameterMap](../msg_docs/RcParameterMap.md)
- [PowerButtonState](../msg_docs/PowerButtonState.md)
- [GpioRequest](../msg_docs/GpioRequest.md)
- [VehicleRoi](../msg_docs/VehicleRoi.md)
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
- [EscStatus](../msg_docs/EscStatus.md)
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
- [GpioOut](../msg_docs/GpioOut.md)
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
- [ActionRequest](../msg_docs/ActionRequest.md)
- [GimbalControls](../msg_docs/GimbalControls.md)
- [MountOrientation](../msg_docs/MountOrientation.md)
- [LedControl](../msg_docs/LedControl.md)
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
- [VehicleAirData](../msg_docs/VehicleAirData.md)
- [BatteryInfo](../msg_docs/BatteryInfo.md)
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
- [RaptorInput](../msg_docs/RaptorInput.md)
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
- [VehicleImu](../msg_docs/VehicleImu.md)
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
- [SensorUwb](../msg_docs/SensorUwb.md)
- [LogMessage](../msg_docs/LogMessage.md)
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
- [SensorTemp](../msg_docs/SensorTemp.md)
- [SensorGyro](../msg_docs/SensorGyro.md)
- [PowerMonitor](../msg_docs/PowerMonitor.md)
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
- [HeaterStatus](../msg_docs/HeaterStatus.md)
- [SensorAirflow](../msg_docs/SensorAirflow.md)
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
- [LoggerStatus](../msg_docs/LoggerStatus.md)
- [TuneControl](../msg_docs/TuneControl.md)
- [GpsDump](../msg_docs/GpsDump.md)
- [WheelEncoders](../msg_docs/WheelEncoders.md)
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
- [HealthReport](../msg_docs/HealthReport.md)
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
- [GpsInjectData](../msg_docs/GpsInjectData.md)
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
- [EscReport](../msg_docs/EscReport.md)
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
- [SensorCorrection](../msg_docs/SensorCorrection.md)
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
- [EstimatorStates](../msg_docs/EstimatorStates.md)
- [CameraCapture](../msg_docs/CameraCapture.md)
- [RadioStatus](../msg_docs/RadioStatus.md)
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
- [SensorsStatus](../msg_docs/SensorsStatus.md)
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
- [NeuralControl](../msg_docs/NeuralControl.md)
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
- [GeofenceResult](../msg_docs/GeofenceResult.md)
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
- [GimbalControls](../msg_docs/GimbalControls.md)
- [SystemPower](../msg_docs/SystemPower.md)
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
- [CameraTrigger](../msg_docs/CameraTrigger.md)
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
- [EscReport](../msg_docs/EscReport.md)
- [IrlockReport](../msg_docs/IrlockReport.md)
- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
- [VelocityLimits](../msg_docs/VelocityLimits.md)
- [Gripper](../msg_docs/Gripper.md)
- [Mission](../msg_docs/Mission.md)
- [RtlStatus](../msg_docs/RtlStatus.md)
- [GainCompression](../msg_docs/GainCompression.md)
- [DatamanResponse](../msg_docs/DatamanResponse.md)
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
- [DeviceInformation](../msg_docs/DeviceInformation.md)
- [UlogStream](../msg_docs/UlogStream.md)
- [SensorSelection](../msg_docs/SensorSelection.md)
- [DebugVect](../msg_docs/DebugVect.md)
- [PpsCapture](../msg_docs/PpsCapture.md)
- [GpioConfig](../msg_docs/GpioConfig.md)
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
- [GpioRequest](../msg_docs/GpioRequest.md)
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
- [MissionResult](../msg_docs/MissionResult.md)
- [GeofenceResult](../msg_docs/GeofenceResult.md)
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
- [FollowTarget](../msg_docs/FollowTarget.md)
- [DebugArray](../msg_docs/DebugArray.md)
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
- [MavlinkLog](../msg_docs/MavlinkLog.md)
- [DebugValue](../msg_docs/DebugValue.md)
- [Rpm](../msg_docs/Rpm.md)
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
- [CellularStatus](../msg_docs/CellularStatus.md)
- [ButtonEvent](../msg_docs/ButtonEvent.md)
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
- [PwmInput](../msg_docs/PwmInput.md)
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
- [RaptorStatus](../msg_docs/RaptorStatus.md)
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
- [PowerButtonState](../msg_docs/PowerButtonState.md)
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
- [VehicleRoi](../msg_docs/VehicleRoi.md)
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
- [WheelEncoders](../msg_docs/WheelEncoders.md)
- [UlogStream](../msg_docs/UlogStream.md)
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
- [ButtonEvent](../msg_docs/ButtonEvent.md)
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
- [GainCompression](../msg_docs/GainCompression.md)
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
- [RcParameterMap](../msg_docs/RcParameterMap.md)
- [DeviceInformation](../msg_docs/DeviceInformation.md)
- [Rpm](../msg_docs/Rpm.md)
- [NeuralControl](../msg_docs/NeuralControl.md)
- [Event](../msg_docs/Event.md)
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
- [PpsCapture](../msg_docs/PpsCapture.md)
- [FollowTarget](../msg_docs/FollowTarget.md)
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
- [CameraTrigger](../msg_docs/CameraTrigger.md)
- [Airspeed](../msg_docs/Airspeed.md)
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
- [ActuatorTest](../msg_docs/ActuatorTest.md)
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
- [LedControl](../msg_docs/LedControl.md)
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
- [MagWorkerData](../msg_docs/MagWorkerData.md)
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
- [DebugVect](../msg_docs/DebugVect.md)
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
- [CellularStatus](../msg_docs/CellularStatus.md)
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
- [QshellRetval](../msg_docs/QshellRetval.md)
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
- [SensorBaro](../msg_docs/SensorBaro.md)
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
- [DatamanResponse](../msg_docs/DatamanResponse.md)
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
- [GpsInjectData](../msg_docs/GpsInjectData.md)
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
- [SensorUwb](../msg_docs/SensorUwb.md)
- [CameraCapture](../msg_docs/CameraCapture.md)
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
- [DatamanRequest](../msg_docs/DatamanRequest.md)
- [GpioIn](../msg_docs/GpioIn.md)
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
- [Mission](../msg_docs/Mission.md)
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
- [DebugArray](../msg_docs/DebugArray.md)
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
- [SensorGyro](../msg_docs/SensorGyro.md)
- [InputRc](../msg_docs/InputRc.md)
- [AirspeedWind](../msg_docs/AirspeedWind.md)
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
- [OrbitStatus](../msg_docs/OrbitStatus.md)
- [Vtx](../msg_docs/Vtx.md)
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
- [MissionResult](../msg_docs/MissionResult.md)
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
- [ActuatorTest](../msg_docs/ActuatorTest.md)
- [IrlockReport](../msg_docs/IrlockReport.md)
- [AdcReport](../msg_docs/AdcReport.md)
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
- [Ping](../msg_docs/Ping.md)
- [LoggerStatus](../msg_docs/LoggerStatus.md)
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
- [Gripper](../msg_docs/Gripper.md)
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
- [RaptorInput](../msg_docs/RaptorInput.md)
- [GpioOut](../msg_docs/GpioOut.md)
- [CameraStatus](../msg_docs/CameraStatus.md)
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
- [LogMessage](../msg_docs/LogMessage.md)
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
- [RaptorStatus](../msg_docs/RaptorStatus.md)
- [SensorCorrection](../msg_docs/SensorCorrection.md)
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
- [OrbTest](../msg_docs/OrbTest.md)
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
- [PowerMonitor](../msg_docs/PowerMonitor.md)
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
- [SensorAirflow](../msg_docs/SensorAirflow.md)
- [TecsStatus](../msg_docs/TecsStatus.md)
- [EstimatorBias](../msg_docs/EstimatorBias.md)
- [SensorMag](../msg_docs/SensorMag.md)
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
- [ActionRequest](../msg_docs/ActionRequest.md)
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
- [MountOrientation](../msg_docs/MountOrientation.md)
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
- [QshellReq](../msg_docs/QshellReq.md)
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
- [EscStatus](../msg_docs/EscStatus.md)
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
- [Cpuload](../msg_docs/Cpuload.md)
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
- [SensorsStatus](../msg_docs/SensorsStatus.md)
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
- [SensorAccel](../msg_docs/SensorAccel.md)
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
- [HomePositionV0](../msg_docs/HomePositionV0.md)
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
- [HealthReport](../msg_docs/HealthReport.md)
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
- [SensorSelection](../msg_docs/SensorSelection.md)
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
- [RtlStatus](../msg_docs/RtlStatus.md)
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
- [BatteryInfo](../msg_docs/BatteryInfo.md)
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
- [AdcReport](../msg_docs/AdcReport.md)
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
- [VehicleImu](../msg_docs/VehicleImu.md)
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
- [HeaterStatus](../msg_docs/HeaterStatus.md)
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
- [TuneControl](../msg_docs/TuneControl.md)
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
- [VehicleAirData](../msg_docs/VehicleAirData.md)
- [RadioStatus](../msg_docs/RadioStatus.md)
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
- [VelocityLimits](../msg_docs/VelocityLimits.md)
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
- [EstimatorStates](../msg_docs/EstimatorStates.md)
- [Ping](../msg_docs/Ping.md)
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
- [GpsDump](../msg_docs/GpsDump.md)
- [SensorTemp](../msg_docs/SensorTemp.md)
- [RcChannels](../msg_docs/RcChannels.md)
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
:::
+57 -47
View File
@@ -12,13 +12,15 @@ These are covered in [Application/Module Template](../modules/module_template.md
Вам знадобиться наступне:
- [PX4 SITL Simulator](../simulation/index.md) _or_ a [PX4-compatible flight controller](../flight_controller/index.md).
- [Gazebo Simulator](../sim_gazebo_gz/index.md) (or another [PX4 SITL Simulator](../simulation/index.md)) _or_ a [PX4-compatible flight controller](../flight_controller/index.md).
- [PX4 Development Toolchain](../dev_setup/dev_env.md) for the desired target.
- [Download the PX4 Source Code](../dev_setup/building_px4.md#download-the-px4-source-code) from Github
The source code [PX4-Autopilot/src/examples/px4_simple_app](https://github.com/PX4/PX4-Autopilot/tree/main/src/examples/px4_simple_app) directory contains a completed version of this tutorial that you can review if you get stuck.
- Rename (or delete) the **px4_simple_app** directory.
:::tip
Rename (or delete) the **px4_simple_app** directory.
:::
## Мінімальна програма
@@ -34,7 +36,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
```c
/****************************************************************************
*
* Copyright (c) 2012-2022 PX4 Development Team. All rights reserved.
* Copyright (c) 2012-2026 PX4 Development Team. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -67,7 +69,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
```
- Скопіюйте наступний код під заголовком за замовчуванням.
Це повинно бути присутнім у всіх розміщених файлах!
Similar code should be present in all contributed files!
```c
/**
@@ -150,6 +152,9 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
)
```
Note that in your own modules you'd use the current copyright year!
We're using `2015` here to match the example.
The `px4_add_module()` method builds a static library from a module description.
- The `MODULE` block is the Firmware-unique name of the module (by convention the module name is prefixed by parent directories back to `src`).
@@ -170,7 +175,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
4. Create and open a new _Kconfig_ definition file named **Kconfig** and define your symbol for naming (see [Kconfig naming convention](../hardware/porting_guide_config.md#px4-kconfig-symbol-naming-convention)).
Скопіюйте текст нижче:
```text
```txt
menuconfig EXAMPLES_PX4_SIMPLE_APP
bool "px4_simple_app"
default n
@@ -185,27 +190,34 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
Applications are added to the build/firmware in the appropriate board-level _px4board_ file for your target:
- PX4 SITL (Simulator): [PX4-Autopilot/boards/px4/sitl/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/sitl/default.px4board)
- Pixhawk v1/2: [PX4-Autopilot/boards/px4/fmu-v2/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v2/default.px4board)
- Pixracer (px4/fmu-v4): [PX4-Autopilot/boards/px4/fmu-v4/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v4/default.px4board)
- Pixhawk 6X (px4/fmu-v6x): [PX4-Autopilot/boards/px4/fmu-v6x/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board)
- _px4board_ files for other boards can be found in [PX4-Autopilot/boards/](https://github.com/PX4/PX4-Autopilot/tree/main/boards)
To enable the compilation of the application into the firmware add the corresponding Kconfig key `CONFIG_EXAMPLES_PX4_SIMPLE_APP=y` in the _px4board_ file or run [boardconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup) `make px4_fmu-v4_default boardconfig`:
To enable the compilation of the application into the firmware add the corresponding Kconfig key `CONFIG_EXAMPLES_PX4_SIMPLE_APP=y` in the _px4board_ file or run [boardconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup).
For example, to edit the board config for FMUv6x you would do:
```sh
make fmu-v6x_default boardconfig
```
And then enable the app in the _boardconfig_ UI as shown:
```txt
examples --->
[x] PX4 Simple app ----
```
:::info
The line will already be present for most files, because the examples are included in firmware by default.
Examples are opt-in and not included in firmware by default (although they are in SITL).
You must explicitly enable them as shown above.
:::
Побудуйте приклад, використовуючи команду для конкретної плати:
- jMAVSim Simulator: `make px4_sitl_default jmavsim`
- Pixhawk v1/2: `make px4_fmu-v2_default` (or just `make px4_fmu-v2`)
- Pixhawk v3: `make px4_fmu-v4_default`
- Other boards: [Building the Code](../dev_setup/building_px4.md#building-for-nuttx)
- Gazebo Simulator: `make px4_sitl gz_x500`
- Pixhawk 6X: `make px4_fmu-v6x_default`
- Other boards: [Building the Code](../dev_setup/building_px4.md)
## Тестовий додаток (апаратне забезпечення)
@@ -213,8 +225,7 @@ The line will already be present for most files, because the examples are includ
Увімкніть завантажувач, а потім скиньте плату:
- Pixhawk v1/2: `make px4_fmu-v2_default upload`
- Pixhawk v3: `make px4_fmu-v4_default upload`
- Pixhawk 6X: `make px4_fmu-v6x_default upload`
Перед скиданням дошки повинно бути надруковано певну кількість компілювальних повідомлень та в кінці:
@@ -299,14 +310,14 @@ The benefits of the PX4 hardware abstraction comes into play here!
Немає потреби взаємодіяти з драйверами сенсорів та оновлювати додаток, якщо плата або сенсори оновлені.
:::
Individual message channels between applications are called [topics](../middleware/uorb.md). For this tutorial, we are interested in the [SensorCombined](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorCombined.msg) topic, which holds the synchronized sensor data of the complete system.
Individual message channels between applications are called [topics](../middleware/uorb.md). For this tutorial, we are interested in the [VehicleAcceleration](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAcceleration.msg) topic, which holds the filtered vehicle acceleration data.
Підписка на тему проста:
```cpp
#include <uORB/topics/sensor_combined.h>
#include <uORB/topics/vehicle_acceleration.h>
..
int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined));
int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration));
```
The `sensor_sub_fd` is a topic handle and can be used to very efficiently perform a blocking wait for new data.
@@ -317,9 +328,9 @@ Adding `poll()` to the subscription looks like (_pseudocode, look for the full i
```cpp
#include <poll.h>
#include <uORB/topics/sensor_combined.h>
#include <uORB/topics/vehicle_acceleration.h>
..
int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined));
int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration));
/* one could wait for multiple topics with this technique, just using one here */
px4_pollfd_struct_t fds[] = {
@@ -327,26 +338,26 @@ px4_pollfd_struct_t fds[] = {
};
while (true) {
/* wait for sensor update of 1 file descriptor for 1000 ms (1 second) */
int poll_ret = px4_poll(fds, 1, 1000);
..
if (fds[0].revents & POLLIN) {
/* obtained data for the first file descriptor */
struct sensor_combined_s raw;
/* copy sensors raw data into local buffer */
orb_copy(ORB_ID(sensor_combined), sensor_sub_fd, &raw);
PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f",
(double)raw.accelerometer_m_s2[0],
(double)raw.accelerometer_m_s2[1],
(double)raw.accelerometer_m_s2[2]);
}
/* wait for sensor update of 1 file descriptor for 1000 ms (1 second) */
int poll_ret = px4_poll(fds, 1, 1000);
..
if (fds[0].revents & POLLIN) {
/* obtained data for the first file descriptor */
struct vehicle_acceleration_s accel;
/* copy sensors raw data into local buffer */
orb_copy(ORB_ID(vehicle_acceleration), sensor_sub_fd, &accel);
PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f",
(double)accel.xyz[0],
(double)accel.xyz[1],
(double)accel.xyz[2]);
}
}
```
Знову скомпілюйте додаток, введіть:
```sh
make
make px4_sitl_default
```
### Тестування підписки на uORB
@@ -405,7 +416,7 @@ The [complete example code](https://github.com/PX4/PX4-Autopilot/blob/main/src/e
```c
/****************************************************************************
*
* Copyright (c) 2012-2019 PX4 Development Team. All rights reserved.
* Copyright (c) 2012-2026 PX4 Development Team. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -454,7 +465,7 @@ The [complete example code](https://github.com/PX4/PX4-Autopilot/blob/main/src/e
#include <math.h>
#include <uORB/uORB.h>
#include <uORB/topics/sensor_combined.h>
#include <uORB/topics/vehicle_acceleration.h>
#include <uORB/topics/vehicle_attitude.h>
__EXPORT int px4_simple_app_main(int argc, char *argv[]);
@@ -463,8 +474,8 @@ int px4_simple_app_main(int argc, char *argv[])
{
PX4_INFO("Hello Sky!");
/* subscribe to sensor_combined topic */
int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined));
/* subscribe to vehicle_acceleration topic */
int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration));
/* limit the update rate to 5 Hz */
orb_set_interval(sensor_sub_fd, 200);
@@ -505,20 +516,20 @@ int px4_simple_app_main(int argc, char *argv[])
if (fds[0].revents & POLLIN) {
/* obtained data for the first file descriptor */
struct sensor_combined_s raw;
struct vehicle_acceleration_s accel;
/* copy sensors raw data into local buffer */
orb_copy(ORB_ID(sensor_combined), sensor_sub_fd, &raw);
orb_copy(ORB_ID(vehicle_acceleration), sensor_sub_fd, &accel);
PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f",
(double)raw.accelerometer_m_s2[0],
(double)raw.accelerometer_m_s2[1],
(double)raw.accelerometer_m_s2[2]);
(double)accel.xyz[0],
(double)accel.xyz[1],
(double)accel.xyz[2]);
/* set att and publish this information for other apps
the following does not have any meaning, it's just an example
*/
att.q[0] = raw.accelerometer_m_s2[0];
att.q[1] = raw.accelerometer_m_s2[1];
att.q[2] = raw.accelerometer_m_s2[2];
att.q[0] = accel.xyz[0];
att.q[1] = accel.xyz[1];
att.q[2] = accel.xyz[2];
orb_publish(ORB_ID(vehicle_attitude), att_pub, &att);
}
@@ -530,7 +541,6 @@ int px4_simple_app_main(int argc, char *argv[])
}
PX4_INFO("exiting");
return 0;
}
```
+7 -4
View File
@@ -22,7 +22,8 @@ PX4-Autopilot contains a template for writing a new application (module) that ru
Підсумовуючи:
1. Specify the dependency on the work queue library in the cmake definition file ([CMakeLists.txt](https://github.com/PX4/PX4-Autopilot/blob/main/src/examples/work_item/CMakeLists.txt)):
```
```txt
...
DEPENDS
px4_work_queue
@@ -48,9 +49,11 @@ PX4-Autopilot contains a template for writing a new application (module) that ru
4. Implement the `ScheduledWorkItem::Run()` method to perform "work".
5. Implement the `task_spawn` method, specifying that the task is a work queue (using the `task_id_is_work_queue` id.
5. Implement the `task_spawn` method, specifying that the task is a work queue (using the `task_id_is_work_queue` id).
6. Schedule the work queue task using one of the scheduling methods (in the example we use `ScheduleOnInterval` from within the `init` method).
6. Schedule the work queue task using one of the scheduling methods.
In the example, `init()` calls `registerCallback()` on a uORB subscription so that `Run()` is triggered whenever a new `sensor_accel` message is published.
`ScheduleOnInterval` is an alternative for fixed-rate scheduling.
## Задачі
@@ -66,6 +69,6 @@ PX4/PX4-Autopilot contains a template for writing a new application (module) tha
[startup script](../concept/system_startup.md).
- Парсинг аргументів командного рядка.
- Documentation: the `PRINT_MODULE_*` methods serve two purposes (the API is
documented [in the source code](https://github.com/PX4/PX4-Autopilot/blob/v1.8.0/src/platforms/px4_module.h#L381)):
documented [in the source code](https://github.com/PX4/PX4-Autopilot/blob/v1.17/platforms/common/include/px4_platform_common/module.h)):
- They are used to print the command-line usage when entering `module help` on the console.
- They are automatically extracted via script to generate the [Modules & Commands Reference](../modules/modules_main.md) page.
+1 -1
View File
@@ -926,7 +926,7 @@ that can be accepted by most ESCs and servos.
It is typically started with:
```
pca9685_pwm_out start -a 0x40 -b 1
pca9685_pwm_out start -X -a 0x40 -b 1
```
### Usage {#pca9685_pwm_out_usage}
+26
View File
@@ -130,6 +130,32 @@ adis16507 <command> [arguments...]
status print status info
```
## adis16607
Source: [drivers/imu/analog_devices/adis16607](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16607)
### Usage {#adis16607_usage}
```
adis16607 <command> [arguments...]
Commands:
start
[-s] Internal SPI bus(es)
[-S] External SPI bus(es)
[-b <val>] board-specific bus (default=all) (external SPI: n-th bus
(default=1))
[-c <val>] chip-select pin (for internal SPI) or index (for external SPI)
[-m <val>] SPI mode
[-f <val>] bus frequency in kHz
[-q] quiet startup (no message if no device found)
[-R <val>] Rotation
default: 0
stop
status print status info
```
## bmi055
Source: [drivers/imu/bosch/bmi055](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi055)
+1 -1
View File
@@ -59,7 +59,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide).
### Симуляція
- Уточнюється
- SIH: Add option to set wind velocity ([PX4-Autopilot#26467](https://github.com/PX4-Autopilot/pull/26467))
<!-- MOVED THIS TO v1.17
+6
View File
@@ -156,6 +156,12 @@ The airplane needs to takeoff in manual mode at full throttle.
Крім того, якщо літак розбився, оцінювач стану може втратити своє виправлення.
:::
## Simulation Configuration
### Wind
SIH supports setting a wind velocity with the PX4 parameters [`SIH_WIND_N`](../advanced_config/parameter_reference.md#SIH_WIND_E) and [`SIH_WIND_E`](../advanced_config/parameter_reference.md#SIH_WIND_E) [m/s]. The parameters can also be changed during flight to simulate changing wind.
## Display/Visualisation (optional)
The SIH-simulated vehicle can be displayed using [jMAVSim](../sim_jmavsim/index.md) as a visualiser.
+2 -1
View File
@@ -86,7 +86,8 @@ vtxtable save
This will create a VTX table with 5 power levels.
```nsh> vtxtable status
```sh
nsh> vtxtable status
INFO [vtxtable] VTX table "Peak THOR T67":
INFO [vtxtable] Power levels:
INFO [vtxtable] 1: 0 = 25
+487 -445
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -779,6 +779,7 @@
- [Streaming Messages](mavlink/streaming_messages.md)
- [Receiving Messages](mavlink/receiving_messages.md)
- [Custom MAVLink Messages](mavlink/custom_messages.md)
- [Message Signing](mavlink/message_signing.md)
- [Protocols/Microservices](mavlink/protocols.md)
- [Standard Modes Protocol](mavlink/standard_modes.md)
- [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/uxrce_dds.md)
+24 -25
View File
@@ -151,36 +151,35 @@ else {
## Commits and Commit Messages
Use descriptive, multi-paragraph commit messages for all non-trivial changes.
Structure them well so they make sense in the one-line summary but also provide full detail.
PX4 uses [conventional commits](https://www.conventionalcommits.org/) for all commit messages and PR titles.
```plain
Component: Explain the change in one sentence. Fixes #1234
### Format
Prepend the software component to the start of the summary
line, either by the module name or a description of it.
(e.g. "mc_att_ctrl" or "multicopter attitude controller").
If the issue number is appended as <Fixes #1234>, Github
will automatically close the issue when the commit is
merged to the master branch.
The body of the message can contain several paragraphs.
Describe in detail what you changed. Link issues and flight
logs either related to this fix or to the testing results
of this commit.
Describe the change and why you changed it, avoid to
paraphrase the code change (Good: "Adds an additional
safety check for vehicles with low quality GPS reception".
Bad: "Add gps_reception_check() function").
Reported-by: Name <email@px4.io>
```
type(scope): short description of the change
```
**Use **`git commit -s`** to sign off on all of your commits.** This will add `signed-off-by:` with your name and email as the last line.
Where **type** is the category of change (`feat`, `fix`, `docs`, `refactor`, `perf`, `test`, `build`, `ci`, `style`, `chore`, `revert`) and **scope** is the module or area affected (e.g. `ekf2`, `mavlink`, `navigator`). See the full [types and scopes tables](https://github.com/PX4/PX4-Autopilot/blob/main/CONTRIBUTING.md#commit-message-convention) in CONTRIBUTING.md.
This commit guide is based on best practices for the Linux Kernel and other [projects maintained](https://github.com/torvalds/subsurface-for-dirk/blob/a48494d2fbed58c751e9b7e8fbff88582f9b2d02/README#L88-L115) by Linus Torvalds.
Append `!` before the colon to mark a breaking change: `feat(ekf2)!: remove deprecated API`.
### 示例
```
feat(ekf2): add height fusion timeout. Fixes #1234
The previous implementation did not handle the case where
height fusion data stops arriving mid-flight. This adds a
configurable timeout that falls back to barometric height.
Tested in SITL with simulated sensor dropout.
Signed-off-by: Your Name <your@email.com>
```
The body of the message can contain several paragraphs. Describe in detail what you changed and why. Link related issues and flight logs. Describe the change and why you made it, rather than paraphrasing the code change.
**Use `git commit -s` to sign off on all of your commits.** This adds `Signed-off-by:` with your name and email as the last line.
## Pull Requests
+3 -3
View File
@@ -49,15 +49,15 @@ Adding a feature to PX4 follows a defined workflow. In order to share your contr
git add <file name>
```
If you prefer having a GUI to add your files see [Gitk](https://git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Graphical-Interfaces) or [`git add -p`](https://nuclearsquid.com/writings/git-add/).
If you prefer having a GUI to add your files see [Gitk](https://git-scm.com/book/en/v2/Git-in-Other-Environments-Graphical-Interfaces) or [`git add -p`](https://nuclearsquid.com/writings/git-add/).
- 提交添加的文件, 并顺便记录一条有意义的消息, 解释您的更改
```sh
git commit -m "<your commit message>"
git commit -s -m "feat(ekf2): add height fusion timeout"
```
For a good commit message, please refer to the [Source Code Management](../contribute/code.md#commits-and-commit-messages) section.
Use [conventional commits](https://www.conventionalcommits.org/) format: `type(scope): description`. For details on types and scopes, see the [Source Code Management](../contribute/code.md#commits-and-commit-messages) section.
- Some time might have passed and the [upstream main](https://github.com/PX4/PX4-Autopilot) has changed.
PX4 prefers a linear commit history and uses [git rebase](https://git-scm.com/book/en/v2/Git-Branching-Rebasing).
+4 -4
View File
@@ -136,13 +136,13 @@ From the PX4-Autopilot directory:
- [mRo Pixhawk (FMUv3)](../flight_controller/mro_pixhawk.md): `make px4_fmu-v3_default` (支持 2MB Flash)
- [Holybro pix32 (FMUv2)](../flight_controller/holybro_pix32.md): `make px4_fmu-v2_default`
- [Holybro pix32 (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued
- [Pixfalcon (FMUv2)](../flight_controller/pixfalcon.md): `make px4_fmu-v2_default`
- [Pixfalcon (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued
- [Dropix (FMUv2)](../flight_controller/dropix.md): `make px4_fmu-v2_default`
- [Dropix (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued
- [Pixhawk 1 (FMUv2)](../flight_controller/pixhawk.md): `make px4_fmu-v2_default`
- [Pixhawk 1 (FMUv2)](../flight_controller/autopilot_discontinued.md): `make px4_fmu-v2_default` - Discontinued
:::warning
You **must** use a supported version of GCC to build this board (e.g. the `gcc-arm-none-eabi` package from the current Ubuntu LTS, which is the same toolchain used by CI) or remove modules from the build.
+1 -1
View File
@@ -71,7 +71,7 @@ PX4 _developers_ need to know the FMU version of their board, as this is require
At very high level, the main differences are:
- **FMUv2:** Single board with STM32427VI processor ([Pixhawk 1 (Discontinued)](../flight_controller/pixhawk.md), [pix32](../flight_controller/holybro_pix32.md), [Pixfalcon](../flight_controller/pixfalcon.md), [Drotek DroPix](../flight_controller/dropix.md))
- **FMUv2:** Single board with STM32427VI processor (Pixhawk 1 (discontinued), Holybro pix32 (discontinued), Pixfalcon (discontinued), Drotek DroPix (discontinued))
- **FMUv3:** Identical to FMUv2, but usable flash doubled to 2MB ([Hex Cube Black](../flight_controller/pixhawk-2.md),[CUAV Pixhack v3](../flight_controller/pixhack_v3.md),[mRo Pixhawk](../flight_controller/mro_pixhawk.md), [Pixhawk Mini (Discontinued)](../flight_controller/pixhawk_mini.md))
- **FMUv4:** Increased RAM. Faster CPU. More serial ports. No IO processor ([Pixracer](../flight_controller/pixracer.md))
- **FMUv4-PRO:** Slightly increased RAM. More serial ports. IO processor ([Pixhawk 3 Pro](../flight_controller/pixhawk3_pro.md))
+3 -3
View File
@@ -6,7 +6,7 @@ It is small, rugged and just large enough to host a [Pixracer](../flight_control
Key information:
- **Frame:** Wing Wing Z-84
- **Flight controller:** Pixracer
- **Flight controller:** Pixracer (Discontinued)
![Wing Wing Z-84 build](../../assets/airframes/fw/wing_wing/wing_wing_build11.jpg)
@@ -31,8 +31,8 @@ Any small (>=12A) ESC will do:
- [Pixracer](../flight_controller/pixracer.md) kit (including GPS and power module)
- FrSky D4R-II receiver or equivalent (jumpered to PPM sum output according to its manual)
- [Mini telemetry set](../flight_controller/pixfalcon.md#availability) for Holybro pix32
- [Digital airspeed sensor](../flight_controller/pixfalcon.md#availability) for Holybro pix32 / Pixfalcon
- _Mini telemetry set_ for Holybro pix32
- _Digital airspeed sensor_ for Holybro pix32 / Pixfalcon
- 1800 mAh 2S LiPo Battery - e.g. Team Orion 1800mAh 7.4V 50C 2S1P with XT 60 plug.
### Recommended spare parts
@@ -3,6 +3,7 @@
:::warning
Discontinued
The Falcon Venturi FPV Wing frame on which this vehicle is based is no longer available.
The Dropix FC used by this vehicle is discontinued.
:::
The _Falcon Vertigo Hybrid VTOL_ is a quadplane VTOL aircraft that has been designed to work with PX4 and the Dropix (Pixhawk compatible) flight controller. It can carry a small GoPro camera.
@@ -13,7 +14,7 @@ The components can also be purchased separately.
Key information:
- **Frame:** Falcon Vertigo Hybrid VTOL
- **Flight controller:** Dropix
- **Flight controller:** Dropix (Discontineud)
- **Wing span:** 1.3m
![Falcon Vertigo Hybrid VTOL RTF](../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_complete.jpg)
@@ -115,10 +116,6 @@ This kit includes Dropix flight controller with most of the required electronics
<img src="../../assets/airframes/vtol/falcon_vertigo/falcon_vertigo_23_dropix_and_other_electronics.jpg" width="500px" title="Falcon Vertigo Electronics" />
:::info
General information about connecting Dropix can be found in [Dropix Flight Controller](../flight_controller/dropix.md).
:::
#### Connect the ESC power connector and pass the signals cables to the flight controller
1. Connect the ESC to the power module using the XT60 connector
@@ -146,7 +143,7 @@ For example, you might wire it up like this example (orientation as if "sitting
| AUX 2 | Right aileron |
| AUX 3 | Elevator |
| AUX 4 | Rudder |
| AUX 5 | 油门 |
| AUX 5 | Throttle |
<a id="dropix_back"></a>
@@ -267,7 +264,7 @@ The final assembly step is to check the vehicle is stable and that the motors ha
Perform the normal [Basic Configuration](../config/index.md).
备注:
Notes:
1. For [Airframe](../config/airframe.md) select the vehicle group/type as _Standard VTOL_ and the specific vehicle as [Generic Standard VTOL](../airframes/airframe_reference.md#vtol_standard_vtol_generic_standard_vtol) as shown below.
+1
View File
@@ -11,6 +11,7 @@ It also links instructions for how you can add PX4 support for:
- [Streaming MAVLink messages](../mavlink/streaming_messages.md)
- [Handling incoming MAVLink messages (and writing to a uORB topic)](../mavlink/receiving_messages.md)
- [Custom MAVLink Messages](../mavlink/custom_messages.md)
- [Message Signing](../mavlink/message_signing.md)
- [Protocols/Microservices](../mavlink/protocols.md)
:::info
+126
View File
@@ -0,0 +1,126 @@
# MAVLink Message Signing
[MAVLink 2 message signing](https://mavlink.io/en/guide/message_signing.html) allows PX4 to cryptographically verify that incoming MAVLink messages originate from a trusted source (authentication).
:::info
This mechanism does not _encrypt_ the message payload.
:::
## 综述
When signing is enabled, PX4 appends a 13-byte [signature](https://mavlink.io/en/guide/message_signing.html#signature) to every outgoing MAVLink 2 message.
Incoming messages are checked against the shared secret key, and unsigned or incorrectly signed messages are rejected (with [exceptions for safety-critical messages](#unsigned-message-allowlist)).
The signing implementation is built into the MAVLink module and is always available — no special build flags are required.
It is enabled and disabled at runtime through the [MAV_SIGN_CFG](../advanced_config/parameter_reference.md#MAV_SIGN_CFG) parameter.
## Enable/Disable Signing
The [MAV_SIGN_CFG](../advanced_config/parameter_reference.md#MAV_SIGN_CFG) parameter controls whether signing is active:
| 值 | 模式 | 描述 |
| - | ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| 0 | Disabled (default) | No signing. All messages are accepted regardless of signature. |
| 1 | Non-USB | Signing is enabled on all links **except** USB serial connections. USB links accept unsigned messages. |
| 2 | Always | Signing is enforced on all links, including USB. |
:::warning
Setting `MAV_SIGN_CFG` alone does not enable signing — a secret key must also be present (see [Key Provisioning](#key-provisioning) below).
If no key has been set (or the key is all zeros with a zero timestamp), all messages are accepted regardless of this parameter.
:::
To **disable** signing, set `MAV_SIGN_CFG` to zero.
## Key Provisioning
The signing key is set by sending the MAVLink [SETUP_SIGNING](https://mavlink.io/en/messages/common.html#SETUP_SIGNING) message (ID 256) to PX4.
This message contains:
- A 32-byte secret key
- A 64-bit initial timestamp
:::warning
For security, PX4 only accepts `SETUP_SIGNING` messages received on a **USB** connection.
The message is silently ignored on all other link types (telemetry radios, network, and so on).
This ensures that an attacker cannot remotely change the signing key.
:::
## Key Storage
The secret key and timestamp are stored on the SD card at:
```txt
/mavlink/mavlink-signing-key.bin
```
The file is a 40-byte binary file:
| Offset | Size | Content |
| ------ | -------- | -------------------------------------------------------- |
| 0 | 32 bytes | Secret key |
| 32 | 8 bytes | Timestamp (`uint64_t`, little-endian) |
The file is created with mode `0600` (owner read/write only), and the containing `/mavlink/` directory is created with mode `0700` (owner only).
On startup, PX4 reads the key from this file.
If the file exists and contains a non-zero key or timestamp, signing is initialized automatically.
:::info
The timestamp in the file is set when `SETUP_SIGNING` is received.
A graceful shutdown also writes the current timestamp back, but in practice most vehicles are powered off by pulling the battery, so the on-disk timestamp will typically remain at the value from the last key provisioning.
:::
:::info
Storage of the key on the SD card means that signing can be disabled by removing the card.
Note that this requires physical access to the vehicle, and therefore provides the same level of security as allowing signing to be modified via the USB channel.
:::
## How It Works
### Initialization
1. The MAVLink module calls `MavlinkSignControl::start()` during startup.
2. The `/mavlink/` directory is created if it doesn't exist.
3. The `mavlink-signing-key.bin` file is opened (or created empty).
4. If a valid key is found (non-zero key or timestamp), signing is marked as initialized.
5. The `accept_unsigned` callback is registered with the MAVLink library.
### Outgoing Messages
When signing is initialized, the `MAVLINK_SIGNING_FLAG_SIGN_OUTGOING` flag is set, which causes the MAVLink library to automatically append a [SHA-256 based signature](https://mavlink.io/en/guide/message_signing.html#signature) to every outgoing MAVLink 2 message.
### Incoming Messages
For each incoming message, the MAVLink library checks whether a valid signature is present.
If the message is unsigned or has an invalid signature, the library calls the `accept_unsigned` callback, which decides whether to accept or reject the message based on:
1. **Signing not initialized** — If no key has been loaded, all messages are accepted.
2. **Allowlisted message** — Certain [safety-critical messages](#unsigned-message-allowlist) are always accepted.
3. **Sign mode** — The `MAV_SIGN_CFG` parameter determines behavior:
- Mode 0 (disabled): All unsigned messages are accepted.
- Mode 1 (non-USB): Unsigned messages are accepted only on USB links.
- Mode 2 (always): Unsigned messages are rejected on all links.
## Unsigned Message Allowlist
The following messages are **always** accepted unsigned, regardless of the signing mode.
These are safety-critical messages that may originate from systems that don't support signing:
| 消息 | ID | Reason |
| -------------------------------------------------------------------------------------------- | --- | -------------------------------------------------------- |
| [RADIO_STATUS](https://mavlink.io/en/messages/common.html#RADIO_STATUS) | 109 | Radio link status from SiK radios and other radio modems |
| [ADSB_VEHICLE](https://mavlink.io/en/messages/common.html#ADSB_VEHICLE) | 246 | ADS-B traffic information for collision avoidance |
| [COLLISION](https://mavlink.io/en/messages/common.html#COLLISION) | 247 | Collision threat warnings |
## Security Considerations
- **Physical access required for key setup**: The `SETUP_SIGNING` message is only accepted over USB, so an attacker must have physical access to the vehicle to provision or change the key.
- **Key not exposed via parameters**: The secret key is stored in a separate file on the SD card, not as a MAVLink parameter, so it cannot be read back through the parameter protocol.
- **SD card access**: Anyone with physical access to the SD card can read or modify the `mavlink-signing-key.bin` file, or just remove the card.
Ensure physical security of the vehicle if signing is used as a security control.
- **Replay protection**: The MAVLink signing protocol includes a timestamp that prevents replay attacks.
The on-disk timestamp is updated when a new key is provisioned via `SETUP_SIGNING`.
A graceful shutdown also persists the current timestamp, but since most vehicles are powered off by pulling the battery, the timestamp will typically reset to the value from the last key provisioning on reboot.
- **No encryption**: Message signing provides authentication and integrity, but messages are still sent in plaintext.
An eavesdropper can read message contents but cannot forge or modify them without the key.
+1
View File
@@ -30,6 +30,7 @@ These services are known to be supported in some form:
- [Landing Target Protocol](https://mavlink.io/en/services/landing_target.html)
- [Manual Control (Joystick) Protocol](https://mavlink.io/en/services/manual_control.html)
- [MAVLink Id Assignment (sysid, compid)](https://mavlink.io/en/services/mavlink_id_assignment.html)
- [Message Signing](../mavlink/message_signing.md) ([MAVLink spec](https://mavlink.io/en/guide/message_signing.html))
- [Mission Protocol](https://mavlink.io/en/services/mission.html)
- [Offboard Control Protocol](https://mavlink.io/en/services/offboard_control.html)
- [Remote ID](../peripherals/remote_id.md) ([Open Drone ID Protocol](https://mavlink.io/en/services/opendroneid.html))
+183 -183
View File
@@ -96,203 +96,203 @@ They are not build into the module, and hence are neither published or subscribe
:::details
See messages
- [GpioConfig](../msg_docs/GpioConfig.md)
- [MavlinkLog](../msg_docs/MavlinkLog.md)
- [Event](../msg_docs/Event.md)
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
- [MagWorkerData](../msg_docs/MagWorkerData.md)
- [OrbTest](../msg_docs/OrbTest.md)
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
- [EventV0](../msg_docs/EventV0.md)
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
- [EstimatorBias](../msg_docs/EstimatorBias.md)
- [QshellRetval](../msg_docs/QshellRetval.md)
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
- [GpioIn](../msg_docs/GpioIn.md)
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
- [Airspeed](../msg_docs/Airspeed.md)
- [SensorMag](../msg_docs/SensorMag.md)
- [QshellReq](../msg_docs/QshellReq.md)
- [RcChannels](../msg_docs/RcChannels.md)
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
- [TecsStatus](../msg_docs/TecsStatus.md)
- [CameraStatus](../msg_docs/CameraStatus.md)
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
- [DatamanRequest](../msg_docs/DatamanRequest.md)
- [SensorAccel](../msg_docs/SensorAccel.md)
- [HomePositionV0](../msg_docs/HomePositionV0.md)
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
- [OrbitStatus](../msg_docs/OrbitStatus.md)
- [RcParameterMap](../msg_docs/RcParameterMap.md)
- [PowerButtonState](../msg_docs/PowerButtonState.md)
- [GpioRequest](../msg_docs/GpioRequest.md)
- [VehicleRoi](../msg_docs/VehicleRoi.md)
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
- [EscStatus](../msg_docs/EscStatus.md)
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
- [GpioOut](../msg_docs/GpioOut.md)
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
- [ActionRequest](../msg_docs/ActionRequest.md)
- [GimbalControls](../msg_docs/GimbalControls.md)
- [MountOrientation](../msg_docs/MountOrientation.md)
- [LedControl](../msg_docs/LedControl.md)
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
- [VehicleAirData](../msg_docs/VehicleAirData.md)
- [BatteryInfo](../msg_docs/BatteryInfo.md)
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
- [RaptorInput](../msg_docs/RaptorInput.md)
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
- [VehicleImu](../msg_docs/VehicleImu.md)
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
- [SensorUwb](../msg_docs/SensorUwb.md)
- [LogMessage](../msg_docs/LogMessage.md)
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
- [SensorTemp](../msg_docs/SensorTemp.md)
- [SensorGyro](../msg_docs/SensorGyro.md)
- [PowerMonitor](../msg_docs/PowerMonitor.md)
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
- [HeaterStatus](../msg_docs/HeaterStatus.md)
- [SensorAirflow](../msg_docs/SensorAirflow.md)
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
- [LoggerStatus](../msg_docs/LoggerStatus.md)
- [TuneControl](../msg_docs/TuneControl.md)
- [GpsDump](../msg_docs/GpsDump.md)
- [WheelEncoders](../msg_docs/WheelEncoders.md)
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
- [HealthReport](../msg_docs/HealthReport.md)
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
- [GpsInjectData](../msg_docs/GpsInjectData.md)
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
- [EscReport](../msg_docs/EscReport.md)
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
- [SensorCorrection](../msg_docs/SensorCorrection.md)
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
- [EstimatorStates](../msg_docs/EstimatorStates.md)
- [CameraCapture](../msg_docs/CameraCapture.md)
- [RadioStatus](../msg_docs/RadioStatus.md)
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
- [SensorsStatus](../msg_docs/SensorsStatus.md)
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
- [NeuralControl](../msg_docs/NeuralControl.md)
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
- [GeofenceResult](../msg_docs/GeofenceResult.md)
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
- [GimbalControls](../msg_docs/GimbalControls.md)
- [SystemPower](../msg_docs/SystemPower.md)
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
- [CameraTrigger](../msg_docs/CameraTrigger.md)
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
- [EscReport](../msg_docs/EscReport.md)
- [IrlockReport](../msg_docs/IrlockReport.md)
- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
- [VelocityLimits](../msg_docs/VelocityLimits.md)
- [Gripper](../msg_docs/Gripper.md)
- [Mission](../msg_docs/Mission.md)
- [RtlStatus](../msg_docs/RtlStatus.md)
- [GainCompression](../msg_docs/GainCompression.md)
- [DatamanResponse](../msg_docs/DatamanResponse.md)
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
- [DeviceInformation](../msg_docs/DeviceInformation.md)
- [UlogStream](../msg_docs/UlogStream.md)
- [SensorSelection](../msg_docs/SensorSelection.md)
- [DebugVect](../msg_docs/DebugVect.md)
- [PpsCapture](../msg_docs/PpsCapture.md)
- [GpioConfig](../msg_docs/GpioConfig.md)
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
- [GpioRequest](../msg_docs/GpioRequest.md)
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
- [MissionResult](../msg_docs/MissionResult.md)
- [GeofenceResult](../msg_docs/GeofenceResult.md)
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
- [FollowTarget](../msg_docs/FollowTarget.md)
- [DebugArray](../msg_docs/DebugArray.md)
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
- [MavlinkLog](../msg_docs/MavlinkLog.md)
- [DebugValue](../msg_docs/DebugValue.md)
- [Rpm](../msg_docs/Rpm.md)
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
- [CellularStatus](../msg_docs/CellularStatus.md)
- [ButtonEvent](../msg_docs/ButtonEvent.md)
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
- [PwmInput](../msg_docs/PwmInput.md)
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
- [RaptorStatus](../msg_docs/RaptorStatus.md)
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
- [PowerButtonState](../msg_docs/PowerButtonState.md)
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
- [VehicleRoi](../msg_docs/VehicleRoi.md)
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
- [WheelEncoders](../msg_docs/WheelEncoders.md)
- [UlogStream](../msg_docs/UlogStream.md)
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
- [ButtonEvent](../msg_docs/ButtonEvent.md)
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
- [GainCompression](../msg_docs/GainCompression.md)
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
- [RcParameterMap](../msg_docs/RcParameterMap.md)
- [DeviceInformation](../msg_docs/DeviceInformation.md)
- [Rpm](../msg_docs/Rpm.md)
- [NeuralControl](../msg_docs/NeuralControl.md)
- [Event](../msg_docs/Event.md)
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
- [PpsCapture](../msg_docs/PpsCapture.md)
- [FollowTarget](../msg_docs/FollowTarget.md)
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
- [CameraTrigger](../msg_docs/CameraTrigger.md)
- [Airspeed](../msg_docs/Airspeed.md)
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
- [ActuatorTest](../msg_docs/ActuatorTest.md)
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
- [LedControl](../msg_docs/LedControl.md)
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
- [MagWorkerData](../msg_docs/MagWorkerData.md)
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
- [DebugVect](../msg_docs/DebugVect.md)
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
- [CellularStatus](../msg_docs/CellularStatus.md)
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
- [QshellRetval](../msg_docs/QshellRetval.md)
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
- [SensorBaro](../msg_docs/SensorBaro.md)
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
- [DatamanResponse](../msg_docs/DatamanResponse.md)
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
- [GpsInjectData](../msg_docs/GpsInjectData.md)
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
- [SensorUwb](../msg_docs/SensorUwb.md)
- [CameraCapture](../msg_docs/CameraCapture.md)
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
- [DatamanRequest](../msg_docs/DatamanRequest.md)
- [GpioIn](../msg_docs/GpioIn.md)
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
- [Mission](../msg_docs/Mission.md)
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
- [DebugArray](../msg_docs/DebugArray.md)
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
- [SensorGyro](../msg_docs/SensorGyro.md)
- [InputRc](../msg_docs/InputRc.md)
- [AirspeedWind](../msg_docs/AirspeedWind.md)
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
- [OrbitStatus](../msg_docs/OrbitStatus.md)
- [Vtx](../msg_docs/Vtx.md)
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
- [MissionResult](../msg_docs/MissionResult.md)
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
- [ActuatorTest](../msg_docs/ActuatorTest.md)
- [IrlockReport](../msg_docs/IrlockReport.md)
- [AdcReport](../msg_docs/AdcReport.md)
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
- [Ping](../msg_docs/Ping.md)
- [LoggerStatus](../msg_docs/LoggerStatus.md)
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
- [Gripper](../msg_docs/Gripper.md)
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
- [RaptorInput](../msg_docs/RaptorInput.md)
- [GpioOut](../msg_docs/GpioOut.md)
- [CameraStatus](../msg_docs/CameraStatus.md)
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
- [LogMessage](../msg_docs/LogMessage.md)
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
- [RaptorStatus](../msg_docs/RaptorStatus.md)
- [SensorCorrection](../msg_docs/SensorCorrection.md)
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
- [OrbTest](../msg_docs/OrbTest.md)
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
- [PowerMonitor](../msg_docs/PowerMonitor.md)
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
- [SensorAirflow](../msg_docs/SensorAirflow.md)
- [TecsStatus](../msg_docs/TecsStatus.md)
- [EstimatorBias](../msg_docs/EstimatorBias.md)
- [SensorMag](../msg_docs/SensorMag.md)
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
- [ActionRequest](../msg_docs/ActionRequest.md)
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
- [MountOrientation](../msg_docs/MountOrientation.md)
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
- [QshellReq](../msg_docs/QshellReq.md)
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
- [EscStatus](../msg_docs/EscStatus.md)
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
- [Cpuload](../msg_docs/Cpuload.md)
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
- [SensorsStatus](../msg_docs/SensorsStatus.md)
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
- [SensorAccel](../msg_docs/SensorAccel.md)
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
- [HomePositionV0](../msg_docs/HomePositionV0.md)
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
- [HealthReport](../msg_docs/HealthReport.md)
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
- [SensorSelection](../msg_docs/SensorSelection.md)
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
- [RtlStatus](../msg_docs/RtlStatus.md)
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
- [BatteryInfo](../msg_docs/BatteryInfo.md)
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
- [AdcReport](../msg_docs/AdcReport.md)
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
- [VehicleImu](../msg_docs/VehicleImu.md)
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
- [HeaterStatus](../msg_docs/HeaterStatus.md)
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
- [TuneControl](../msg_docs/TuneControl.md)
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
- [VehicleAirData](../msg_docs/VehicleAirData.md)
- [RadioStatus](../msg_docs/RadioStatus.md)
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
- [VelocityLimits](../msg_docs/VelocityLimits.md)
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
- [EstimatorStates](../msg_docs/EstimatorStates.md)
- [Ping](../msg_docs/Ping.md)
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
- [GpsDump](../msg_docs/GpsDump.md)
- [SensorTemp](../msg_docs/SensorTemp.md)
- [RcChannels](../msg_docs/RcChannels.md)
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
:::
+57 -47
View File
@@ -12,13 +12,15 @@ These are covered in [Application/Module Template](../modules/module_template.md
以下内容是您需要提前准备的:
- [PX4 SITL Simulator](../simulation/index.md) _or_ a [PX4-compatible flight controller](../flight_controller/index.md).
- [Gazebo Simulator](../sim_gazebo_gz/index.md) (or another [PX4 SITL Simulator](../simulation/index.md)) _or_ a [PX4-compatible flight controller](../flight_controller/index.md).
- [PX4 Development Toolchain](../dev_setup/dev_env.md) for the desired target.
- [Download the PX4 Source Code](../dev_setup/building_px4.md#download-the-px4-source-code) from Github
The source code [PX4-Autopilot/src/examples/px4_simple_app](https://github.com/PX4/PX4-Autopilot/tree/main/src/examples/px4_simple_app) directory contains a completed version of this tutorial that you can review if you get stuck.
- Rename (or delete) the **px4_simple_app** directory.
:::tip
Rename (or delete) the **px4_simple_app** directory.
:::
## 最小的应用程序
@@ -34,7 +36,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
```c
/****************************************************************************
*
* Copyright (c) 2012-2022 PX4 Development Team. All rights reserved.
* Copyright (c) 2012-2026 PX4 Development Team. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -67,7 +69,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
```
- 将下面的代码复制到头部注释的下方,
该注释应出现在所有贡献的文件中!
Similar code should be present in all contributed files!
```c
/**
@@ -150,6 +152,9 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
)
```
Note that in your own modules you'd use the current copyright year!
We're using `2015` here to match the example.
The `px4_add_module()` method builds a static library from a module description.
- The `MODULE` block is the Firmware-unique name of the module (by convention the module name is prefixed by parent directories back to `src`).
@@ -170,7 +175,7 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
4. Create and open a new _Kconfig_ definition file named **Kconfig** and define your symbol for naming (see [Kconfig naming convention](../hardware/porting_guide_config.md#px4-kconfig-symbol-naming-convention)).
复制下面的文本:
```text
```txt
menuconfig EXAMPLES_PX4_SIMPLE_APP
bool "px4_simple_app"
default n
@@ -185,27 +190,34 @@ This consists of a single _C_ file and a _cmake_ definition (which tells the too
Applications are added to the build/firmware in the appropriate board-level _px4board_ file for your target:
- PX4 SITL (Simulator): [PX4-Autopilot/boards/px4/sitl/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/sitl/default.px4board)
- Pixhawk v1/2: [PX4-Autopilot/boards/px4/fmu-v2/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v2/default.px4board)
- Pixracer (px4/fmu-v4): [PX4-Autopilot/boards/px4/fmu-v4/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v4/default.px4board)
- Pixhawk 6X (px4/fmu-v6x): [PX4-Autopilot/boards/px4/fmu-v6x/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board)
- _px4board_ files for other boards can be found in [PX4-Autopilot/boards/](https://github.com/PX4/PX4-Autopilot/tree/main/boards)
To enable the compilation of the application into the firmware add the corresponding Kconfig key `CONFIG_EXAMPLES_PX4_SIMPLE_APP=y` in the _px4board_ file or run [boardconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup) `make px4_fmu-v4_default boardconfig`:
To enable the compilation of the application into the firmware add the corresponding Kconfig key `CONFIG_EXAMPLES_PX4_SIMPLE_APP=y` in the _px4board_ file or run [boardconfig](../hardware/porting_guide_config.md#px4-menuconfig-setup).
For example, to edit the board config for FMUv6x you would do:
```sh
make fmu-v6x_default boardconfig
```
And then enable the app in the _boardconfig_ UI as shown:
```txt
examples --->
[x] PX4 Simple app ----
```
:::info
The line will already be present for most files, because the examples are included in firmware by default.
Examples are opt-in and not included in firmware by default (although they are in SITL).
You must explicitly enable them as shown above.
:::
使用特定板的命令构建示例:
- jMAVSim Simulator: `make px4_sitl_default jmavsim`
- Pixhawk v1/2: `make px4_fmu-v2_default` (or just `make px4_fmu-v2`)
- Pixhawk v3: `make px4_fmu-v4_default`
- Other boards: [Building the Code](../dev_setup/building_px4.md#building-for-nuttx)
- Gazebo Simulator: `make px4_sitl gz_x500`
- Pixhawk 6X: `make px4_fmu-v6x_default`
- Other boards: [Building the Code](../dev_setup/building_px4.md)
## 测试应用(硬件)
@@ -213,8 +225,7 @@ The line will already be present for most files, because the examples are includ
启用上传器,然后重启飞控板:
- Pixhawk v1/2: `make px4_fmu-v2_default upload`
- Pixhawk v3: `make px4_fmu-v4_default upload`
- Pixhawk 6X: `make px4_fmu-v6x_default upload`
在您重启飞控板之前,它应该打印一些编译消息,并在最后打印:
@@ -299,14 +310,14 @@ The benefits of the PX4 hardware abstraction comes into play here!
无需以任何方式与传感器驱动程序交互,如果板或传感器更新,也无需更新您的应用程序。
:::
Individual message channels between applications are called [topics](../middleware/uorb.md). For this tutorial, we are interested in the [SensorCombined](https://github.com/PX4/PX4-Autopilot/blob/main/msg/SensorCombined.msg) topic, which holds the synchronized sensor data of the complete system.
Individual message channels between applications are called [topics](../middleware/uorb.md). For this tutorial, we are interested in the [VehicleAcceleration](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAcceleration.msg) topic, which holds the filtered vehicle acceleration data.
订阅主题很简单:
```cpp
#include <uORB/topics/sensor_combined.h>
#include <uORB/topics/vehicle_acceleration.h>
..
int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined));
int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration));
```
The `sensor_sub_fd` is a topic handle and can be used to very efficiently perform a blocking wait for new data.
@@ -317,9 +328,9 @@ Adding `poll()` to the subscription looks like (_pseudocode, look for the full i
```cpp
#include <poll.h>
#include <uORB/topics/sensor_combined.h>
#include <uORB/topics/vehicle_acceleration.h>
..
int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined));
int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration));
/* one could wait for multiple topics with this technique, just using one here */
px4_pollfd_struct_t fds[] = {
@@ -327,26 +338,26 @@ px4_pollfd_struct_t fds[] = {
};
while (true) {
/* wait for sensor update of 1 file descriptor for 1000 ms (1 second) */
int poll_ret = px4_poll(fds, 1, 1000);
..
if (fds[0].revents & POLLIN) {
/* obtained data for the first file descriptor */
struct sensor_combined_s raw;
/* copy sensors raw data into local buffer */
orb_copy(ORB_ID(sensor_combined), sensor_sub_fd, &raw);
PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f",
(double)raw.accelerometer_m_s2[0],
(double)raw.accelerometer_m_s2[1],
(double)raw.accelerometer_m_s2[2]);
}
/* wait for sensor update of 1 file descriptor for 1000 ms (1 second) */
int poll_ret = px4_poll(fds, 1, 1000);
..
if (fds[0].revents & POLLIN) {
/* obtained data for the first file descriptor */
struct vehicle_acceleration_s accel;
/* copy sensors raw data into local buffer */
orb_copy(ORB_ID(vehicle_acceleration), sensor_sub_fd, &accel);
PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f",
(double)accel.xyz[0],
(double)accel.xyz[1],
(double)accel.xyz[2]);
}
}
```
再次编译应用程序可以输入:
```sh
make
make px4_sitl_default
```
### 测试 uORB 消息订阅
@@ -405,7 +416,7 @@ The [complete example code](https://github.com/PX4/PX4-Autopilot/blob/main/src/e
```c
/****************************************************************************
*
* Copyright (c) 2012-2019 PX4 Development Team. All rights reserved.
* Copyright (c) 2012-2026 PX4 Development Team. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -454,7 +465,7 @@ The [complete example code](https://github.com/PX4/PX4-Autopilot/blob/main/src/e
#include <math.h>
#include <uORB/uORB.h>
#include <uORB/topics/sensor_combined.h>
#include <uORB/topics/vehicle_acceleration.h>
#include <uORB/topics/vehicle_attitude.h>
__EXPORT int px4_simple_app_main(int argc, char *argv[]);
@@ -463,8 +474,8 @@ int px4_simple_app_main(int argc, char *argv[])
{
PX4_INFO("Hello Sky!");
/* subscribe to sensor_combined topic */
int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined));
/* subscribe to vehicle_acceleration topic */
int sensor_sub_fd = orb_subscribe(ORB_ID(vehicle_acceleration));
/* limit the update rate to 5 Hz */
orb_set_interval(sensor_sub_fd, 200);
@@ -505,20 +516,20 @@ int px4_simple_app_main(int argc, char *argv[])
if (fds[0].revents & POLLIN) {
/* obtained data for the first file descriptor */
struct sensor_combined_s raw;
struct vehicle_acceleration_s accel;
/* copy sensors raw data into local buffer */
orb_copy(ORB_ID(sensor_combined), sensor_sub_fd, &raw);
orb_copy(ORB_ID(vehicle_acceleration), sensor_sub_fd, &accel);
PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f",
(double)raw.accelerometer_m_s2[0],
(double)raw.accelerometer_m_s2[1],
(double)raw.accelerometer_m_s2[2]);
(double)accel.xyz[0],
(double)accel.xyz[1],
(double)accel.xyz[2]);
/* set att and publish this information for other apps
the following does not have any meaning, it's just an example
*/
att.q[0] = raw.accelerometer_m_s2[0];
att.q[1] = raw.accelerometer_m_s2[1];
att.q[2] = raw.accelerometer_m_s2[2];
att.q[0] = accel.xyz[0];
att.q[1] = accel.xyz[1];
att.q[2] = accel.xyz[2];
orb_publish(ORB_ID(vehicle_attitude), att_pub, &att);
}
@@ -530,7 +541,6 @@ int px4_simple_app_main(int argc, char *argv[])
}
PX4_INFO("exiting");
return 0;
}
```
+7 -4
View File
@@ -22,7 +22,8 @@ PX4-Autopilot contains a template for writing a new application (module) that ru
总结:
1. Specify the dependency on the work queue library in the cmake definition file ([CMakeLists.txt](https://github.com/PX4/PX4-Autopilot/blob/main/src/examples/work_item/CMakeLists.txt)):
```
```txt
...
DEPENDS
px4_work_queue
@@ -48,9 +49,11 @@ PX4-Autopilot contains a template for writing a new application (module) that ru
4. Implement the `ScheduledWorkItem::Run()` method to perform "work".
5. Implement the `task_spawn` method, specifying that the task is a work queue (using the `task_id_is_work_queue` id.
5. Implement the `task_spawn` method, specifying that the task is a work queue (using the `task_id_is_work_queue` id).
6. Schedule the work queue task using one of the scheduling methods (in the example we use `ScheduleOnInterval` from within the `init` method).
6. Schedule the work queue task using one of the scheduling methods.
In the example, `init()` calls `registerCallback()` on a uORB subscription so that `Run()` is triggered whenever a new `sensor_accel` message is published.
`ScheduleOnInterval` is an alternative for fixed-rate scheduling.
## 任务
@@ -66,6 +69,6 @@ PX4/PX4-Autopilot contains a template for writing a new application (module) tha
[startup script](../concept/system_startup.md).
- 命令行参数解析。
- Documentation: the `PRINT_MODULE_*` methods serve two purposes (the API is
documented [in the source code](https://github.com/PX4/PX4-Autopilot/blob/v1.8.0/src/platforms/px4_module.h#L381)):
documented [in the source code](https://github.com/PX4/PX4-Autopilot/blob/v1.17/platforms/common/include/px4_platform_common/module.h)):
- They are used to print the command-line usage when entering `module help` on the console.
- They are automatically extracted via script to generate the [Modules & Commands Reference](../modules/modules_main.md) page.
+1 -1
View File
@@ -926,7 +926,7 @@ that can be accepted by most ESCs and servos.
It is typically started with:
```
pca9685_pwm_out start -a 0x40 -b 1
pca9685_pwm_out start -X -a 0x40 -b 1
```
### Usage {#pca9685_pwm_out_usage}
+26
View File
@@ -130,6 +130,32 @@ adis16507 <command> [arguments...]
status print status info
```
## adis16607
Source: [drivers/imu/analog_devices/adis16607](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/analog_devices/adis16607)
### Usage {#adis16607_usage}
```
adis16607 <command> [arguments...]
Commands:
start
[-s] Internal SPI bus(es)
[-S] External SPI bus(es)
[-b <val>] board-specific bus (default=all) (external SPI: n-th bus
(default=1))
[-c <val>] chip-select pin (for internal SPI) or index (for external SPI)
[-m <val>] SPI mode
[-f <val>] bus frequency in kHz
[-q] quiet startup (no message if no device found)
[-R <val>] Rotation
default: 0
stop
status print status info
```
## bmi055
Source: [drivers/imu/bosch/bmi055](https://github.com/PX4/PX4-Autopilot/tree/main/src/drivers/imu/bosch/bmi055)
+1 -1
View File
@@ -59,7 +59,7 @@ Please continue reading for [upgrade instructions](#upgrade-guide).
### 仿真
- TBD
- SIH: Add option to set wind velocity ([PX4-Autopilot#26467](https://github.com/PX4-Autopilot/pull/26467))
<!-- MOVED THIS TO v1.17
+6
View File
@@ -156,6 +156,12 @@ The airplane needs to takeoff in manual mode at full throttle.
Also, if the airplane crashes the state estimator might lose its fix.
:::
## Simulation Configuration
### Wind
SIH supports setting a wind velocity with the PX4 parameters [`SIH_WIND_N`](../advanced_config/parameter_reference.md#SIH_WIND_E) and [`SIH_WIND_E`](../advanced_config/parameter_reference.md#SIH_WIND_E) [m/s]. The parameters can also be changed during flight to simulate changing wind.
## Display/Visualisation (optional)
The SIH-simulated vehicle can be displayed using [jMAVSim](../sim_jmavsim/index.md) as a visualiser.
+2 -1
View File
@@ -86,7 +86,8 @@ vtxtable save
This will create a VTX table with 5 power levels.
```nsh> vtxtable status
```sh
nsh> vtxtable status
INFO [vtxtable] VTX table "Peak THOR T67":
INFO [vtxtable] Power levels:
INFO [vtxtable] 1: 0 = 25
+1 -12
View File
@@ -11,19 +11,8 @@ uint8 esc_cmdcount # Counter of number of commands
uint8 esc_state # State of ESC - depend on Vendor
uint8 actuator_function # actuator output function (one of Motor1...MotorN)
uint8 ACTUATOR_FUNCTION_MOTOR1 = 101
uint8 ACTUATOR_FUNCTION_MOTOR2 = 102
uint8 ACTUATOR_FUNCTION_MOTOR3 = 103
uint8 ACTUATOR_FUNCTION_MOTOR4 = 104
uint8 ACTUATOR_FUNCTION_MOTOR5 = 105
uint8 ACTUATOR_FUNCTION_MOTOR6 = 106
uint8 ACTUATOR_FUNCTION_MOTOR7 = 107
uint8 ACTUATOR_FUNCTION_MOTOR8 = 108
uint8 ACTUATOR_FUNCTION_MOTOR9 = 109
uint8 ACTUATOR_FUNCTION_MOTOR10 = 110
uint8 ACTUATOR_FUNCTION_MOTOR11 = 111
uint8 ACTUATOR_FUNCTION_MOTOR12 = 112
uint8 ACTUATOR_FUNCTION_MOTOR_MAX = 112 # output_functions.yaml Motor.start + Motor.count - 1
uint16 failures # Bitmask to indicate the internal ESC faults
int8 esc_power # Applied power 0-100 in % (negative values reserved)
+2 -2
View File
@@ -10,7 +10,7 @@ uint64 timestamp_sample # [us] Sampling timestamp of the data this control respo
uint16 reversible_flags # [-] Bitset indicating which motors are configured to be reversible
uint8 ACTUATOR_FUNCTION_MOTOR1 = 101
uint8 ACTUATOR_FUNCTION_MOTOR1 = 101 # output_functions.yaml Motor.start
uint8 NUM_CONTROLS = 12
uint8 NUM_CONTROLS = 12 # output_functions.yaml Motor.count
float32[12] control # [@range -1, 1] Normalized thrust. Where 1 means maximum positive thrust, -1 maximum negative (if not supported by the output, <0 maps to NaN). NaN maps to disarmed (stop the motors)
@@ -645,7 +645,7 @@ int uORBTest::UnitTest::test_wrap_around()
}
#define CHECK_COPY(i_got, i_correct) \
orb_copy(ORB_ID(orb_test_medium_wrap_around), sfd, &u); \
if (i_got != i_correct) { \
if ((i_got) != (i_correct)) { \
return test_fail("got wrong element from the queue (got %i, should be %i)", i_got, i_correct); \
}
@@ -875,7 +875,7 @@ int uORBTest::UnitTest::test_queue()
}
#define CHECK_COPY(i_got, i_correct) \
orb_copy(ORB_ID(orb_test_medium_queue), sfd, &u); \
if (i_got != i_correct) { \
if ((i_got) != (i_correct)) { \
return test_fail("got wrong element from the queue (got %i, should be %i)", i_got, i_correct); \
}
@@ -35,7 +35,18 @@
VertiqConfigurationHandler::VertiqConfigurationHandler(VertiqSerialInterface *ser,
VertiqClientManager *client_manager) :
_serial_interface(ser),
_client_manager(client_manager)
_client_manager(client_manager),
_prop_input_parser_client(0)
#ifdef CONFIG_USE_IFCI_CONFIGURATION
, _ifci_client(0)
#endif
#ifdef CONFIG_USE_PULSING_CONFIGURATION
, _voltage_superposition_client(0)
, _pulsing_rectangular_input_parser_client(0)
#endif
{
}
@@ -43,47 +54,47 @@ void VertiqConfigurationHandler::InitConfigurationClients(uint8_t object_id)
{
_object_id_now = object_id; //Make sure we store the initial object ID
_prop_input_parser_client = new EscPropellerInputParserClient(object_id);
_client_manager->AddNewClient(_prop_input_parser_client);
_prop_input_parser_client.UpdateEntryIds(object_id);
_client_manager->AddNewClient(&_prop_input_parser_client);
#ifdef CONFIG_USE_IFCI_CONFIGURATION
_ifci_client = new IQUartFlightControllerInterfaceClient(object_id);
_client_manager->AddNewClient(_ifci_client);
_ifci_client.UpdateEntryIds(object_id);
_client_manager->AddNewClient(&_ifci_client);
#endif //CONFIG_USE_IFCI_CONFIGURATION
#ifdef CONFIG_USE_PULSING_CONFIGURATION
_voltage_superposition_client = new VoltageSuperPositionClient(object_id);
_client_manager->AddNewClient(_voltage_superposition_client);
_voltage_superposition_client.UpdateEntryIds(object_id);
_client_manager->AddNewClient(&_voltage_superposition_client);
_pulsing_rectangular_input_parser_client = new PulsingRectangularInputParserClient(object_id);
_client_manager->AddNewClient(_pulsing_rectangular_input_parser_client);
_pulsing_rectangular_input_parser_client.UpdateEntryIds(object_id);
_client_manager->AddNewClient(&_pulsing_rectangular_input_parser_client);
#endif //CONFIG_USE_PULSING_CONFIGURATION
}
void VertiqConfigurationHandler::InitClientEntryWrappers()
{
AddNewClientEntry<float, float>(param_find("VTQ_MAX_VELOCITY"), &(_prop_input_parser_client->velocity_max_));
AddNewClientEntry<float, float>(param_find("VTQ_MAX_VOLTS"), &(_prop_input_parser_client->volts_max_));
AddNewClientEntry<uint8_t, int32_t>(param_find("VTQ_CONTROL_MODE"), &(_prop_input_parser_client->mode_));
AddNewClientEntry<uint8_t, int32_t>(param_find("VTQ_MOTOR_DIR"), &(_prop_input_parser_client->sign_));
AddNewClientEntry<uint8_t, int32_t>(param_find("VTQ_FC_DIR"), &(_prop_input_parser_client->flip_negative_));
AddNewClientEntry<float, float>(param_find("VTQ_MAX_VELOCITY"), &(_prop_input_parser_client.velocity_max_));
AddNewClientEntry<float, float>(param_find("VTQ_MAX_VOLTS"), &(_prop_input_parser_client.volts_max_));
AddNewClientEntry<uint8_t, int32_t>(param_find("VTQ_CONTROL_MODE"), &(_prop_input_parser_client.mode_));
AddNewClientEntry<uint8_t, int32_t>(param_find("VTQ_MOTOR_DIR"), &(_prop_input_parser_client.sign_));
AddNewClientEntry<uint8_t, int32_t>(param_find("VTQ_FC_DIR"), &(_prop_input_parser_client.flip_negative_));
#ifdef CONFIG_USE_IFCI_CONFIGURATION
AddNewClientEntry<uint8_t, int32_t>(param_find("VTQ_THROTTLE_CVI"), &(_ifci_client->throttle_cvi_));
AddNewClientEntry<uint8_t, int32_t>(param_find("VTQ_THROTTLE_CVI"), &(_ifci_client.throttle_cvi_));
#endif //CONFIG_USE_IFCI_CONFIGURATION
#ifdef CONFIG_USE_PULSING_CONFIGURATION
AddNewClientEntry<uint8_t, int32_t> (param_find("VTQ_PULSE_V_MODE"),
&(_pulsing_rectangular_input_parser_client->pulsing_voltage_mode_));
AddNewClientEntry<uint8_t, int32_t>(param_find("VTQ_X_CVI"), &(_ifci_client->x_cvi_));
AddNewClientEntry<uint8_t, int32_t>(param_find("VTQ_Y_CVI"), &(_ifci_client->y_cvi_));
AddNewClientEntry<float, float>(param_find("VTQ_ZERO_ANGLE"), &(_voltage_superposition_client->zero_angle_));
&(_pulsing_rectangular_input_parser_client.pulsing_voltage_mode_));
AddNewClientEntry<uint8_t, int32_t>(param_find("VTQ_X_CVI"), &(_ifci_client.x_cvi_));
AddNewClientEntry<uint8_t, int32_t>(param_find("VTQ_Y_CVI"), &(_ifci_client.y_cvi_));
AddNewClientEntry<float, float>(param_find("VTQ_ZERO_ANGLE"), &(_voltage_superposition_client.zero_angle_));
AddNewClientEntry<float, float>(param_find("VTQ_VELO_CUTOFF"),
&(_voltage_superposition_client->velocity_cutoff_));
&(_voltage_superposition_client.velocity_cutoff_));
AddNewClientEntry<float, float>(param_find("VTQ_TQUE_OFF_ANG"),
&(_voltage_superposition_client->propeller_torque_offset_angle_));
&(_voltage_superposition_client.propeller_torque_offset_angle_));
AddNewClientEntry<float, float>(param_find("VTQ_PULSE_V_LIM"),
&(_pulsing_rectangular_input_parser_client->pulsing_voltage_limit_));
&(_pulsing_rectangular_input_parser_client.pulsing_voltage_limit_));
#endif //CONFIG_USE_PULSING_CONFIGURATION
}
@@ -91,15 +102,15 @@ void VertiqConfigurationHandler::UpdateClientsToNewObjId(uint8_t new_object_id)
{
_object_id_now = new_object_id;
DestroyAndRecreateClient<EscPropellerInputParserClient>(_prop_input_parser_client, new_object_id);
_prop_input_parser_client.UpdateEntryIds(new_object_id);
#ifdef CONFIG_USE_IFCI_CONFIGURATION
DestroyAndRecreateClient<IQUartFlightControllerInterfaceClient>(_ifci_client, new_object_id);
_ifci_client.UpdateEntryIds(new_object_id);
#endif
#ifdef CONFIG_USE_PULSING_CONFIGURATION
DestroyAndRecreateClient<VoltageSuperPositionClient>(_voltage_superposition_client, new_object_id);
DestroyAndRecreateClient<PulsingRectangularInputParserClient>(_pulsing_rectangular_input_parser_client, new_object_id);
_voltage_superposition_client.UpdateEntryIds(new_object_id);
_pulsing_rectangular_input_parser_client.UpdateEntryIds(new_object_id);
#endif
}
@@ -114,8 +125,6 @@ void VertiqConfigurationHandler::UpdateIquartConfigParams()
{
for (uint8_t i = 0; i < _added_configuration_entry_wrappers; i++) {
_configuration_entry_wrappers[i]->SendGet(_serial_interface);
//Ensure that these get messages get out
_client_manager->HandleClientCommunication();
}
//Now go ahead and grab responses, and update everyone to be on the same page, but do it quickly.

Some files were not shown because too many files have changed in this diff Show More