Compare commits

...

91 Commits

Author SHA1 Message Date
Julian Oes 50d24429ec feat(params): add board-level read-only parameter support
Integrators can declare read-only parameters in a per-board YAML file:
readonly_params.yaml.

There are two ways to define the read-only params:
- "block": default writable, explicitly list params to be locked
- "allow": default readonly, explicitly list params to be writable

Enforcement is activated by `param lock` in rcS after all startup
scripts have run, so board defaults and airframe scripts can still set
params during init.

The feedback via MAVLink uses the new
MAV_PARAM_ERROR_READ_ONLY as part of the PARAM_ERROR message.
2026-04-09 06:43:17 +12:00
PX4BuildBot 5dba9990b4 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-08 16:45:35 +00:00
Onur Özkan aaace556cd refactor(offboarding-check): report specific failures (#26938)
* offboard: report specific failures

Figuring out offboard failures is quite difficult because the user currently
gets a single, very generic error message that does not identify the actual
missing requirement.

This change aims to improve the user experience by:

- moving offboard failure reporting into OffboardChecks, where the exact cause is known
- reporting specific arming failures for missing local position, local velocity and attitude estimates
- keeping the generic offboard signal error only as a fallback for true signal-loss cases
- removing the duplicate offboard check from ModeChecks (as already invoked by HealthAndArmingChecks)

Signed-off-by: Onur Özkan <work@onurozkan.dev>

* offboard: handle attitude mode in offboard check

Signed-off-by: Onur Özkan <work@onurozkan.dev>

---------

Signed-off-by: Onur Özkan <work@onurozkan.dev>
2026-04-08 08:23:20 -08:00
PX4BuildBot 36c3bfcde8 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-08 16:22:48 +00:00
Claudio Chies 70e31870af feat(params): update max values for various parameters (#27002) 2026-04-08 08:07:47 -08:00
PX4BuildBot 45baeccb01 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-08 15:59:56 +00:00
Eric Katzfey 4917b17116 feat(voxl2): Added i2cdetect system command to voxl2-slpi build. Needed to implement the required i2c API for it.
Also, changed the printf into PX4_INFO so the output can be seen for Qurt platforms.
2026-04-08 08:52:25 -07:00
alexcekay c0633d89ff nuttx: update littlefs to 2.11.3 and fix empty path EINVAL 2026-04-08 15:48:56 +02:00
PX4BuildBot f798d7ce16 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-08 13:12:33 +00:00
ttechnick 35cbbc1967 fix(fw_attitude_control): use euler angles to construct stabilized setpoint 2026-04-08 15:05:41 +02:00
Ramon Roche 8ff7255ba7 fix(readme): remove trailing whitespace 2026-04-08 01:32:37 -06:00
Ramon Roche 395236dc7f ci(ros): clone px4-ros2-interface-lib using PR base branch
The previous logic used GITHUB_HEAD_REF, which on a pull request is
the source (PR author's) branch name. For backport PRs (e.g.
mrpollo/backport-26781-1.17), no matching branch exists in
px4-ros2-interface-lib, so the script fell back to main and the
build broke from uORB message divergence.

Switch to GITHUB_BASE_REF, which on a PR is the branch the code is
being merged into (main or release/X.Y), and fall back to
GITHUB_REF_NAME for direct pushes. This always resolves to a real
branch in px4-ros2-interface-lib.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-04-08 01:17:15 -06:00
PX4BuildBot 1ada559eff docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-08 07:09:18 +00:00
Peter C. c838206024 docs(telemetry): Add Holybro sik long range to telemetry hardware documentaions (#26931) 2026-04-08 17:02:27 +10:00
Ramon Roche 582a50030c docs(project): add Citation section with BibTeX to README
Adds an explicit Citation section before Governance so researchers can
copy a canonical BibTeX entry without clicking through to Zenodo. Uses
the same author list and concept DOI as CITATION.cff so the citation
always resolves to the latest release. Follows the pattern used by
borglab/gtsam and huggingface/transformers.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-04-07 23:50:30 -06:00
Ramon Roche 2dd5c48a82 docs(project): rearrange README badges and add LFX Insights row
Split badges into two rows: release/DOI/Discord on top, and LF-ecosystem
health signals (OpenSSF Best Practices, LFX Health Score, Contributors,
Active Contributors) below. Removed the noisy "Build all targets" badge
and switched the Discord badge from the pixelated widget PNG to the
shields.io SVG endpoint so it renders crisply on HiDPI displays.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-04-07 23:50:30 -06:00
Ramon Roche 75b3e9f0d0 docs(coc): upgrade to Contributor Covenant 2.1 and update reporting email
Upgrades the project Code of Conduct from Contributor Covenant v1.4
(2016) to v2.1 (2021). v2.1 adds the Enforcement Guidelines section
(Correction / Warning / Temporary Ban / Permanent Ban) and modernizes
the language around inclusion and community leadership.

Replaces the personal reporting address (lorenz@px4.io) with an
institutional one (coc@dronecode.org) so Code of Conduct reports flow
to the Dronecode Foundation rather than a single maintainer's inbox.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-04-07 23:37:43 -06:00
PX4BuildBot b17da3caa0 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-08 05:27:37 +00:00
Beniamino Pozzan 0831782d3a docs(offboard): highlight ROS 2 offboard control risks (#26762) 2026-04-08 15:20:23 +10:00
Ramon Roche 9f9171575e ci(apt): gate apt mirror swap on runs-on at the workflow level
Add 'if: startsWith(runner.name, "runs-on--")' to the mirror swap step
in both workflows so fork users can see at a glance that the step only
fires on runs-on runners and is a no-op on standard GitHub-hosted
runners. The script keeps its internal RUNS_ON_AWS_REGION check as
defense in depth for callers outside these workflows.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-04-07 20:01:55 -06:00
Ramon Roche 60db79f35e ci(apt): extract AWS apt mirror swap into shared script
The mirror swap was duplicated across two workflows. Move it into
Tools/ci/use_aws_apt_mirror.sh and call the script from each workflow
after checkout but before any heavy apt work like Tools/setup/ubuntu.sh.

The script no-ops outside runs-on (RUNS_ON_AWS_REGION unset), so it is
safe to call from forks, self-hosted runners, or local container runs
without changing behavior there. The region is read from the runs-on
environment instead of being hardcoded, so future region changes only
need updating where the runner is provisioned.

The bootstrap 'apt install git' step keeps the default mirror because
git is one package and is unlikely to hit the dep11 desync issue that
broke ubuntu.sh.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-04-07 20:01:55 -06:00
Ramon Roche 2798910293 ci(ubuntu): use AWS regional mirror for apt in compile workflow
The compile_ubuntu workflow's apt operations talk directly to
archive.ubuntu.com, which round-robins across community mirrors that
occasionally serve out-of-sync index files mid-sync and break apt update
for everyone until the upstream catches up.

Apply the same mirror swap as build_deb_package.yml: rewrite the
container's apt sources to point at us-west-2.ec2.archive.ubuntu.com
before any apt operation runs, so both the inline 'apt update' and the
later Tools/setup/ubuntu.sh call benefit from the regional mirror.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-04-07 20:01:55 -06:00
Ramon Roche f77a1a44a0 ci(deb): publish SIH image as px4io/px4-sitl
The SIH image is the canonical PX4 SITL container, so drop the redundant
-sih suffix and publish it as px4io/px4-sitl. Gazebo continues to publish
as px4io/px4-sitl-gazebo.

Decouples the published image name from the matrix.image identifier by
introducing a matrix.repo field, so renames like this don't require
touching the matrix logic.

This is a breaking change for anyone pulling px4io/px4-sitl-sih directly;
the old tags remain available but no new ones will be published under
that name.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-04-07 20:01:55 -06:00
Ramon Roche 1ba562f400 ci(deb): use AWS regional mirror for apt in deb build container
The default archive.ubuntu.com round-robin can serve out-of-sync index
files mid-sync, which makes apt-get update fail with 'File has unexpected
size' errors and breaks the deb build job for everyone until the upstream
mirror catches up.

Rewrite the container's apt sources to point at us-west-2.ec2.archive.
ubuntu.com instead. The EC2 archive mirrors are Canonical-operated,
region-local to the runs-on instances, and sync aggressively, eliminating
the round-robin lottery as a CI failure mode.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-04-07 20:01:55 -06:00
Ramon Roche 4da1c11db9 fix(packaging): resolve host.docker.internal as IPv4 in SIH entrypoint
The SIH container entrypoint resolves host.docker.internal via getent
hosts and feeds the first result to mavlink -t and uxrce_dds_client -h.
On Docker Desktop for Windows the lookup can return an IPv6 ULA first,
and both PX4 modules only parse IPv4, so they error out with
'invalid partner ip' and PX4 boots with no working MAVLink or DDS link.

Switch to getent ahostsv4, which only returns IPv4 records, so the IP
injected into the startup scripts is always parseable.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-04-07 20:01:55 -06:00
Ramon Roche e4d46f20f4 ci(container): add build_ref input to allow dispatch against arbitrary refs
The current workflow_dispatch path builds whatever HEAD of the dispatch ref
is, labels the resulting image with px4_version, and publishes. That's
fine for rebuilding current state but it cannot rebuild the exact commit
a release tag points to, because the dispatch loads the workflow file
from one ref and implicitly checks out the same ref for the build.

This matters for release recovery. When the v1.17.0-rc2 tag push failed
to publish containers back on 2026-03-13 (the v1 GHA cache protocol
removal in RunsOn v2.12.0), the tag was not re-pushed, so the only way
to publish rc2 containers now is via workflow_dispatch. Without this
change, a dispatch against release/1.17 builds release/1.17 HEAD and
labels it v1.17.0-rc2, which produces a container whose contents do not
match the rc2 tag's actual code. That is not a faithful recovery.

Add a build_ref input that controls only the checkout ref, defaulting
to empty which falls back to github.ref (preserving current behavior
for both push events and dispatches that omit the input). With this,
a release recovery looks like:

  gh workflow run dev_container.yml --repo PX4/PX4-Autopilot \
    --ref release/1.17 \
    -f px4_version=v1.17.0-rc2 \
    -f build_ref=v1.17.0-rc2 \
    -f deploy_to_registry=true

The workflow loads from release/1.17 HEAD (which has the cache fix
from 39b0568 and the hardening from d74db56a), but the build uses
Tools/setup/Dockerfile from the rc2 tag. The published image has
rc2 contents under the rc2 label, as if the original tag push had
worked.

All three actions/checkout steps (setup, build, deploy) take the same
ref expression so every job sees a consistent workspace. Non-dispatch
events (push, PR) evaluate github.event.inputs.build_ref to empty and
fall back to github.ref exactly as before.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-04-07 17:26:47 -06:00
Ramon Roche 86f0dc2cb1 ci(ros): stop uploading test logs to logs.px4.io
Drops --upload from the ROS integration test runner so CI runs no
longer publish ULogs to the public logs.px4.io server on every run.
Failure debugging is unaffected: the existing Upload failed logs step
already captures logs as GitHub Actions artifacts on failure.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-04-07 16:41:19 -06:00
PX4BuildBot 6b8ee5cba4 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-07 21:11:49 +00:00
Onur Özkan 823f033abe refactor(mavlink): extract offboard control mode filling in mavlink receiver
Extract the repeated `offboard_control_mode_s` population logic into a shared
`fill_offboard_control_mode()` helper in MavlinkReceiver and, similar to
`fill_thrust()`, reuse it in both local and global position target handlers.

Reduces the code duplication without changing any behavior.

Signed-off-by: Onur Özkan <work@onurozkan.dev>
2026-04-07 13:04:51 -08:00
Ramon Roche d74db56a06 ci(container): harden dev_container workflow against cache-export flakes
Three related fixes to prevent a repeat of the v1.17.0-rc2 incident, where a
post-push GHA cache-export 404 failed the arm64 build after both registry
pushes had already succeeded, fail-fast cancelled amd64, and the deploy job
was skipped, leaving the registries with only a partial arm64 publish and no
multi-arch manifest.

- Mark cache export as non-fatal via ignore-error=true on cache-to. A
  successful registry push should never be undone by a cache-layer flake.
  This alone would have let rc2 publish correctly.

- Decouple the deploy job from the build job's exit code. Change its if:
  gate to !cancelled() + setup success only, and promote the existing
  "Verify Images Exist Before Creating Manifest" step from a warning into
  a hard precondition. Deploy now runs whenever both per-arch tags actually
  exist in the registries, which is its real precondition, and fails loudly
  if a tag is missing.

- Bump every action to the current major (runs-on/action v2,
  actions/checkout v5, docker/login-action v4, docker/setup-buildx-action v4,
  docker/build-push-action v7, docker/metadata-action v6). This gets the
  workflow off Node 20 before GitHub's June 2 2026 forced runtime switch
  and keeps runs-on/action on the same major as the runs-on platform.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-04-07 14:32:48 -06:00
PX4BuildBot 89e575ed34 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-07 19:56:42 +00:00
Nick c592af7e8e fix(parameters): show board_rot in show-for-airframe (#26989) 2026-04-07 11:48:52 -08:00
PX4BuildBot 461042f3f9 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-07 19:15:45 +00:00
Onur Özkan cf517f50d8 docs(control-allocator): clarify torque-triggered setpoint handling
Clarify the unclear intention of how torque and thrust are handled.

Signed-off-by: Onur Özkan <work@onurozkan.dev>
2026-04-07 11:08:09 -08:00
PX4BuildBot be631ed584 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-07 11:48:55 +00:00
Niklas Hauser 9e0cd2fcf3 Fix mtd command for very small partition sizes of just 32B 2026-04-07 13:42:12 +02:00
PX4BuildBot 44c128aade docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-05 10:41:00 +00:00
Andrew Wilkins 6912ae7b14 feat(test): fixed wing test cards (#26824) 2026-04-05 20:34:22 +10:00
PX4BuildBot f19adb896c docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-05 08:19:15 +00:00
PX4 Build Bot c3f90af3ef docs(i18n): PX4 guide translations (Crowdin) - ko (#26976)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2026-04-05 18:12:28 +10:00
PX4 Build Bot a5e55ffd75 docs(i18n): PX4 guide translations (Crowdin) - uk (#26977)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2026-04-05 18:12:10 +10:00
PX4 Build Bot 3b4df0aead docs(i18n): PX4 guide translations (Crowdin) - zh-CN (#26978)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2026-04-05 18:11:58 +10:00
PX4BuildBot 8576e07b73 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-04 19:52:21 +00:00
Anil Kircaliali 83c41dcf87 refactor(navigator): remove unused parameters from computeReturnAltitude (#26969)
* Remove unused parameters from function signature and make the parameter accessors consistent

* Update the caller function signature

* Update src/modules/navigator/rtl.cpp

---------

Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
2026-04-04 11:45:22 -08:00
PX4BuildBot 550b7148a5 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-04 08:09:27 +00:00
Jacob Dahl 047fddbcd8 fix(sensors): fix baro publish rate limiter aliasing (#26967)
Use timestamp_sample instead of time_now_us for the rate limiter check
to sync to the sensor clock rather than the wall clock.

Switch from direct timestamp assignment to epoch-advance
(_last_publication_timestamp += interval_us) with a catch-up guard to
prevent aliasing artifacts when the sensor sample rate is close to the
configured publication rate.
2026-04-04 00:02:21 -08:00
PX4BuildBot dd2530bb09 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-04 03:27:16 +00:00
Mirko Denecke 897ff241ce docs(sensor/airspeed): add UAV-DEV GmbH DroneCAN Airspeed and Barometer Sensor 2026-04-03 21:20:34 -06:00
Hamish Willee 6f18fa39e8 fix: template_module update to best practise 2026-04-03 21:14:55 -06:00
Pavel Guzenfeld 348a558a15 fix(navigator): correct mission resume waypoint with camera triggering
getPreviousPositionItems() already decrements the start index
internally before searching. The call in on_activation() at line 227
passed _inactivation_index - 1, causing a double-decrement that made
the vehicle resume at waypoint n-2 instead of n-1.

All other call sites (rtl_mission_fast_reverse.cpp:81,
rtl_mission_fast_reverse.cpp:133, mission_base.cpp:1149) pass the
index directly without pre-decrementing.

The bug has been present since commit 007ed11bbe (June 2023).

Closes #26795

Signed-off-by: Pavel Guzenfeld <pavelgu@gmail.com>
2026-04-03 21:10:11 -06:00
PX4BuildBot b412796fc7 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-04 03:03:41 +00:00
Silvan 6597c4680c feat(battery): enable use of BAT_n_I_OVERWRITE for all battery estimation sources
Signed-off-by: Silvan <silvan@auterion.com>
2026-04-03 20:57:05 -06:00
PX4BuildBot df8747eb10 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-03 21:15:36 +00:00
Jacob Dahl 04134dccab fix(uavcan): use node-published timestamps for CAN sensor bridges (#26945)
The FC-side DroneCAN sensor bridges (accel, gyro, rangefinder) used
hrt_absolute_time() in the receive callback as timestamp_sample,
adding ~3-16ms of systematic CAN transport delay.

For messages with a uavcan.Timestamp field, the cannode can publish
the actual sample time via UAVCAN GlobalTimeSync. The RawIMU publisher
already did this for IMU data; apply the same pattern to the range
sensor publisher, and update all three FC bridges to prefer the
message timestamp with a fallback to hrt_absolute_time() for nodes
that don't set it.
2026-04-03 13:08:24 -08:00
PX4BuildBot 4d0efccb55 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-03 18:38:09 +00:00
Baardrw 115f205cbc docs(gz_bridge): magnetometer device address documentation (#26940)
* fix: added comment explaining why dev id address can only be 3 or 4

* fix: change link to point to main px4 repo

* fix: typo

* formatted

* chore: formatting
2026-04-03 10:31:29 -08:00
Ramon Roche 039ec78d35 fix(ci): copy events metadata to top-level artifact directory
The packaging script only placed all_events.json.xz in an events/
subdirectory, but the firmware advertises the metadata URI at the
board directory top level. New build targets added after the
Jenkins-to-GHA migration had no legacy top-level copy, causing
QGC to get a 404 when fetching component metadata.

Fixes #26963

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-04-02 23:04:54 -06:00
PX4BuildBot 9cfd3a4506 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-03 01:03:39 +00:00
Ramon Roche 4281faa98a fix(docs): correct image path case mismatch in cuav_x25-evo pages
The asset file was renamed from X25-EVO.jpg to x25_evo.jpg in git but
all four locale files (en, ko, uk, zh) still referenced the old name.
macOS hid this because its filesystem is case-insensitive, but Linux CI
(case-sensitive) intermittently failed to resolve the reference during
Rollup bundling.

Fixes #26958

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-04-02 18:56:52 -06:00
PX4BuildBot 5189d42d68 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-02 23:37:34 +00:00
Jacob Dahl 9b6e7cb800 fix(ekf2): allow optical flow to start when range finder is height reference (#26960)
When EKF2_HGT_REF=2 (range sensor) with no GPS, optical flow could
never start. The starting condition required isTerrainEstimateValid()
or isHorizontalAidingActive(), but terrain is never "estimated" when
range is the height reference (ground is the datum, terrain state is
fixed at 0), and there's no horizontal aiding without GPS.

HAGL is directly known from the range measurement in this case, so
optical flow has everything it needs to fuse. Add the range height
reference check to the optical flow starting conditions.

Fixes: https://github.com/PX4/PX4-Autopilot/issues/25248
2026-04-02 15:30:24 -08:00
PX4BuildBot ed387555e9 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-02 21:10:45 +00:00
Ramon Roche dd03e18fee ci(packaging): publish container images with :latest tag
Add :latest tag alongside version tags for per-arch images and
multi-arch manifests on both Docker Hub and GHCR.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-04-02 15:03:04 -06:00
Ramon Roche 1079c57fd0 build(packaging): add PX4 SITL .deb packages
Add cmake/cpack infrastructure for building .deb packages from
px4_sitl_sih and px4_sitl_default targets. Includes install rules,
package scripts, Gazebo wrapper, and CI workflow.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-04-02 15:03:04 -06:00
Julian Oes ebe0b727d8 fix(kakuteh7-wing): fix BOARD_FLASH_SECTORS to protect param sectors (#26897)
Set BOARD_FLASH_SECTORS to 13 so the bootloader does not erase the
parameter sectors (14 and 15) during firmware updates. Previously set
to 14 which allowed the bootloader to erase sector 14, potentially
wiping stored parameters.
2026-04-03 09:22:48 +13:00
Anil Kircaliali ad895f7010 fix(setup): pin setuptools version to resolve pkg_resources ModuleNotFoundError (#26956) 2026-04-02 20:04:40 +02:00
Ramon Roche 685f9248e4 fix(sbom): fix false positives in monthly license audit
Three issues caused the monthly audit to report already-resolved submodules:

1. The audit workflow grepped for "NOASSERTION" anywhere in the output,
   matching the Detected column even when the Final column had a valid
   override (e.g. libtomcrypt detected as NOASSERTION but overridden to
   Unlicense). Changed to grep for "<-- UNRESOLVED" marker instead.

2. Submodules with an explicit NOASSERTION override in license-overrides.yaml
   (like libfc-sensor-api, which is proprietary) were still counted as
   failures. Now treated as "acknowledged" since someone intentionally
   added the override entry.

3. Added missing BSD-3-Clause override for sitl_gazebo-classic (PX4 org
   project with no LICENSE file in repo).

Fixes #26932

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-04-02 11:15:30 -06:00
PX4BuildBot 0ffa4e72ac docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-02 14:27:39 +00:00
Marco Hauswirth c8a1a38147 style(ekf2): minor style fixes 2026-04-02 16:20:19 +02:00
Marco Hauswirth 8624682db1 chore(boards): remove optical flow from holybro-kakutef7 build 2026-04-02 16:20:19 +02:00
Marco Hauswirth 4caee55a76 submodule(mavlink): update to latest mavlink/main to include ESTIMATOR_SENSOR_FUSION_STATUS, MAV_CMD_ESTIMATOR_SENSOR_ENABLE 2026-04-02 16:20:19 +02:00
Marco Hauswirth fffc1b5d04 test(ekf2): sync EkfWrapper with FusionControl enabled flags
EkfWrapper now holds a FusionControl pointer and enables all sensors
by default. Sensor-specific enable methods also set fc.enabled = true.
2026-04-02 16:20:19 +02:00
Marco Hauswirth 6a7e39aa64 feat(mavlink): ESTIMATOR_SENSOR_FUSION_STATUS stream
Add MAVLink stream that maps EstimatorFusionControl uORB message to
ESTIMATOR_SENSOR_FUSION_STATUS, exposing per-sensor intended/active
bitmasks to the GCS.
2026-04-02 16:20:19 +02:00
Marco Hauswirth 6306c78f79 feat(ekf2): EKF2_SENS_EN param, SensEnBit enum, MAVLink fusion command
Add EKF2_SENS_EN bitmask parameter (replaces EKF2_EN_BOOT) with
per-sensor enable bits. initFusionControl reads SENS_EN while disarmed.
handleSensorFusionCommand sets FusionSensor.enabled via
VEHICLE_CMD_ESTIMATOR_SENSOR_ENABLE. syncSensEnParam writes back to
param on disarm. Update EstimatorFusionControl.msg to bool
intended/active fields. Update VehicleCommand.msg FUSION_SOURCE enum.
2026-04-02 16:20:19 +02:00
Marco Hauswirth b9a1c429b3 refactor(ekf2): FusionSensor available/enabled/intended() data model
Split FusionSensor into available (CTRL param != disabled) and enabled
(runtime-toggleable). intended() = enabled && available. EKF core aid
sources now set available themselves and use intended() or _params
directly for CTRL-level checks. Remove drag/imu from FusionControl,
add aspd/rngbcn. Add AGP sourceFusingBitmask() for active-status.
2026-04-02 16:20:19 +02:00
Marco Hauswirth 0dd1640a54 feat(ekf2): enable fusion-ctrl toggle over mavlink cmd, CTRL param act only as reference 2026-04-02 16:20:19 +02:00
PX4BuildBot 2828162f72 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-02 09:56:18 +00:00
Nick 76eca4b7a4 feat(actuators): Control Flaps from AUX channel (#26913)
* feat(rc): flaps via AUX channel

* docs(actuators): add flaps and spoilers from RC

Co-authored-by: Silvan Fuhrer <silvan@auterion.com>

* docs(actuators): Update docs/en/payloads/generic_actuator_control.md

Co-authored-by: Hamish Willee <hamishwillee@gmail.com>

* docs(actuators): move flaps setup docs

---------

Co-authored-by: Silvan Fuhrer <silvan@auterion.com>
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2026-04-02 11:48:44 +02:00
PX4BuildBot 0b621009d5 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-02 09:27:30 +00:00
alexcekay 56c69f4c07 fix(mavftp): don't use cache for other sys/comp ids 2026-04-02 11:20:23 +02:00
alexcekay c7295c8a4f mtd: add px4_at24c_set_npages API 2026-04-02 10:59:08 +02:00
PX4BuildBot 3ba440c332 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-02 07:49:53 +00:00
Hamish Willee b04518c0bc Apply suggestions from code review
Co-authored-by: Nick <145654544+ttechnick@users.noreply.github.com>
2026-04-02 09:42:29 +02:00
Hamish Willee 45abdb14b3 Apply suggestions from code review
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2026-04-02 09:42:29 +02:00
Hamish Willee 701ac9b257 docs(update): Safetly settings for changes in ESC timeout handling 2026-04-02 09:42:29 +02:00
PX4BuildBot 6db00a2326 docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-02 07:35:28 +00:00
ttechnick 935a21d05c fix(fw_attitude_control): correct turn coordination 2026-04-02 09:28:44 +02:00
ttechnick d2e3668ad9 fix(fw_attitude_controller): fix typo 2026-04-02 09:28:44 +02:00
PX4BuildBot 541ee6f81d docs: auto-sync metadata [skip ci]
Co-Authored-By: PX4 BuildBot <bot@px4.io>
2026-04-02 03:31:59 +00:00
CUAV Chen 8b870e364e docs(docs): Update CUAV X25 Series Doc (#26882) 2026-04-02 14:24:42 +11:00
Ramon Roche b142342c3a ci(claude): add review-pr skill for domain-aware PR reviews (#26814)
* ci(claude): add review-pr skill for domain-aware PR reviews

Add a Claude Code skill that reviews pull requests with checks
tailored to the domains touched (estimation, control, drivers,
simulation, system, CI/build, messages, board additions).

Built from analysis of 800+ PR reviews across 8 PX4 maintainers.
Includes merge strategy recommendation, interactive dialog for
submitting reviews, and human-sounding PR comment formatting.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>

* ci(copilot): add domain-scoped review instructions for GitHub Copilot

Add .github/instructions/ files that give GitHub Copilot PR reviews
the same domain-aware context as the Claude Code review-pr skill.

Each file is scoped via applyTo to the relevant source paths:
core review, estimation, control, drivers/CAN, simulation, system,
CI/build, messages/protocol, and board additions.

Signed-off-by: Ramon Roche <mrpollo@gmail.com>

* fix(claude): address Copilot review feedback

- Fix step reference in review-pr skill (step 8 -> step 9)
- Capitalize CMake consistently in skill and Copilot instructions

Signed-off-by: Ramon Roche <mrpollo@gmail.com>

---------

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
2026-04-01 17:56:23 -07:00
232 changed files with 5596 additions and 1339 deletions
+207
View File
@@ -0,0 +1,207 @@
---
name: review-pr
description: Review a pull request with structured, domain-aware feedback
argument-hint: "<PR number or URL>"
allowed-tools: Bash, Read, Glob, Grep, Agent
---
# PX4 Pull Request Review
Review a pull request with domain-aware checks based on which files are changed.
**No Claude attribution anywhere.**
## Steps
1. **Fetch PR context.** Run these in parallel:
- `gh pr view <PR> --json number,title,body,baseRefName,headRefName,files,commits,reviewRequests,reviews,author`
- `gh pr checks <PR>` (exit code 8 means some checks are pending, this is normal, not an error)
- `gh pr diff <PR>` -- if this fails with HTTP 406 (300+ files), do NOT retry. Instead use `gh api repos/OWNER/REPO/pulls/NUMBER/files --paginate` to get the full file list in one call, then fetch patches for key infrastructure files individually and sample representative changes from each domain touched.
- `gh api repos/OWNER/REPO/pulls/NUMBER/comments --paginate --jq '.[] | {user: .user.login, body: .body, path: .path, created_at: .created_at}'` to get inline review comments
- `gh api repos/OWNER/REPO/issues/NUMBER/comments --paginate --jq '.[] | {user: .user.login, body: .body, created_at: .created_at}'` to get PR conversation comments
From the PR metadata, note:
- **Assigned reviewers**: who has been requested to review (from `reviewRequests`)
- **Existing reviews**: who has already reviewed and their verdict (from `reviews` -- approved, changes_requested, commented, dismissed)
- **PR comments and inline comments**: read all existing feedback to avoid duplicating points already raised by other reviewers, and to build on their discussion rather than ignoring it
2. **Check CI status.** From the `gh pr checks` output in step 1, summarize pass/fail/pending. If there are failures, fetch logs with `gh run view <run-id> --log-failed`. Include CI status in the output.
3. **Recommend merge strategy.** Analyze the commit history and recommend squash or rebase merge. This decision informs all subsequent commit hygiene feedback.
**Recommend rebase merge** when:
- Commits are atomic, each builds/works independently
- Each commit has a proper `type(scope): description` message
- The PR intentionally separates logical changes (e.g., refactor + feature, or one commit per module)
- The commit history tells a useful story that would be lost by squashing
**Recommend squash merge** when:
- There are WIP, fixup, or review-response commits
- Commit messages are messy or inconsistent
- The PR is a single logical change spread across multiple commits
- There are "oops" or "make format" commits mixed in
Include the recommendation in the output. If recommending rebase, flag any commits that break atomicity or have bad messages. If recommending squash, don't bother flagging individual commit messages (they'll be discarded) but ensure the PR title is correct since it becomes the squash commit message.
4. **Check conventional commit title.** Verify the PR title follows `type(scope): description` per CONTRIBUTING.md. The PR title becomes the commit message on squash-merge, so it must be accurate and descriptive. Verify the scope matches the primary area of changed files. If the PR introduces breaking changes, the title must include `!` before the colon. If rebase merge was recommended in step 3, also scan individual commit messages for anti-patterns: vague messages ("fix", "update"), missing type prefix, review-response noise ("apply suggestions from code review", "do make format"), or WIP markers. Flag these for rewording.
5. **Identify domains touched.** Classify changed files into domains based on paths (a PR may touch multiple):
- **Estimation**: `src/modules/ekf2/`, `src/lib/wind_estimator/`, `src/lib/world_magnetic_model/`
- **Control**: `src/modules/mc_*control*/`, `src/modules/fw_*control*/`, `src/modules/flight_mode_manager/`, `src/lib/rate_control/`, `src/lib/npfg/`, `src/modules/vtol_att_control/`
- **Drivers/CAN**: `src/drivers/`, `src/modules/cyphal/`, `src/drivers/uavcan*/`
- **Simulation**: `src/modules/simulation/`, `Tools/simulation/`
- **System**: `src/modules/commander/`, `src/modules/logger/`, `src/systemcmds/`, `platforms/`, `src/modules/dataman/`
- **Board Addition**: `boards/{manufacturer}/{board}/` (new directories only, not modifications to existing boards)
- **CI/Build**: `.github/`, `CMakeLists.txt`, `Makefile`, `cmake/`, `Tools/`, `Kconfig`
- **Messages/Protocol**: `msg/`, `src/modules/mavlink/`, `src/modules/uxrce_dds_client/`
6. **Apply core checks** (always):
- **Correctness**: logic errors, off-by-ones, unhandled edge cases
- **Type safety**: int16 overflow, float/double promotion, unsigned subtraction, use `uint64_t` for absolute time
- **Initialization**: uninitialized variables, missing default construction
- **Buffer safety**: unchecked array access, stack allocation of large buffers, snprintf bounds
- **Magic numbers**: every numeric literal needs a named constant or justification
- **Framework reuse**: use PX4_ERR/WARN/INFO, existing libraries (AlphaFilter, SlewRate, RateControl), MAVLink constants from the library
- **Naming**: accurate, no unjustified abbreviations, current terminology (GPS -> GNSS for new code)
- **Unnecessary complexity**: can code be removed instead of added? Is there a simpler pattern?
- **Test coverage**: new features should include unit or integration tests; bug fixes should include regression tests where practical. When automated testing is infeasible (hardware-specific), require a flight log link from https://logs.px4.io or bench test evidence.
- **PR hygiene**: focused scope, no unrelated formatting, no stale submodule changes. Commits should be atomic and independently revertable. Multiple WIP or review-response commits should be squashed. Clean, logical commits will be preserved individually on main via rebase merge. **Do NOT assume PRs are squash-merged. Both squash and rebase merge are enabled; merge commits are disabled.** Verify the PR targets `main` unless it is a backport or release-specific fix.
- **Formatting**: `make format` / `make check_format` (astyle) for C/C++ files; `clang-tidy` clean. Python files checked with `mypy` and `flake8`. PRs failing CI format or lint checks will not be merged.
- **Coding style**: C/C++ must follow the [PX4 coding style](https://docs.px4.io/main/en/contribute/code.html)
- **Necessity**: challenge every addition with "Why?" Is this actually needed or just copied? Can we change a default instead of adding runtime detection?
- **Root cause vs symptom**: is this fixing the real problem or masking it?
- **Ecosystem impact**: what does this change mean for QGC users, log analysis tools, and third-party integrations?
- **Sustainability**: who will maintain this? Does it create long-term burden?
- **Architecture fit**: does the code live in the module that naturally owns the data? Are there unnecessary cross-module dependencies?
- **End user impact**: will parameters confuse less-technical users? Are error messages actionable in QGC?
7. **Apply domain checks** based on step 5:
**Estimation:**
- Singularities in aerospace math (euler angles near gimbal lock, sideslip at low airspeed)
- Aliasing from downsampling sensor data without filtering
- Kalman filter correctness (Joseph form, innovation variance, covariance symmetry)
- CPU cost on embedded targets (avoid unnecessary sqrt, limit fusion rate)
- Frame/coordinate system correctness (FRD vs NED, body vs earth)
**Control:**
- Phase margin: output filters consume margin for no benefit; prefer adjusting gyro/d-gyro cutoffs
- Circular dependencies: sensor data feeding back into its own control loop (e.g., throttle-based airspeed in TECS)
- NaN propagation in flight-critical math; check `PX4_ISFINITE` before magnitude checks
- Setpoint generation vs output-stage hacks: prefer proper setpoint smoothing over controller output filtering
- Yaw control edge cases: heading lock, drift, setpoint propagation
- Flight task inheritance chain: correct base class for the desired behavior
- Control allocation: actuator function ordering, motor index mapping
**Drivers/CAN:**
- CAN bus devices behave differently from serial/SPI; check driver assumptions
- ESC index mapping: telemetry index != channel when motors are disabled
- ESC hardware quirks: 4-in-1 ESCs may report current on only one channel
- device_id correctness and I2CSPIDriver patterns
- Time representation: prefer `hrt_abstime` over iteration counts
**Simulation:**
- Physics fidelity: noise models should match reality (GPS noise is not Gaussian)
- Keep gz_bridge generic; vehicle-specific logic belongs in plugins
- Prefer gz-transport over ROS2 dependencies when possible
- Wrench commands for physics correctness vs kinematic constraints
- Library generic/specific boundary: only base classes in common libs
**System:**
- Race conditions and concurrency: no partial fixes, demand complete solutions
- Semaphore/scheduling edge cases; understand RTOS guarantees
- State machine sequential-logic bugs (consecutive RTL, armed/disarmed alternation)
- uORB-driven scheduling (`SubscriptionCallback`), not extra threads
- param_set triggers auto-save; no redundant param_save_default
- Flash/memory efficiency: avoid `std::string` on embedded, minimize SubscriptionData usage
- Constructor initialization order matters
**CI/Build:**
- Pipeline race conditions (tag + branch push double-trigger, git describe correctness)
- Container image size (check layer bloat)
- Ubuntu LTS support policy (latest + one prior only)
- Build time impact
- CMake preferred over Makefiles
**Messages/Protocol:**
- Backwards compatibility: will this break QGC, post-flight tools, or uLog parsers?
- uORB: `timestamp` for publication metadata, `timestamp_sample` close to physical sample, include `device_id`
- Don't version messages unless strictly needed
- Parameter UX: will this confuse users in a GCS? Every new param is a configuration burden
- MAVLink: use library constants, don't implement custom stream rates
**Board Addition:**
- **Flight logs**: require a link to https://logs.px4.io demonstrating basic operation for the vehicle type (hover for multicopters, stable flight for fixed-wing, driving for rovers, etc.); short bench-only logs are insufficient
- **Documentation**: require a docs page in `docs/en/flight_controller/` with pinout, where-to-buy, connector types, version badge, and manufacturer-supported notice block
- **USB VID/PID**: must not reuse another manufacturer's Vendor ID; manufacturer must use their own
- **Board naming**: directory is `boards/{manufacturer}/{board}/`, both lowercase, hyphens for board name
- **Unique board_id**: registered in `boards/boards.json`, no collisions
- **Copied code cleanup**: check for leftover files, configs, or comments from the template board; "Is this real or leftover?"
- **RC configuration**: prefer `CONFIG_DRIVERS_COMMON_RC` over legacy `CONFIG_DRIVERS_RC_INPUT`
- **No board-specific custom modules**: reject copy-pasted drivers (e.g., custom heater) when existing infrastructure works
- **Bootloader**: expect a bootloader defconfig (`nuttx-config/bootloader/defconfig`) or explanation of shared bootloader
- **CI integration**: board must be added to CI compile workflows so it builds on every PR
- **Flash constraints**: verify enabled modules fit in flash; we are running low across all board targets
- **Port labels**: serial port labels must match what is physically printed on the board
- **Hardware availability**: for unknown manufacturers, verify the product exists and is purchasable (no vaporware)
8. **Format output** as:
- **CI status**: pass/fail summary, link to failed runs if any
- **Merge strategy**: recommend squash or rebase merge with reasoning
- **Title check**: pass/fail with suggestion
- **Review status**: list assigned reviewers and any existing reviews (who approved, who requested changes, key points already raised). Note if your review would duplicate feedback already given.
- **Domains detected**: list which domain checks were applied
- **Summary**: one paragraph on what the PR does and whether the approach is sound
- **Issues**: numbered list, each with file:line, severity (blocker/warning/nit), and explanation. Skip issues already raised by other reviewers unless you have something to add.
- **Verdict**: approve, request changes, or needs discussion
After the structured output, also display a **draft PR comment** formatted using the PR comment formatting rules from step 9. This gives the user a preview of what would be posted.
9. **Interactive dialog.** After displaying the review, present the user with these options:
Present options based on the verdict:
If verdict is **approve**:
```
What would you like to do?
1. Chat about this PR (ask questions, explore code) [default]
2. Approve this PR and post the review comment
3. Adjust the review or draft (tell me what to change)
4. Done for now
```
If verdict is **request changes**:
```
What would you like to do?
1. Chat about this PR (ask questions, explore code) [default]
2. Request changes on this PR and post the review comment
3. Adjust the review or draft (tell me what to change)
4. Done for now
```
If verdict is **needs discussion**:
```
What would you like to do?
1. Chat about this PR (ask questions, explore code) [default]
2. Post the review as a comment (no approval or rejection)
3. Adjust the review or draft (tell me what to change)
4. Done for now
```
Wait for the user to choose before proceeding. If they pick:
- **1 (chat)**: enter a free-form conversation about the PR. The user can ask about specific files, code paths, or decisions. When done, loop back to the options. This is the default if the user just presses enter.
- **2 (submit)**: use the draft PR comment already shown. Before posting, check if you have review permissions: run `gh api repos/OWNER/REPO/collaborators/$(gh api user --jq .login)/permission --jq .permission` -- if `admin` or `write`, submit as a formal review with `gh pr review <PR> --approve --body "..."` or `gh pr review <PR> --request-changes --body "..."` based on the verdict. If no write access, fall back to `gh pr comment <PR> --body "..."`. Always confirm with the user before posting.
- **3 (adjust)**: ask what to change, update the review and draft, then loop back to the options.
- **4 (done)**: stop.
**PR comment formatting rules** (for the draft):
When writing the GitHub comment, rewrite the review to sound like a human reviewer, not a structured report. Do NOT include the full skill output. Instead:
- Drop most meta-sections (CI status, title check, domains detected, severity labels) but keep the merge strategy recommendation (e.g., "I'd suggest a rebase merge here since the commits are clean and atomic" or "This should be squash-merged, the commit history is messy")
- Write conversationally: "Nice work on this. A few things I noticed:" not "Issues: 1. file:line (warning):"
- Lead with a brief take on the overall change (1-2 sentences)
- List only actionable feedback as natural review comments, not numbered checklists
- Skip nits unless they are particularly useful
- End with a clear stance: looks good to merge, needs a few changes, or let's discuss X
- Post with `gh pr comment <PR> --body "$(cat <<'EOF' ... EOF)"`. Do not post without explicit confirmation.
If the user provided arguments, use them as context: $ARGUMENTS
+1
View File
@@ -0,0 +1 @@
build/
+115
View File
@@ -0,0 +1,115 @@
name: Build PX4 .deb Package
description: Build PX4 SITL, run cpack, validate the .deb, and upload artifact
inputs:
target:
description: 'Build target: default or sih'
required: true
artifact-name:
description: Name for the uploaded artifact
required: true
ccache-key-prefix:
description: Prefix for ccache cache keys
default: deb-ccache
ccache-max-size:
description: Maximum ccache size
default: 400M
runs:
using: composite
steps:
- name: Restore ccache
id: ccache-restore
uses: actions/cache/restore@v4
with:
path: ~/.ccache
key: ${{ inputs.ccache-key-prefix }}-${{ github.ref_name }}-${{ github.sha }}
restore-keys: |
${{ inputs.ccache-key-prefix }}-${{ github.ref_name }}-
${{ inputs.ccache-key-prefix }}-${{ github.base_ref || 'main' }}-
${{ inputs.ccache-key-prefix }}-
- name: Configure ccache
shell: bash
run: |
mkdir -p ~/.ccache
echo "base_dir = ${GITHUB_WORKSPACE}" > ~/.ccache/ccache.conf
echo "compression = true" >> ~/.ccache/ccache.conf
echo "compression_level = 6" >> ~/.ccache/ccache.conf
echo "max_size = ${{ inputs.ccache-max-size }}" >> ~/.ccache/ccache.conf
echo "hash_dir = false" >> ~/.ccache/ccache.conf
echo "compiler_check = content" >> ~/.ccache/ccache.conf
ccache -s
ccache -z
- name: Build PX4 SITL
shell: bash
run: make px4_sitl_${{ inputs.target }}
- name: ccache stats
if: always()
shell: bash
run: ccache -s
- name: Save ccache
uses: actions/cache/save@v4
if: always()
with:
path: ~/.ccache
key: ${{ inputs.ccache-key-prefix }}-${{ github.ref_name }}-${{ github.sha }}
- name: Build .deb package
shell: bash
run: |
cd build/px4_sitl_${{ inputs.target }}
cpack -G DEB
- name: Print package info and contents
shell: bash
run: |
cd build/px4_sitl_${{ inputs.target }}
echo "--- Package info ---"
dpkg-deb -I *.deb
echo "--- Package contents ---"
dpkg-deb -c *.deb
- name: Validate sih package
if: inputs.target == 'sih'
shell: bash
run: |
cd build/px4_sitl_sih
echo "--- Verify NO Gazebo resources ---"
! dpkg-deb -c px4_*.deb | grep share/gz > /dev/null && echo "PASS: no Gazebo" || { echo "FAIL: Gazebo found"; exit 1; }
echo "--- Install test ---"
dpkg -i px4_*.deb
test -x /opt/px4/bin/px4 || { echo "FAIL: px4 binary not found"; exit 1; }
test -L /usr/bin/px4 || { echo "FAIL: symlink not created"; exit 1; }
test ! -d /opt/px4/share/gz || { echo "FAIL: Gazebo dir should not exist"; exit 1; }
echo "--- Smoke test ---"
/opt/px4/bin/px4 -h
echo "PASS: sih package validation successful"
- name: Validate gazebo package
if: inputs.target == 'default'
shell: bash
run: |
cd build/px4_sitl_default
echo "--- Verify Gazebo resources in package ---"
dpkg-deb -c px4-gazebo_*.deb | grep share/gz/models > /dev/null || { echo "FAIL: models missing"; exit 1; }
dpkg-deb -c px4-gazebo_*.deb | grep share/gz/worlds > /dev/null || { echo "FAIL: worlds missing"; exit 1; }
echo "--- Install test ---"
dpkg -i px4-gazebo_*.deb
test -x /opt/px4-gazebo/bin/px4 || { echo "FAIL: px4 binary not found"; exit 1; }
test -x /opt/px4-gazebo/bin/px4-gazebo || { echo "FAIL: wrapper not found"; exit 1; }
test -L /usr/bin/px4-gazebo || { echo "FAIL: symlink not created"; exit 1; }
test -d /opt/px4-gazebo/share/gz/models || { echo "FAIL: Gazebo models not installed"; exit 1; }
echo "--- Smoke test ---"
/opt/px4-gazebo/bin/px4 -h
echo "PASS: gazebo package validation successful"
- name: Upload .deb artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.artifact-name }}
path: build/px4_sitl_${{ inputs.target }}/*.deb
if-no-files-found: error
@@ -0,0 +1,21 @@
---
applyTo: "boards/**"
---
# Board Addition Review Guidelines
In addition to the core code review guidelines, when reviewing new board additions:
- **Flight logs**: require a link to https://logs.px4.io demonstrating basic operation for the vehicle type (hover for multicopters, stable flight for fixed-wing, driving for rovers, etc.); short bench-only logs are insufficient
- **Documentation**: require a docs page in `docs/en/flight_controller/` with pinout, where-to-buy, connector types, version badge, and manufacturer-supported notice block
- **USB VID/PID**: must not reuse another manufacturer's Vendor ID; manufacturer must use their own
- **Board naming**: directory is `boards/{manufacturer}/{board}/`, both lowercase, hyphens for board name
- **Unique board_id**: registered in `boards/boards.json`, no collisions
- **Copied code cleanup**: check for leftover files, configs, or comments from the template board. Ask "Is this real or leftover?"
- **RC configuration**: prefer `CONFIG_DRIVERS_COMMON_RC` over legacy `CONFIG_DRIVERS_RC_INPUT`
- **No board-specific custom modules**: reject copy-pasted drivers (e.g., custom heater) when existing infrastructure works
- **Bootloader**: expect a bootloader defconfig (`nuttx-config/bootloader/defconfig`) or explanation of shared bootloader
- **CI integration**: board must be added to CI compile workflows so it builds on every PR
- **Flash constraints**: verify enabled modules fit in flash; we are running low across all board targets
- **Port labels**: serial port labels must match what is physically printed on the board
- **Hardware availability**: for unknown manufacturers, verify the product exists and is purchasable (no vaporware)
@@ -0,0 +1,13 @@
---
applyTo: ".github/**,cmake/**,Makefile,CMakeLists.txt,Tools/**,**/Kconfig"
---
# CI/Build Review Guidelines
In addition to the core code review guidelines:
- Check for pipeline race conditions (tag + branch push double-trigger, git describe correctness)
- Container image size: check for layer bloat
- Ubuntu LTS support policy: only latest + one prior LTS version
- Consider build time impact of changes
- Prefer CMake over Makefiles
@@ -0,0 +1,32 @@
---
applyTo: "src/**,boards/**,platforms/**,msg/**,cmake/**,Makefile,CMakeLists.txt,Tools/**,.github/**"
---
# PX4 Code Review Guidelines
## Conventions
- PR titles must follow conventional commits: `type(scope): description` (see CONTRIBUTING.md)
- Types: `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`, `chore`, `revert`
- Scope should match the primary area of changed files
- Append `!` before the colon for breaking changes
- Both squash merge and rebase merge are enabled; merge commits are disabled
- Commits should be atomic and independently revertable
- WIP or review-response commits should be squashed before merge
## Core Checks (always apply)
- **Correctness**: logic errors, off-by-ones, unhandled edge cases
- **Type safety**: int16 overflow, float/double promotion, unsigned subtraction, use `uint64_t` for absolute time
- **Initialization**: uninitialized variables, missing default construction
- **Buffer safety**: unchecked array access, stack allocation of large buffers, snprintf bounds
- **Magic numbers**: every numeric literal needs a named constant or justification
- **Framework reuse**: use PX4_ERR/WARN/INFO, existing libraries (AlphaFilter, SlewRate, RateControl), MAVLink constants from the library
- **Naming**: accurate, no unjustified abbreviations, current terminology (GPS -> GNSS for new code)
- **Unnecessary complexity**: can code be removed instead of added? Is there a simpler pattern?
- **Test coverage**: new features should include unit or integration tests; bug fixes should include regression tests where practical
- **Formatting**: `make format` / `make check_format` (astyle) for C/C++ files; `clang-tidy` clean
- **Coding style**: C/C++ must follow the PX4 coding style (https://docs.px4.io/main/en/contribute/code.html)
- **Necessity**: challenge every addition. Is this actually needed or just copied?
- **Architecture fit**: does the code live in the module that naturally owns the data? No unnecessary cross-module dependencies
- **Ecosystem impact**: consider QGC users, log analysis tools, and third-party integrations
@@ -0,0 +1,15 @@
---
applyTo: "src/modules/mc_*control*/**,src/modules/fw_*control*/**,src/modules/flight_mode_manager/**,src/lib/rate_control/**,src/lib/npfg/**,src/modules/vtol_att_control/**"
---
# Control Review Guidelines
In addition to the core code review guidelines:
- Phase margin: output filters consume margin for no benefit; prefer adjusting gyro/d-gyro cutoffs
- Check for circular dependencies: sensor data feeding back into its own control loop (e.g., throttle-based airspeed in TECS)
- NaN propagation in flight-critical math; check `PX4_ISFINITE` before magnitude checks
- Prefer proper setpoint smoothing over controller output filtering (setpoint generation vs output-stage hacks)
- Check yaw control edge cases: heading lock, drift, setpoint propagation
- Verify flight task inheritance chain uses the correct base class for desired behavior
- Control allocation: verify actuator function ordering and motor index mapping
@@ -0,0 +1,13 @@
---
applyTo: "src/drivers/**,src/modules/cyphal/**"
---
# Drivers/CAN Review Guidelines
In addition to the core code review guidelines:
- CAN bus devices behave differently from serial/SPI; check driver assumptions
- ESC index mapping: telemetry index != channel when motors are disabled
- ESC hardware quirks: 4-in-1 ESCs may report current on only one channel
- Verify device_id correctness and I2CSPIDriver patterns
- Time representation: prefer `hrt_abstime` over iteration counts
@@ -0,0 +1,13 @@
---
applyTo: "src/modules/ekf2/**,src/lib/wind_estimator/**,src/lib/world_magnetic_model/**"
---
# Estimation Review Guidelines
In addition to the core code review guidelines:
- Check for singularities in aerospace math (euler angles near gimbal lock, sideslip at low airspeed)
- Flag aliasing from downsampling sensor data without proper filtering
- Verify Kalman filter correctness (Joseph form, innovation variance, covariance symmetry)
- Consider CPU cost on embedded targets (avoid unnecessary sqrt, limit fusion rate)
- Verify frame/coordinate system correctness (FRD vs NED, body vs earth frame)
@@ -0,0 +1,13 @@
---
applyTo: "msg/**,src/modules/mavlink/**,src/modules/uxrce_dds_client/**"
---
# Messages/Protocol Review Guidelines
In addition to the core code review guidelines:
- Backwards compatibility: will this break QGC, post-flight tools, or uLog parsers?
- uORB: `timestamp` for publication metadata, `timestamp_sample` close to physical sample, include `device_id`
- Don't version messages unless strictly needed
- Parameter UX: will this confuse users in a GCS? Every new param is a configuration burden
- MAVLink: use library constants, don't implement custom stream rates
@@ -0,0 +1,13 @@
---
applyTo: "src/modules/simulation/**,Tools/simulation/**"
---
# Simulation Review Guidelines
In addition to the core code review guidelines:
- Physics fidelity: noise models should match reality (GPS noise is not Gaussian)
- Keep gz_bridge generic; vehicle-specific logic belongs in plugins
- Prefer gz-transport over ROS2 dependencies when possible
- Use wrench commands for physics correctness vs kinematic constraints
- Library generic/specific boundary: only base classes in common libs
@@ -0,0 +1,15 @@
---
applyTo: "src/modules/commander/**,src/modules/logger/**,src/systemcmds/**,platforms/**,src/modules/dataman/**"
---
# System Review Guidelines
In addition to the core code review guidelines:
- Race conditions and concurrency: no partial fixes, demand complete solutions
- Semaphore/scheduling edge cases; understand RTOS guarantees
- State machine sequential-logic bugs (consecutive RTL, armed/disarmed alternation)
- Use uORB-driven scheduling (`SubscriptionCallback`), not extra threads
- `param_set` triggers auto-save; no redundant `param_save_default`
- Flash/memory efficiency: avoid `std::string` on embedded, minimize SubscriptionData usage
- Constructor initialization order matters
+220
View File
@@ -0,0 +1,220 @@
name: SITL Packages and Containers
on:
push:
tags: ['v*']
pull_request:
paths:
- 'cmake/package.cmake'
- 'platforms/posix/CMakeLists.txt'
- 'Tools/packaging/**'
- 'boards/px4/sitl/sih.px4board'
- '.github/workflows/build_deb_package.yml'
- '.github/actions/build-deb/**'
workflow_dispatch:
inputs:
deploy_containers:
description: 'Push container images to registry'
required: false
type: boolean
default: false
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
packages: write
jobs:
# ---------------------------------------------------------------------------
# Setup: extract version and determine whether to push containers
# ---------------------------------------------------------------------------
setup:
name: Setup
runs-on: [runs-on,"runner=1cpu-linux-x64","image=ubuntu24-full-x64","run-id=${{ github.run_id }}",extras=s3-cache,spot=false]
outputs:
px4_version: ${{ steps.version.outputs.px4_version }}
should_push: ${{ steps.push.outputs.should_push }}
steps:
- uses: runs-on/action@v2
- uses: actions/checkout@v4
with:
fetch-tags: true
submodules: false
fetch-depth: 0
- name: Set PX4 version
id: version
run: echo "px4_version=$(git describe --tags --match 'v[0-9]*')" >> $GITHUB_OUTPUT
- name: Check if we should push containers
id: push
run: |
if [[ "${{ startsWith(github.ref, 'refs/tags/') }}" == "true" ]] || \
[[ "${{ github.event_name }}" == "workflow_dispatch" && "${{ github.event.inputs.deploy_containers }}" == "true" ]]; then
echo "should_push=true" >> $GITHUB_OUTPUT
else
echo "should_push=false" >> $GITHUB_OUTPUT
fi
# ---------------------------------------------------------------------------
# Build .deb packages (all distros, arches, targets)
# ---------------------------------------------------------------------------
build-deb:
name: "Build .deb (${{ matrix.target }}/${{ matrix.codename }}/${{ matrix.arch }})"
needs: setup
runs-on: [runs-on,"runner=4cpu-linux-${{ matrix.runner }}","image=ubuntu24-full-${{ matrix.runner }}","run-id=${{ github.run_id }}",extras=s3-cache,spot=false]
container:
image: ${{ matrix.container }}
volumes:
- /github/workspace:/github/workspace
strategy:
fail-fast: false
matrix:
include:
- { codename: noble, arch: amd64, runner: x64, container: "ubuntu:24.04", target: default, setup_flags: "" }
- { codename: noble, arch: arm64, runner: arm64, container: "ubuntu:24.04", target: default, setup_flags: "" }
- { codename: jammy, arch: amd64, runner: x64, container: "ubuntu:22.04", target: default, setup_flags: "" }
- { codename: jammy, arch: arm64, runner: arm64, container: "ubuntu:22.04", target: default, setup_flags: "" }
- { codename: noble, arch: amd64, runner: x64, container: "ubuntu:24.04", target: sih, setup_flags: "--no-sim-tools" }
- { codename: noble, arch: arm64, runner: arm64, container: "ubuntu:24.04", target: sih, setup_flags: "--no-sim-tools" }
- { codename: jammy, arch: amd64, runner: x64, container: "ubuntu:22.04", target: sih, setup_flags: "--no-sim-tools" }
- { codename: jammy, arch: arm64, runner: arm64, container: "ubuntu:22.04", target: sih, setup_flags: "--no-sim-tools" }
env:
RUNS_IN_DOCKER: true
steps:
- uses: runs-on/action@v2
- name: Fix git in container
run: |
apt-get update && apt-get install -y git
git config --global --add safe.directory $(realpath .)
- uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
- name: Use AWS regional apt mirror
if: startsWith(runner.name, 'runs-on--')
run: ./Tools/ci/use_aws_apt_mirror.sh
- name: Cache apt packages
uses: actions/cache@v4
with:
path: /var/cache/apt/archives
key: apt-${{ matrix.target }}-${{ matrix.codename }}-${{ matrix.arch }}-${{ hashFiles('Tools/setup/ubuntu.sh') }}
restore-keys: apt-${{ matrix.target }}-${{ matrix.codename }}-${{ matrix.arch }}-
- name: Install dependencies
run: ./Tools/setup/ubuntu.sh --no-nuttx ${{ matrix.setup_flags }}
- name: Build and package .deb
uses: ./.github/actions/build-deb
with:
target: ${{ matrix.target }}
artifact-name: px4-sitl-debs-${{ matrix.target }}-${{ matrix.codename }}-${{ matrix.arch }}
ccache-key-prefix: deb-ccache-${{ matrix.target }}-${{ matrix.codename }}-${{ matrix.arch }}
# ---------------------------------------------------------------------------
# Build Docker images from Noble .debs
# ---------------------------------------------------------------------------
build-docker:
name: "Build Image (${{ matrix.image }}/${{ matrix.arch }})"
needs: [setup, build-deb]
runs-on: [runs-on,"runner=4cpu-linux-${{ matrix.runner }}","image=ubuntu24-full-${{ matrix.runner }}","run-id=${{ github.run_id }}",extras=s3-cache,spot=false]
strategy:
fail-fast: false
matrix:
include:
- { image: sih, repo: px4-sitl, target: sih, arch: amd64, runner: x64, platform: "linux/amd64", dockerfile: Dockerfile.sih }
- { image: sih, repo: px4-sitl, target: sih, arch: arm64, runner: arm64, platform: "linux/arm64", dockerfile: Dockerfile.sih }
- { image: gazebo, repo: px4-sitl-gazebo, target: default, arch: amd64, runner: x64, platform: "linux/amd64", dockerfile: Dockerfile.gazebo }
- { image: gazebo, repo: px4-sitl-gazebo, target: default, arch: arm64, runner: arm64, platform: "linux/arm64", dockerfile: Dockerfile.gazebo }
steps:
- uses: runs-on/action@v2
- uses: actions/checkout@v4
with:
submodules: false
fetch-depth: 1
- name: Download Noble .deb artifact
uses: actions/download-artifact@v4
with:
name: px4-sitl-debs-${{ matrix.target }}-noble-${{ matrix.arch }}
path: docker-context
- name: Prepare build context
run: cp Tools/packaging/px4-entrypoint.sh docker-context/
- name: Login to registries
if: needs.setup.outputs.should_push == 'true'
run: |
echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker-container
platforms: ${{ matrix.platform }}
- name: Build and push container image
uses: docker/build-push-action@v6
with:
context: docker-context
file: Tools/packaging/${{ matrix.dockerfile }}
tags: |
px4io/${{ matrix.repo }}:${{ needs.setup.outputs.px4_version }}-${{ matrix.arch }}
px4io/${{ matrix.repo }}:latest-${{ matrix.arch }}
ghcr.io/px4/${{ matrix.repo }}:${{ needs.setup.outputs.px4_version }}-${{ matrix.arch }}
ghcr.io/px4/${{ matrix.repo }}:latest-${{ matrix.arch }}
platforms: ${{ matrix.platform }}
load: false
push: ${{ needs.setup.outputs.should_push == 'true' }}
provenance: false
cache-from: type=gha,scope=sitl-${{ matrix.image }}-${{ matrix.arch }}
cache-to: type=gha,mode=max,scope=sitl-${{ matrix.image }}-${{ matrix.arch }}
# ---------------------------------------------------------------------------
# Deploy: create multi-arch manifests and push to registries
# ---------------------------------------------------------------------------
deploy:
name: "Deploy (${{ matrix.image }})"
needs: [setup, build-docker]
if: needs.setup.outputs.should_push == 'true'
runs-on: [runs-on,"runner=1cpu-linux-x64","image=ubuntu24-full-x64","run-id=${{ github.run_id }}",extras=s3-cache,spot=false]
strategy:
matrix:
include:
- { image: sih, repo: px4-sitl }
- { image: gazebo, repo: px4-sitl-gazebo }
steps:
- uses: runs-on/action@v2
- name: Login to registries
run: |
echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin
- name: Create and push multi-arch manifests
run: |
VERSION="${{ needs.setup.outputs.px4_version }}"
for REGISTRY in px4io ghcr.io/px4; do
IMAGE="${REGISTRY}/${{ matrix.repo }}"
for TAG in ${VERSION} latest; do
docker manifest create ${IMAGE}:${TAG} \
--amend ${IMAGE}:${TAG}-arm64 \
--amend ${IMAGE}:${TAG}-amd64
docker manifest annotate ${IMAGE}:${TAG} ${IMAGE}:${TAG}-arm64 --arch arm64
docker manifest annotate ${IMAGE}:${TAG} ${IMAGE}:${TAG}-amd64 --arch amd64
docker manifest push ${IMAGE}:${TAG}
done
done
+4
View File
@@ -49,6 +49,10 @@ jobs:
- uses: actions/checkout@v4
- name: Use AWS regional apt mirror
if: startsWith(runner.name, 'runs-on--')
run: ./Tools/ci/use_aws_apt_mirror.sh
- name: Install Deps, Build, and Make Quick Check
run: |
# we need to install dependencies and build on the same step
+30 -19
View File
@@ -24,6 +24,11 @@ on:
description: 'Container tag (e.g. v1.16.0)'
required: true
type: string
build_ref:
description: 'Git ref to build from (branch, tag, or SHA). Leave empty to build from the dispatch ref.'
required: false
type: string
default: ''
deploy_to_registry:
description: 'Whether to push built images to the registry'
required: false
@@ -45,9 +50,10 @@ jobs:
meta_tags: ${{ steps.meta.outputs.tags }}
meta_labels: ${{ steps.meta.outputs.labels }}
steps:
- uses: runs-on/action@v1
- uses: actions/checkout@v4
- uses: runs-on/action@v2
- uses: actions/checkout@v5
with:
ref: ${{ github.event.inputs.build_ref || github.ref }}
fetch-tags: true
submodules: false
fetch-depth: 0
@@ -64,7 +70,7 @@ jobs:
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
uses: docker/metadata-action@v6
with:
images: |
ghcr.io/PX4/px4-dev
@@ -89,22 +95,23 @@ jobs:
runner: x64
runs-on: [runs-on,"runner=4cpu-linux-${{ matrix.runner }}","image=ubuntu24-full-${{ matrix.runner }}","run-id=${{ github.run_id }}",extras=s3-cache,spot=false]
steps:
- uses: runs-on/action@v1
- uses: actions/checkout@v4
- uses: runs-on/action@v2
- uses: actions/checkout@v5
with:
ref: ${{ github.event.inputs.build_ref || github.ref }}
fetch-tags: true
submodules: false
fetch-depth: 0
- name: Login to Docker Hub
uses: docker/login-action@v3
uses: docker/login-action@v4
if: ${{ startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch' && github.event.inputs.deploy_to_registry) }}
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
uses: docker/login-action@v4
if: ${{ startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch' && github.event.inputs.deploy_to_registry) }}
with:
registry: ghcr.io
@@ -112,13 +119,13 @@ jobs:
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4
with:
driver: docker-container
platforms: ${{ matrix.platform }}
- name: Build and Load Container Image
uses: docker/build-push-action@v6
uses: docker/build-push-action@v7
id: docker
with:
context: Tools/setup
@@ -131,7 +138,7 @@ jobs:
push: ${{ startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch' && github.event.inputs.deploy_to_registry) }}
provenance: false
cache-from: type=gha,scope=${{ matrix.arch }}
cache-to: type=gha,mode=max,scope=${{ matrix.arch }}
cache-to: type=gha,mode=max,scope=${{ matrix.arch }},ignore-error=true
deploy:
name: Deploy To Registry
@@ -140,23 +147,27 @@ jobs:
packages: write
runs-on: [runs-on,"runner=4cpu-linux-x64","image=ubuntu24-full-x64","run-id=${{ github.run_id }}",extras=s3-cache,spot=false]
needs: [build, setup]
if: ${{ startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch' && github.event.inputs.deploy_to_registry) }}
if: |
!cancelled() &&
needs.setup.result == 'success' &&
(startsWith(github.ref, 'refs/tags/') || (github.event_name == 'workflow_dispatch' && github.event.inputs.deploy_to_registry == 'true'))
steps:
- uses: runs-on/action@v1
- uses: actions/checkout@v4
- uses: runs-on/action@v2
- uses: actions/checkout@v5
with:
ref: ${{ github.event.inputs.build_ref || github.ref }}
fetch-tags: true
submodules: false
fetch-depth: 0
- name: Login to Docker Hub
uses: docker/login-action@v3
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.actor }}
@@ -164,10 +175,10 @@ jobs:
- name: Verify Images Exist Before Creating Manifest
run: |
docker manifest inspect px4io/px4-dev:${{ needs.setup.outputs.px4_version }}-arm64 || echo "⚠️ Warning: No ARM64 image found!"
docker manifest inspect px4io/px4-dev:${{ needs.setup.outputs.px4_version }}-amd64 || echo "⚠️ Warning: No AMD64 image found!"
docker manifest inspect ghcr.io/px4/px4-dev:${{ needs.setup.outputs.px4_version }}-arm64 || echo "⚠️ Warning: No ARM64 image found!"
docker manifest inspect ghcr.io/px4/px4-dev:${{ needs.setup.outputs.px4_version }}-amd64 || echo "⚠️ Warning: No AMD64 image found!"
docker manifest inspect px4io/px4-dev:${{ needs.setup.outputs.px4_version }}-arm64
docker manifest inspect px4io/px4-dev:${{ needs.setup.outputs.px4_version }}-amd64
docker manifest inspect ghcr.io/px4/px4-dev:${{ needs.setup.outputs.px4_version }}-arm64
docker manifest inspect ghcr.io/px4/px4-dev:${{ needs.setup.outputs.px4_version }}-amd64
- name: Create and Push Multi-Arch Manifest for Docker Hub
run: |
+4 -2
View File
@@ -89,7 +89,9 @@ jobs:
. /opt/ros/galactic/setup.bash
mkdir -p /opt/px4_ws/src
cd /opt/px4_ws/src
BRANCH="${GITHUB_HEAD_REF:-$GITHUB_REF_NAME}"
# On a PR, target the branch we're merging into (main or release/X.Y).
# On a direct push, fall back to the branch we're running on.
BRANCH="${GITHUB_BASE_REF:-$GITHUB_REF_NAME}"
REPO_URL="https://github.com/Auterion/px4-ros2-interface-lib.git"
if git ls-remote --heads "$REPO_URL" "$BRANCH" | grep -q "$BRANCH"; then
echo "Cloning px4-ros2-interface-lib with matching branch: $BRANCH"
@@ -130,7 +132,7 @@ jobs:
run: |
. /opt/px4_ws/install/setup.bash
/opt/Micro-XRCE-DDS-Agent/build/MicroXRCEAgent udp4 localhost -p 8888 -v 0 &
test/ros_test_runner.py --verbose --model iris --upload --force-color
test/ros_test_runner.py --verbose --model iris --force-color
timeout-minutes: 45
- name: Upload failed logs
+3 -3
View File
@@ -39,10 +39,10 @@ jobs:
- name: Check for issues
id: check
run: |
if grep -q "NOASSERTION" /tmp/sbom-verify.txt; then
if grep -q "<-- UNRESOLVED" /tmp/sbom-verify.txt; then
echo "has_issues=true" >> "$GITHUB_OUTPUT"
# Extract NOASSERTION lines
grep "NOASSERTION" /tmp/sbom-verify.txt | grep -v "skipped" > /tmp/sbom-issues.txt || true
# Extract only genuinely unresolved license lines
grep "<-- UNRESOLVED" /tmp/sbom-verify.txt > /tmp/sbom-issues.txt || true
# Extract copyleft lines
sed -n '/Copyleft licenses detected/,/^$/p' /tmp/sbom-verify.txt > /tmp/sbom-copyleft.txt || true
else
+57 -20
View File
@@ -2,45 +2,82 @@
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
Examples of behavior that contributes to a positive environment for our community include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall community
Examples of unacceptable behavior by participants include:
Examples of unacceptable behavior include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* The use of sexualized language or imagery, and sexual attention or advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Publishing others' private information, such as a physical or email address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
## Enforcement Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at lorenz@px4.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at coc@dronecode.org. All complaints will be reviewed and investigated promptly and fairly.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of actions.
**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/
Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
+4
View File
@@ -220,6 +220,10 @@ menu "examples"
source "src/examples/Kconfig"
endmenu
menu "templates"
source "src/templates/Kconfig"
endmenu
menu "platforms"
depends on PLATFORM_QURT || PLATFORM_POSIX || PLATFORM_NUTTX
source "platforms/Kconfig"
+25 -4
View File
@@ -9,11 +9,16 @@
</p>
<p align="center">
<a href="https://github.com/PX4/PX4-Autopilot/releases"><img src="https://img.shields.io/github/release/PX4/PX4-Autopilot.svg" alt="Releases"></a>
<a href="https://www.bestpractices.dev/projects/6520"><img src="https://www.bestpractices.dev/projects/6520/badge" alt="OpenSSF Best Practices"></a>
<a href="https://github.com/PX4/PX4-Autopilot/releases"><img src="https://img.shields.io/github/release/PX4/PX4-Autopilot.svg" alt="Release"></a>
<a href="https://zenodo.org/badge/latestdoi/22634/PX4/PX4-Autopilot"><img src="https://zenodo.org/badge/22634/PX4/PX4-Autopilot.svg" alt="DOI"></a>
<a href="https://github.com/PX4/PX4-Autopilot/actions/workflows/build_all_targets.yml"><img src="https://github.com/PX4/PX4-Autopilot/actions/workflows/build_all_targets.yml/badge.svg?branch=main" alt="Build Targets"></a>
<a href="https://discord.gg/dronecode"><img src="https://discordapp.com/api/guilds/1022170275984457759/widget.png?style=shield" alt="Discord"></a>
<a href="https://discord.gg/dronecode"><img src="https://img.shields.io/discord/1022170275984457759?label=discord&logo=discord&logoColor=white&color=5865F2" alt="Discord"></a>
</p>
<p align="center">
<a href="https://www.bestpractices.dev/projects/6520"><img src="https://www.bestpractices.dev/projects/6520/badge" alt="OpenSSF Best Practices"></a>
<a href="https://insights.linuxfoundation.org/project/px4"><img src="https://insights.linuxfoundation.org/api/badge/health-score?project=px4" alt="LFX Health Score"></a>
<a href="https://insights.linuxfoundation.org/project/px4"><img src="https://insights.linuxfoundation.org/api/badge/contributors?project=px4" alt="LFX Contributors"></a>
<a href="https://insights.linuxfoundation.org/project/px4"><img src="https://insights.linuxfoundation.org/api/badge/active-contributors?project=px4" alt="LFX Active Contributors"></a>
</p>
---
@@ -99,6 +104,22 @@ make px4_sitl
We welcome contributions of all kinds — bug reports, documentation, new features, and code reviews. Please read the [Contribution Guide](https://docs.px4.io/main/en/contribute/) to get started.
## Citation
If you use PX4 in academic work, please cite it. BibTeX:
```bibtex
@software{px4_autopilot,
author = {Meier, Lorenz and {The PX4 Contributors}},
title = {{PX4 Autopilot}},
publisher = {Zenodo},
doi = {10.5281/zenodo.595432},
url = {https://px4.io}
}
```
The DOI above is a Zenodo concept DOI that always resolves to the latest release. For a version-pinned citation, see the [Zenodo record](https://doi.org/10.5281/zenodo.595432) or our [`CITATION.cff`](CITATION.cff).
## Governance
The PX4 Autopilot project is hosted by the [Dronecode Foundation](https://www.dronecode.org/), a [Linux Foundation](https://www.linuxfoundation.org/) Collaborative Project. Dronecode holds all PX4 trademarks and serves as the project's legal guardian, ensuring vendor-neutral stewardship — no single company owns the name or controls the roadmap. The source code is licensed under the [BSD 3-Clause](LICENSE) license, so you are free to use, modify, and distribute it in your own projects.
+4
View File
@@ -651,6 +651,10 @@ else
. ${R}etc/init.d/rc.autostart.post
fi
#
# Lock read-only parameters (if configured for this board).
#
param lock
set BOARD_BOOTLOADER_UPGRADE ${R}etc/init.d/rc.board_bootloader_upgrade
if [ -f $BOARD_BOOTLOADER_UPGRADE ]
+7 -3
View File
@@ -478,6 +478,7 @@ def verify_licenses(source_dir):
sub_dir = source_dir / sub_path
checked_out = sub_dir.is_dir() and any(sub_dir.iterdir())
has_explicit_override = sub_path in license_overrides
if not checked_out:
detected = "(not checked out)"
override = license_overrides.get(sub_path, "")
@@ -487,9 +488,12 @@ def verify_licenses(source_dir):
override = license_overrides.get(sub_path, "")
final = override if override else detected
if final == "NOASSERTION" and checked_out:
if final == "NOASSERTION" and has_explicit_override:
# Explicitly acknowledged in overrides file — not a failure
marker = " (acknowledged)"
elif final == "NOASSERTION" and checked_out:
has_noassertion = True
marker = " <-- NOASSERTION"
marker = " <-- UNRESOLVED"
elif final == "NOASSERTION" and not checked_out:
marker = " (skipped)"
else:
@@ -521,7 +525,7 @@ def verify_licenses(source_dir):
print()
if has_noassertion:
print("FAIL: Some submodules resolved to NOASSERTION. "
print("FAIL: Some submodules have unresolved licenses. "
"Add an entry to Tools/ci/license-overrides.yaml or check the LICENSE file.")
return 1
+6
View File
@@ -9,6 +9,12 @@ overrides:
license: "LGPL-3.0-only AND MIT"
comment: "Generator is LGPL-3.0; PX4 ships only MIT-licensed generated headers."
Tools/simulation/gazebo-classic/sitl_gazebo-classic:
license: "BSD-3-Clause"
comment: >-
PX4 org project. No LICENSE file in repo; source files carry
BSD-3-Clause headers consistent with the PX4 project license.
src/lib/cdrstream/cyclonedds:
license: "EPL-2.0 OR BSD-3-Clause"
comment: >-
+3
View File
@@ -29,6 +29,9 @@ for build_dir_path in build/*/ ; do
# Events
mkdir -p artifacts/$build_dir/events/
cp $build_dir_path/events/all_events.json.xz artifacts/$build_dir/events/ 2>/dev/null || true
# Also copy to top level: firmware advertises the metadata URI without the events/ subdirectory
# (see src/lib/component_information/CMakeLists.txt comp_metadata_events_uri_board)
cp $build_dir_path/events/all_events.json.xz artifacts/$build_dir/ 2>/dev/null || true
# SBOM
cp $build_dir_path/*.sbom.spdx.json artifacts/$build_dir/ 2>/dev/null || true
ls -la artifacts/$build_dir
+42
View File
@@ -0,0 +1,42 @@
#!/bin/sh
# Rewrite the container's apt sources to point at the AWS regional Ubuntu
# mirror that is local to the runs-on instance.
#
# The default archive.ubuntu.com round-robin sometimes serves out-of-sync
# index files mid-sync, breaking apt-get update with errors like:
# File has unexpected size (25378 != 25381). Mirror sync in progress?
# The Canonical-operated EC2 mirrors are region-local and sync aggressively,
# eliminating that failure mode.
#
# This script is a no-op outside runs-on, so it is safe to call from any CI
# job (forks, self-hosted runners, local docker runs, etc.) without changing
# behavior there.
#
# Usage (from a workflow step running inside the container):
# ./Tools/ci/use_aws_apt_mirror.sh
set -e
if [ -z "$RUNS_ON_AWS_REGION" ]; then
echo "use_aws_apt_mirror: not running on runs-on (RUNS_ON_AWS_REGION unset), skipping"
exit 0
fi
MIRROR="http://${RUNS_ON_AWS_REGION}.ec2.archive.ubuntu.com/ubuntu"
echo "use_aws_apt_mirror: rewriting apt sources to ${MIRROR}"
# Noble (24.04+) uses the deb822 format at /etc/apt/sources.list.d/ubuntu.sources
if [ -f /etc/apt/sources.list.d/ubuntu.sources ]; then
sed -i \
-e "s|http://archive.ubuntu.com/ubuntu|${MIRROR}|g" \
-e "s|http://security.ubuntu.com/ubuntu|${MIRROR}|g" \
/etc/apt/sources.list.d/ubuntu.sources
fi
# Jammy (22.04) and earlier use the legacy /etc/apt/sources.list
if [ -f /etc/apt/sources.list ]; then
sed -i \
-e "s|http://archive.ubuntu.com/ubuntu|${MIRROR}|g" \
-e "s|http://security.ubuntu.com/ubuntu|${MIRROR}|g" \
/etc/apt/sources.list
fi
+84
View File
@@ -0,0 +1,84 @@
# syntax=docker/dockerfile:1
# PX4 SITL Gazebo Harmonic runtime image
# Runs PX4 SITL with Gazebo Harmonic. Supports X11 forwarding for GUI.
#
# Build:
# make px4_sitl_default && cd build/px4_sitl_default && cpack -G DEB && cd ../..
# docker build -f Tools/packaging/Dockerfile.gazebo -t px4io/px4-sitl-gazebo:v1.17.0 build/px4_sitl_default/
#
# Run (headless):
# docker run --rm -it --network host px4io/px4-sitl-gazebo:v1.17.0
#
# Run (X11 GUI):
# xhost +local:docker
# docker run --rm -it --network host \
# -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix \
# --gpus all px4io/px4-sitl-gazebo:v1.17.0
FROM ubuntu:24.04 AS extract
COPY px4-gazebo_*.deb /tmp/
RUN apt-get update && apt-get install -y --no-install-recommends binutils \
&& dpkg -x /tmp/px4-gazebo_*.deb /staging \
&& strip /staging/opt/px4-gazebo/bin/px4 \
&& rm -rf /var/lib/apt/lists/*
FROM ubuntu:24.04
LABEL maintainer="PX4 Development Team"
LABEL description="PX4 SITL with Gazebo Harmonic simulation"
ENV DEBIAN_FRONTEND=noninteractive
ENV RUNS_IN_DOCKER=true
# Install Gazebo Harmonic with buildkit cache mounts for apt
# The --mount=type=cache persists /var/cache/apt and /var/lib/apt across builds
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update \
&& apt-get install -y --no-install-recommends \
bc \
ca-certificates \
gnupg \
lsb-release \
wget \
&& wget -q https://packages.osrfoundation.org/gazebo.gpg \
-O /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" \
> /etc/apt/sources.list.d/gazebo-stable.list \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
gz-harmonic
# Install PX4 files from .deb
COPY --from=extract /staging/opt/px4-gazebo /opt/px4-gazebo
RUN ln -sf /opt/px4-gazebo/bin/px4-gazebo /usr/bin/px4-gazebo
# Create the DART physics engine symlink (avoids needing the -dev package)
RUN GZ_PHYSICS_DIR=$(find /usr/lib -maxdepth 3 -type d -name "engine-plugins" -path "*/gz-physics-7/*" 2>/dev/null | head -1) \
&& if [ -n "$GZ_PHYSICS_DIR" ] && [ -d "$GZ_PHYSICS_DIR" ]; then \
VERSIONED=$(ls "$GZ_PHYSICS_DIR"/libgz-physics*-dartsim-plugin.so.* 2>/dev/null | head -1) \
&& [ -n "$VERSIONED" ] \
&& ln -sf "$(basename "$VERSIONED")" "$GZ_PHYSICS_DIR/libgz-physics-dartsim-plugin.so"; \
fi
# Gazebo resource paths
ENV GZ_SIM_RESOURCE_PATH=/opt/px4-gazebo/share/gz/models:/opt/px4-gazebo/share/gz/worlds
ENV GZ_SIM_SYSTEM_PLUGIN_PATH=/opt/px4-gazebo/lib/gz/plugins
ENV GZ_SIM_SERVER_CONFIG_PATH=/opt/px4-gazebo/share/gz/server.config
ENV PX4_GZ_MODELS=/opt/px4-gazebo/share/gz/models
ENV PX4_GZ_WORLDS=/opt/px4-gazebo/share/gz/worlds
ENV PX4_SIM_MODEL=gz_x500
ENV HOME=/root
# MAVLink, MAVSDK, DDS
EXPOSE 14550/udp 14540/udp 8888/udp
# Platform-adaptive entrypoint: detects Docker Desktop (macOS/Windows) via
# host.docker.internal and configures MAVLink + DDS to target the host.
COPY px4-entrypoint.sh /opt/px4-gazebo/bin/px4-entrypoint.sh
RUN chmod +x /opt/px4-gazebo/bin/px4-entrypoint.sh
WORKDIR /root
ENTRYPOINT ["/opt/px4-gazebo/bin/px4-entrypoint.sh"]
CMD []
+49
View File
@@ -0,0 +1,49 @@
# syntax=docker/dockerfile:1
# PX4 SITL SIH runtime image
# Minimal container that runs PX4 with the SIH physics engine (no Gazebo).
#
# Build:
# make px4_sitl_sih && cd build/px4_sitl_sih && cpack -G DEB && cd ../..
# docker build -f Tools/packaging/Dockerfile.sih -t px4io/px4-sitl:v1.17.0 build/px4_sitl_sih/
#
# Run (Linux):
# docker run --rm -it --network host px4io/px4-sitl:v1.17.0
#
# Run (macOS / Windows):
# docker run --rm -it -p 14550:14550/udp -p 14540:14540/udp -p 19410:19410/udp -p 8888:8888/udp px4io/px4-sitl:v1.17.0
FROM ubuntu:24.04 AS build
COPY px4_*.deb /tmp/
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update \
&& apt-get install -y --no-install-recommends binutils \
&& dpkg -x /tmp/px4_*.deb /staging \
&& strip /staging/opt/px4/bin/px4
FROM ubuntu:24.04
LABEL maintainer="PX4 Development Team"
LABEL description="PX4 SITL with SIH physics (no simulator dependencies)"
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update && apt-get install -y --no-install-recommends bc
COPY --from=build /staging/opt/px4 /opt/px4
RUN ln -sf /opt/px4/bin/px4 /usr/bin/px4
# Platform-adaptive entrypoint: detects Docker Desktop (macOS/Windows) via
# host.docker.internal and configures MAVLink + DDS to target the host.
COPY px4-entrypoint.sh /opt/px4/bin/px4-entrypoint.sh
RUN chmod +x /opt/px4/bin/px4-entrypoint.sh
ENV PX4_SIM_MODEL=sihsim_quadx
ENV HOME=/root
# MAVLink (QGC, MAVSDK), DDS (ROS 2), jMAVSim/viewer display
EXPOSE 14550/udp 14540/udp 19410/udp 8888/udp
WORKDIR /root
ENTRYPOINT ["/opt/px4/bin/px4-entrypoint.sh"]
CMD []
+4
View File
@@ -0,0 +1,4 @@
#!/bin/sh
set -e
ln -sf /opt/px4-gazebo/bin/px4-gazebo /usr/bin/px4-gazebo
exit 0
+6
View File
@@ -0,0 +1,6 @@
#!/bin/sh
set -e
if [ "$1" = "remove" ] || [ "$1" = "purge" ]; then
rm -f /usr/bin/px4-gazebo
fi
exit 0
+35
View File
@@ -0,0 +1,35 @@
#!/bin/sh
# Docker entrypoint for PX4 SITL containers.
#
# On Docker Desktop (macOS/Windows), host.docker.internal resolves to the
# host machine. We detect this and configure MAVLink + DDS to send to the
# host IP instead of localhost (which stays inside the container VM).
#
# On Linux with --network host, host.docker.internal does not resolve and
# PX4 defaults work without modification.
set -e
# Detect install prefix (SIH uses /opt/px4, Gazebo uses /opt/px4-gazebo)
if [ -d /opt/px4-gazebo ]; then
PX4_PREFIX=/opt/px4-gazebo
else
PX4_PREFIX=/opt/px4
fi
# Resolve host.docker.internal to an IPv4 address. mavlink and uxrce_dds_client
# only parse IPv4, and on Docker Desktop for Windows the default `getent hosts`
# lookup can return an IPv6 ULA first, which both modules then reject.
DOCKER_HOST_IP=$(getent ahostsv4 host.docker.internal 2>/dev/null | awk '/STREAM/ {print $1; exit}')
if [ -n "$DOCKER_HOST_IP" ]; then
# MAVLink: replace default target (127.0.0.1) with the Docker host IP
sed -i "s/mavlink start -x -u/mavlink start -x -t $DOCKER_HOST_IP -u/g" \
"$PX4_PREFIX/etc/init.d-posix/px4-rc.mavlink"
# DDS: point uXRCE-DDS client at the host
sed -i "s|uxrce_dds_client start -t udp|uxrce_dds_client start -t udp -h $DOCKER_HOST_IP|" \
"$PX4_PREFIX/etc/init.d-posix/rcS"
fi
exec "$PX4_PREFIX/bin/px4" "$@"
+32
View File
@@ -0,0 +1,32 @@
#!/usr/bin/env bash
# px4-gazebo: Launch PX4 SITL with Gazebo from the installed .deb package
set -e
PX4_GAZEBO_DIR="$(cd "$(dirname "$(readlink -f "$0")")/.." && pwd)"
PX4_BINARY="${PX4_GAZEBO_DIR}/bin/px4"
# Set Gazebo resource paths so gz-sim finds PX4 models, worlds, and plugins.
export PX4_GZ_MODELS="${PX4_GAZEBO_DIR}/share/gz/models"
export PX4_GZ_WORLDS="${PX4_GAZEBO_DIR}/share/gz/worlds"
export PX4_GZ_PLUGINS="${PX4_GAZEBO_DIR}/lib/gz/plugins"
export PX4_GZ_SERVER_CONFIG="${PX4_GAZEBO_DIR}/share/gz/server.config"
export GZ_SIM_RESOURCE_PATH="${GZ_SIM_RESOURCE_PATH}:${PX4_GZ_MODELS}:${PX4_GZ_WORLDS}"
export GZ_SIM_SYSTEM_PLUGIN_PATH="${GZ_SIM_SYSTEM_PLUGIN_PATH}:${PX4_GZ_PLUGINS}"
export GZ_SIM_SERVER_CONFIG_PATH="${PX4_GZ_SERVER_CONFIG}"
# Gazebo's Physics system searches for "gz-physics-dartsim-plugin" which maps
# to the unversioned libgz-physics-dartsim-plugin.so. The runtime package only
# ships versioned .so files; the unversioned symlink lives in the -dev package.
# Create it if missing so Gazebo finds the DART engine without installing -dev.
GZ_PHYSICS_ENGINE_DIR=$(find /usr/lib -maxdepth 3 -type d -name "engine-plugins" -path "*/gz-physics-7/*" 2>/dev/null | head -1)
if [ -n "$GZ_PHYSICS_ENGINE_DIR" ] && [ -d "$GZ_PHYSICS_ENGINE_DIR" ]; then
UNVERSIONED="$GZ_PHYSICS_ENGINE_DIR/libgz-physics-dartsim-plugin.so"
if [ ! -e "$UNVERSIONED" ]; then
VERSIONED=$(ls "$GZ_PHYSICS_ENGINE_DIR"/libgz-physics*-dartsim-plugin.so.* 2>/dev/null | head -1)
if [ -n "$VERSIONED" ]; then
ln -sf "$(basename "$VERSIONED")" "$UNVERSIONED" 2>/dev/null || true
fi
fi
fi
exec "${PX4_BINARY}" "$@"
+4
View File
@@ -0,0 +1,4 @@
#!/bin/sh
set -e
ln -sf /opt/px4/bin/px4 /usr/bin/px4
exit 0
+6
View File
@@ -0,0 +1,6 @@
#!/bin/sh
set -e
if [ "$1" = "remove" ] || [ "$1" = "purge" ]; then
rm -f /usr/bin/px4
fi
exit 0
+144
View File
@@ -0,0 +1,144 @@
#!/usr/bin/env python3
"""
MAVSDK mission test for PX4 SIH SITL in Docker.
Takes off to 100m, flies a short 4-waypoint box mission, then lands.
Validates that the SIH Docker container works end-to-end with MAVSDK.
Prerequisites:
- Docker container running:
docker run --rm --network host px4io/px4-sitl:v1.17.0-alpha1
- pip install mavsdk
- mavsim-viewer running (optional):
/path/to/mavsim-viewer -n 1
Usage:
python3 Tools/packaging/test_sih_mission.py
python3 Tools/packaging/test_sih_mission.py --speed 10 # faster-than-realtime
"""
import asyncio
import argparse
import sys
import time
from mavsdk import System
from mavsdk.mission import MissionItem, MissionPlan
async def run_mission(speed_factor: int = 1):
drone = System()
print(f"Connecting to drone on udp://:14540 ...")
await drone.connect(system_address="udp://:14540")
print("Waiting for drone to connect...")
async for state in drone.core.connection_state():
if state.is_connected:
print(f"Connected (UUID: {state.uuid if hasattr(state, 'uuid') else 'N/A'})")
break
print("Waiting for global position estimate...")
async for health in drone.telemetry.health():
if health.is_global_position_ok and health.is_home_position_ok:
print("Global position OK")
break
# Get home position for reference
async for pos in drone.telemetry.position():
home_lat = pos.latitude_deg
home_lon = pos.longitude_deg
print(f"Home position: {home_lat:.6f}, {home_lon:.6f}")
break
# Build a small box mission at 100m AGL
# ~100m offset in each direction
offset = 0.001 # roughly 111m at equator
mission_items = [
MissionItem(
home_lat + offset, home_lon,
100, 10, True, float('nan'), float('nan'),
MissionItem.CameraAction.NONE,
float('nan'), float('nan'), float('nan'),
float('nan'), float('nan'),
MissionItem.VehicleAction.NONE,
),
MissionItem(
home_lat + offset, home_lon + offset,
100, 10, True, float('nan'), float('nan'),
MissionItem.CameraAction.NONE,
float('nan'), float('nan'), float('nan'),
float('nan'), float('nan'),
MissionItem.VehicleAction.NONE,
),
MissionItem(
home_lat, home_lon + offset,
100, 10, True, float('nan'), float('nan'),
MissionItem.CameraAction.NONE,
float('nan'), float('nan'), float('nan'),
float('nan'), float('nan'),
MissionItem.VehicleAction.NONE,
),
MissionItem(
home_lat, home_lon,
100, 10, True, float('nan'), float('nan'),
MissionItem.CameraAction.NONE,
float('nan'), float('nan'), float('nan'),
float('nan'), float('nan'),
MissionItem.VehicleAction.NONE,
),
]
mission_plan = MissionPlan(mission_items)
print(f"Uploading mission ({len(mission_items)} waypoints, 100m AGL)...")
await drone.mission.upload_mission(mission_plan)
print("Mission uploaded")
print("Arming...")
await drone.action.arm()
print("Armed")
t0 = time.time()
print("Starting mission...")
await drone.mission.start_mission()
# Monitor mission progress
async for progress in drone.mission.mission_progress():
elapsed = time.time() - t0
print(f" [{elapsed:6.1f}s] Waypoint {progress.current}/{progress.total}")
if progress.current == progress.total:
print(f"Mission complete in {elapsed:.1f}s (speed factor: {speed_factor}x)")
break
print("Returning to launch...")
await drone.action.return_to_launch()
# Wait for landing
async for in_air in drone.telemetry.in_air():
if not in_air:
print("Landed")
break
print("Disarming...")
await drone.action.disarm()
print("Test PASSED")
def main():
parser = argparse.ArgumentParser(description="PX4 SIH Docker mission test")
parser.add_argument("--speed", type=int, default=1,
help="PX4_SIM_SPEED_FACTOR (must match container)")
args = parser.parse_args()
try:
asyncio.run(run_mission(args.speed))
except KeyboardInterrupt:
print("\nInterrupted")
sys.exit(1)
except Exception as e:
print(f"Test FAILED: {e}")
sys.exit(1)
if __name__ == "__main__":
main()
+1 -1
View File
@@ -23,7 +23,7 @@ pyserial
pyulog>=0.5.0
pyyaml
requests
setuptools>=39.2.0
setuptools>=39.2.0,<=81.0.0
six>=1.12.0
sympy>=1.10.1
toml>=0.9
+1
View File
@@ -30,6 +30,7 @@ CONFIG_MODULES_EKF2=y
# CONFIG_EKF2_GNSS_YAW is not set
# CONFIG_EKF2_MAGNETOMETER is not set
# CONFIG_EKF2_RANGE_FINDER is not set
# CONFIG_EKF2_OPTICAL_FLOW is not set
# CONFIG_EKF2_SIDESLIP is not set
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_LAND_DETECTOR=y
+1 -1
View File
@@ -72,7 +72,7 @@
#define INTERFACE_USART_CONFIG "/dev/ttyS0,115200"
#define BOOT_DELAY_ADDRESS 0x000001a0
#define BOARD_TYPE 1105
#define BOARD_FLASH_SECTORS (14)
#define BOARD_FLASH_SECTORS (13)
#define BOARD_FLASH_SIZE (16 * 128 * 1024)
#define APP_RESERVATION_SIZE (2 * 128 * 1024)
+1
View File
@@ -13,6 +13,7 @@ CONFIG_MODULES_NAVIGATOR=n
CONFIG_MODULES_UXRCE_DDS_CLIENT=n
CONFIG_SYSTEMCMDS_ACTUATOR_TEST=n
CONFIG_SYSTEMCMDS_BSONDUMP=n
CONFIG_SYSTEMCMDS_I2CDETECT=y
CONFIG_SYSTEMCMDS_PERF=n
CONFIG_SYSTEMCMDS_TOPIC_LISTENER=n
CONFIG_SYSTEMCMDS_VER=n
+59 -36
View File
@@ -33,32 +33,24 @@
# packaging
set(CPACK_PACKAGE_NAME ${PROJECT_NAME}-${PX4_CONFIG})
set(CPACK_PACKAGE_VENDOR "px4")
set(CPACK_PACKAGE_CONTACT "daniel@agar.ca")
set(CPACK_RESOURCE_FILE_LICENSE "${PX4_SOURCE_DIR}/LICENSE")
set(CPACK_RESOURCE_FILE_README "${PX4_SOURCE_DIR}/README.md")
set(CPACK_SOURCE_GENERATOR "ZIP;TBZ2")
# Debian version: convert git describe to Debian-compliant format
# v1.17.0-beta1 -> 1.17.0~beta1, v1.17.0 -> 1.17.0
string(REGEX REPLACE "^v" "" DEB_VERSION "${PX4_GIT_TAG}")
# Replace first hyphen with tilde for pre-release (Debian sorts ~ before anything)
string(REGEX REPLACE "^([0-9]+\\.[0-9]+\\.[0-9]+)-([a-zA-Z])" "\\1~\\2" DEB_VERSION "${DEB_VERSION}")
# Strip any trailing commit info (e.g. -42-gabcdef)
string(REGEX REPLACE "-[0-9]+-g[0-9a-f]+$" "" DEB_VERSION "${DEB_VERSION}")
set(CPACK_PACKAGE_VERSION_MAJOR ${PX4_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${PX4_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${PX4_VERSION_PATCH})
#set(CPACK_PACKAGE_VERSION ${PX4_GIT_TAG})
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PX4_CONFIG}-${PX4_GIT_TAG}")
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PX4_CONFIG}-${PX4_GIT_TAG}-src")
set(CPACK_PACKAGE_CONTACT "daniel@agar.ca")
set(CPACK_RESOURCE_FILE_LICENSE "${PX4_SOURCE_DIR}/LICENSE")
set(CPACK_RESOURCE_FILE_README "${PX4_SOURCE_DIR}/README.md")
set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE)#ONE_PER_GROUP)
# without this you won't be able to pack only specified component
set(CPACK_DEB_COMPONENT_INSTALL YES)
#set(CPACK_STRIP_FILES YES)
set(CPACK_SOURCE_GENERATOR "ZIP;TBZ2")
set(CPACK_PACKAGING_INSTALL_PREFIX "")
set(CPACK_SET_DESTDIR "OFF")
if("${CMAKE_SYSTEM}" MATCHES "Linux")
set(CPACK_GENERATOR "TBZ2")
@@ -67,30 +59,61 @@ if("${CMAKE_SYSTEM}" MATCHES "Linux")
if(EXISTS ${DPKG_PROGRAM})
list(APPEND CPACK_GENERATOR "DEB")
set(CPACK_SET_DESTDIR true)
set(CPACK_PACKAGING_INSTALL_PREFIX "/tmp")
execute_process(COMMAND ${DPKG_PROGRAM} --print-architecture
OUTPUT_VARIABLE DEB_ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND ${DPKG_PROGRAM} --print-architecture OUTPUT_VARIABLE DEB_ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE)
message("Architecture: " ${DEB_ARCHITECTURE})
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}_${DEB_ARCHITECTURE}")
# Detect Ubuntu/Debian codename for version suffix
find_program(LSB_RELEASE lsb_release)
if(EXISTS ${LSB_RELEASE})
execute_process(COMMAND ${LSB_RELEASE} -cs
OUTPUT_VARIABLE DEB_CODENAME OUTPUT_STRIP_TRAILING_WHITESPACE)
else()
set(DEB_CODENAME "unknown")
endif()
set(CPACK_INSTALL_PREFIX @DEB_INSTALL_PREFIX@)
message ("==> CPACK_INSTALL_PREFIX = " ${CPACK_INSTALL_PREFIX})
# Override CPACK_PACKAGE_VERSION with full Debian version.
# CPack DEB ignores CPACK_PACKAGE_VERSION_MAJOR/MINOR/PATCH
# when CPACK_PACKAGE_VERSION is set, so we must replace them.
unset(CPACK_PACKAGE_VERSION_MAJOR)
unset(CPACK_PACKAGE_VERSION_MINOR)
unset(CPACK_PACKAGE_VERSION_PATCH)
set(CPACK_PACKAGE_VERSION "${DEB_VERSION}-${DEB_CODENAME}")
################################################################################
# Label-aware package metadata
if(PX4_BOARD_LABEL STREQUAL "sih")
set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/px4")
set(CPACK_DEBIAN_PACKAGE_NAME "px4")
set(CPACK_DEBIAN_FILE_NAME "px4_${DEB_VERSION}-${DEB_CODENAME}_${DEB_ARCHITECTURE}.deb")
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libstdc++6")
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "PX4 SITL autopilot with SIH physics (no Gazebo)")
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
"${PX4_SOURCE_DIR}/Tools/packaging/sih/postinst;${PX4_SOURCE_DIR}/Tools/packaging/sih/postrm")
else()
set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/px4-gazebo")
set(CPACK_DEBIAN_PACKAGE_NAME "px4-gazebo")
set(CPACK_DEBIAN_FILE_NAME "px4-gazebo_${DEB_VERSION}-${DEB_CODENAME}_${DEB_ARCHITECTURE}.deb")
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libstdc++6, gz-sim8-cli, libgz-sim8-plugins, libgz-physics7-dartsim, gz-tools2")
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "PX4 SITL autopilot with Gazebo Harmonic simulation resources")
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
"${PX4_SOURCE_DIR}/Tools/packaging/postinst;${PX4_SOURCE_DIR}/Tools/packaging/postrm")
endif()
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Daniel Agar <${CPACK_PACKAGE_CONTACT}>")
set(CPACK_DEBIAN_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION})
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
# Bake the install prefix into the px4 binary so it can locate its ROMFS
# (etc/) without a wrapper script or command-line argument.
if(TARGET px4)
target_compile_definitions(px4 PRIVATE PX4_INSTALL_PREFIX="${CPACK_PACKAGING_INSTALL_PREFIX}")
endif()
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "PX4 autopilot")
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
set(CPACK_DEBIAN_PACKAGE_SECTION "misc")
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${DEB_ARCHITECTURE})
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Daniel Agar <${CPACK_PACKAGE_CONTACT}>")
# autogenerate dependency information
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
set(CPACK_DEBIAN_COMPRESSION_TYPE xz)
set(CPACK_DEBIAN_ARCHITECTURE ${DEB_ARCHITECTURE})
message(STATUS "PX4 SITL .deb version: ${DEB_VERSION}-${DEB_CODENAME} (${DEB_ARCHITECTURE})")
endif()
else()
Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 354 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 KiB

+16 -10
View File
@@ -171,6 +171,7 @@
- [CUAV V5 nano (FMUv5)](flight_controller/cuav_v5_nano.md)
- [CUAV V5 nano Wiring Quickstart](assembly/quick_start_cuav_v5_nano.md)
- [CUAV X25 EVO](flight_controller/cuav_x25-evo.md)
- [CUAV X25 EVO Wiring Quick Start](assembly/quick_start_cuav_x25_evo.md)
- [CUAV X25 SUPER](flight_controller/cuav_x25-super.md)
- [CubePilot Cube Orange+ (CubePilot)](flight_controller/cubepilot_cube_orangeplus.md)
- [CubePilot Cube Orange (CubePilot)](flight_controller/cubepilot_cube_orange.md)
@@ -322,6 +323,7 @@
- [RFD900 (SiK) Telemetry Radio](telemetry/rfd900_telemetry.md)
- [ThunderFly TFSIK01 Telemetry Radio](telemetry/tfsik_telemetry.md)
- [HolyBro (SIK) Telemetry Radio](telemetry/holybro_sik_radio.md)
- [HolyBro SiK Long Range Telemetry Radio](telemetry/holybro_sik_longrange.md)
- [Telemetry Wifi](telemetry/telemetry_wifi.md)
- [ESP8266 WiFi Module](telemetry/esp8266_wifi_module.md)
- [ESP32 WiFi Module](telemetry/esp32_wifi_module.md)
@@ -859,16 +861,20 @@
- [Multi-vehicle simulation](simulation/multi-vehicle-simulation.md)
- [Platform Testing and CI](test_and_ci/index.md)
- [Test Flights](test_and_ci/test_flights.md)
- [Test MC_01 - Manual Modes](test_cards/mc_01_manual_modes.md)
- [Test MC_02 - Full Autonomous](test_cards/mc_02_full_autonomous.md)
- [Test MC_03 - Auto Manual Mix](test_cards/mc_03_auto_manual_mix.md)
- [Test MC_04 - Failsafe Testing](test_cards/mc_04_failsafe_testing.md)
- [Test MC_05 - Manual Modes (Inside)](test_cards/mc_05_indoor_flight_manual_modes.md)
- [Test MC_06 - Optical Flow (Inside)](test_cards/mc_06_optical_flow.md)
- [Test MC_07 - Optical Flow Low Mount](test_cards/mc_07_optical_flow_low_mount.md)
- [Test MC_08 - DSHOT ESC](test_cards/mc_08_dshot.md)
- [Test MC_09 - VIO (Visual-Inertial Odometry)](test_cards/mc_09_vio.md)
- [Test MC_10 - Optical Flow / GPS Mixed](test_cards/mc_10_optical_flow_gps_mixed.md)
- [Multicopter](test_and_ci/test_flights.md#multicopter)
- [Test MC_01 - Manual Modes](test_cards/mc_01_manual_modes.md)
- [Test MC_02 - Full Autonomous](test_cards/mc_02_full_autonomous.md)
- [Test MC_03 - Auto Manual Mix](test_cards/mc_03_auto_manual_mix.md)
- [Test MC_04 - Failsafe Testing](test_cards/mc_04_failsafe_testing.md)
- [Test MC_05 - Manual Modes (Inside)](test_cards/mc_05_indoor_flight_manual_modes.md)
- [Test MC_06 - Optical Flow (Inside)](test_cards/mc_06_optical_flow.md)
- [Test MC_07 - Optical Flow Low Mount](test_cards/mc_07_optical_flow_low_mount.md)
- [Test MC_08 - DSHOT ESC](test_cards/mc_08_dshot.md)
- [Test MC_09 - VIO (Visual-Inertial Odometry)](test_cards/mc_09_vio.md)
- [Test MC_10 - Optical Flow / GPS Mixed](test_cards/mc_10_optical_flow_gps_mixed.md)
- [Fixed Wing](test_and_ci/test_flights.md#fixed-wing)
- [Test FW_01 - Manual Modes](test_cards/fw_01_manual_modes.md)
- [Test FW_02 - Full Autonomous](test_cards/fw_02_full_autonomous.md)
- [Unit Tests](test_and_ci/unit_tests.md)
- [Fuzz Tests](test_and_ci/fuzz_tests.md)
- [Continuous Integration](test_and_ci/continous_integration.md)
+14 -10
View File
@@ -851,16 +851,20 @@
- [Multi-vehicle simulation](/simulation/multi-vehicle-simulation.md)
- [Platform Testing and CI](/test_and_ci/index.md)
- [Test Flights](/test_and_ci/test_flights.md)
- [Test MC_01 - Manual Modes](/test_cards/mc_01_manual_modes.md)
- [Test MC_02 - Full Autonomous](/test_cards/mc_02_full_autonomous.md)
- [Test MC_03 - Auto Manual Mix](/test_cards/mc_03_auto_manual_mix.md)
- [Test MC_04 - Failsafe Testing](/test_cards/mc_04_failsafe_testing.md)
- [Test MC_05 - Manual Modes (Inside)](/test_cards/mc_05_indoor_flight_manual_modes.md)
- [Test MC_06 - Optical Flow (Inside)](/test_cards/mc_06_optical_flow.md)
- [Test MC_07 - Optical Flow Low Mount](/test_cards/mc_07_optical_flow_low_mount.md)
- [Test MC_08 - DSHOT ESC](/test_cards/mc_08_dshot.md)
- [Test MC_09 - VIO (Visual-Inertial Odometry)](/test_cards/mc_09_vio.md)
- [Test MC_10 - Optical Flow / GPS Mixed](/test_cards/mc_10_optical_flow_gps_mixed.md)
- [Multicopter](/test_and_ci/test_flights.md#multicopter)
- [Test MC_01 - Manual Modes](/test_cards/mc_01_manual_modes.md)
- [Test MC_02 - Full Autonomous](/test_cards/mc_02_full_autonomous.md)
- [Test MC_03 - Auto Manual Mix](/test_cards/mc_03_auto_manual_mix.md)
- [Test MC_04 - Failsafe Testing](/test_cards/mc_04_failsafe_testing.md)
- [Test MC_05 - Manual Modes (Inside)](/test_cards/mc_05_indoor_flight_manual_modes.md)
- [Test MC_06 - Optical Flow (Inside)](/test_cards/mc_06_optical_flow.md)
- [Test MC_07 - Optical Flow Low Mount](/test_cards/mc_07_optical_flow_low_mount.md)
- [Test MC_08 - DSHOT ESC](/test_cards/mc_08_dshot.md)
- [Test MC_09 - VIO (Visual-Inertial Odometry)](/test_cards/mc_09_vio.md)
- [Test MC_10 - Optical Flow / GPS Mixed](/test_cards/mc_10_optical_flow_gps_mixed.md)
- [Fixed Wing](/test_and_ci/test_flights.md#fixed-wing)
- [Test FW_01 - Manual Modes](/test_cards/fw_01_manual_modes.md)
- [Test FW_02 - Full Autonomous](/test_cards/fw_02_full_autonomous.md)
- [Unit Tests](/test_and_ci/unit_tests.md)
- [Fuzz Tests](/test_and_ci/fuzz_tests.md)
- [Continuous Integration](/test_and_ci/continous_integration.md)
@@ -358,6 +358,62 @@ This ensures that metadata is always up-to-date with the code running on the veh
This process is the same as for [events metadata](../concept/events_interface.md#publishing-event-metadata-to-a-gcs).
For more information see [PX4 Metadata (Translation & Publication)](../advanced/px4_metadata.md)
## Read-Only Parameters
Integrators who productize PX4 can lock down parameters so that end users cannot change safety-critical or product-defining settings.
This works in two phases:
1. **Build time** — a YAML file in the board directory declares _which_ parameters are read-only.
2. **Run time**`param lock` in the startup script activates enforcement.
Before the lock, all parameters (including those on the read-only list) can be freely set by startup scripts (`rc.board_defaults`, airframe scripts, `config.txt`, etc.).
After the lock, any attempt to modify a read-only parameter is rejected.
### Configuration
Create `boards/<vendor>/<board>/readonly_params.yaml` with the following format:
```yaml
# mode: 'block' = listed params are read-only (all others writable)
# mode: 'allow' = only listed params are writable (all others read-only)
mode: block
parameters:
- SYS_AUTOSTART
- SYS_AUTOCONFIG
- BAT1_N_CELLS
```
The two modes are:
- **`block`**: The listed parameters are read-only; all other parameters remain writable.
- **`allow`**: Only the listed parameters are writable; all others become read-only.
All parameter names in the list are validated at build time — the build will fail if any listed parameter does not exist in the firmware.
Boards without this file have no read-only enforcement (fully backward compatible).
### Locking
The `param lock` command is called in `rcS` after all startup scripts have finished setting parameters.
Before this call, startup scripts can freely use `param set-default` and `param set` on any parameter, including those on the read-only list.
After `param lock`, the read-only list is enforced.
To set a specific locked value, use `param set-default` in a board startup script (e.g. `rc.board_defaults`) to set the desired default _before_ the lock activates.
### Enforcement (after lock)
Read-only parameters are enforced at all entry points:
- **`param set`** and **`param set-default`** shell commands return an error.
- **MAVLink PARAM_SET** returns a `MAV_PARAM_ERROR_READ_ONLY` error to the GCS.
- **`param_set()`**, **`param_set_default_value()`** C API calls return `PX4_ERROR`.
- **`param reset`** silently skips read-only parameters (since `param_reset_all` loops over all params).
- **`param import`** / **`param load`** from file silently skips read-only parameters.
### Notes
- The read-only list is compiled into firmware as a `constexpr` array, so there is zero runtime overhead when the list is empty.
- If no `readonly_params.yaml` file exists for a board, `param lock` is a no-op.
## Further Information
- [Finding/Updating Parameters](../advanced_config/parameters.md)
@@ -27,6 +27,8 @@ Supported flight controllers include:
- [ARK Electronics ARKV6X](../flight_controller/ark_v6x.md)
- [CUAV Pixhawk V6X](../flight_controller/cuav_pixhawk_v6x.md)
- [CUAV X25 EVO](../flight_controller/cuav_x25-evo.md)
- [CUAV X25 SUPER](../flight_controller/cuav_x25-super.md)
- [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md)
- [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md)
- [RaccoonLab FMUv6X Autopilot](../flight_controller/raccoonlab_fmu6x.md)
+79 -13
View File
@@ -127,7 +127,7 @@ Configure the emitter type of the vehicle.
| Reboot | minValue | maxValue | increment | default | unit |
| ------- | -------- | -------- | --------- | ------- | ---- |
| &check; | 0 | 15 | | 14 | |
| &check; | 0 | 19 | | 14 | |
### ADSB_GPS_OFF_LAT (`INT32`) {#ADSB_GPS_OFF_LAT}
@@ -17716,9 +17716,9 @@ Negative values are ignored and will cause the measured current to be used.
The default value of 0 disables the overwrite, in which case the measured value
is always used.
| Reboot | minValue | maxValue | increment | default | unit |
| ------- | -------- | -------- | --------- | ------- | ---- |
| &check; | | | | 0 | |
| Reboot | minValue | maxValue | increment | default | unit |
| ------ | -------- | -------- | --------- | ------- | ---- |
| &nbsp; | | | | 0 | |
### BAT1_N_CELLS (`INT32`) {#BAT1_N_CELLS}
@@ -17894,9 +17894,9 @@ Negative values are ignored and will cause the measured current to be used.
The default value of 0 disables the overwrite, in which case the measured value
is always used.
| Reboot | minValue | maxValue | increment | default | unit |
| ------- | -------- | -------- | --------- | ------- | ---- |
| &check; | | | | 0 | |
| Reboot | minValue | maxValue | increment | default | unit |
| ------ | -------- | -------- | --------- | ------- | ---- |
| &nbsp; | | | | 0 | |
### BAT2_N_CELLS (`INT32`) {#BAT2_N_CELLS}
@@ -18036,6 +18036,22 @@ Defines the capacity of battery 3 in mAh.
| ------- | -------- | -------- | --------- | ------- | ---- |
| &check; | -1.0 | 100000 | 50 | -1.0 | mAh |
### BAT3_I_OVERWRITE (`FLOAT`) {#BAT3_I_OVERWRITE}
Battery 3 idle current overwrite.
This parameter allows to overwrite the current measured during
idle (unarmed) state with a user-defined constant value (expressed in amperes).
When the system is armed, the measured current is used. This is useful
because on certain ESCs current measurements are inaccurate in case of no load.
Negative values are ignored and will cause the measured current to be used.
The default value of 0 disables the overwrite, in which case the measured value
is always used.
| Reboot | minValue | maxValue | increment | default | unit |
| ------ | -------- | -------- | --------- | ------- | ---- |
| &nbsp; | | | | 0 | |
### BAT3_N_CELLS (`INT32`) {#BAT3_N_CELLS}
Number of cells for battery 3.
@@ -18482,7 +18498,7 @@ parameters.
| Reboot | minValue | maxValue | increment | default | unit |
| ------ | -------- | -------- | --------- | ------- | ---- |
| &nbsp; | 0 | 3 | | 0 | |
| &nbsp; | 0 | 4 | | 0 | |
### COM_ARMABLE (`INT32`) {#COM_ARMABLE}
@@ -21790,6 +21806,32 @@ EKF2 selector maximum accumulated velocity threshold for comparing accelerometer
| ------ | -------- | -------- | --------- | ------- | ---- |
| &nbsp; | | | | 2.0 | m/s |
### EKF2_SENS_EN (`INT32`) {#EKF2_SENS_EN}
Sensor fusion enable bitmask.
Bitmask to control which sensor fusion sources are enabled. Sources whose bit is cleared will be disabled. Only applied while disarmed. For in-flight changes use the MAVLink command VEHICLE_CMD_ESTIMATOR_SENSOR_ENABLE or the individual CTRL params (e.g. EKF2_GPS_CTRL, EKF2_BARO_CTRL).
**Bitmask:**
- `0`: GNSS 0
- `1`: GNSS 1
- `2`: Optical flow
- `3`: External vision
- `4`: Aux global position 0
- `5`: Aux global position 1
- `6`: Aux global position 2
- `7`: Aux global position 3
- `8`: Barometer
- `9`: Range finder
- `10`: Magnetometer
- `11`: Airspeed
- `12`: Ranging beacon
| Reboot | minValue | maxValue | increment | default | unit |
| ------ | -------- | -------- | --------- | ------- | ---- |
| &nbsp; | 0 | 8191 | | 8191 | |
### EKF2_SYNT_MAG_Z (`INT32`) {#EKF2_SYNT_MAG_Z}
Enable synthetic magnetometer Z component measurement.
@@ -23104,6 +23146,26 @@ This increment is added to TRIM_YAW when airspeed is FW_AIRSPD_MIN.
| ------ | -------- | -------- | --------- | ------- | ---- |
| &nbsp; | -0.5 | 0.5 | 0.01 | 0.0 | |
### FW_FLAPS_MAN (`INT32`) {#FW_FLAPS_MAN}
Flap input in manual flight.
Chose source for manual setting of flaps in manual flight modes.
**Values:**
- `0`: Disabled
- `1`: Aux1
- `2`: Aux2
- `3`: Aux3
- `4`: Aux4
- `5`: Aux5
- `6`: Flaps channel
| Reboot | minValue | maxValue | increment | default | unit |
| ------ | -------- | -------- | --------- | ------- | ---- |
| &nbsp; | | | | 0 | |
### FW_GC_EN (`INT32`) {#FW_GC_EN}
Enable rate gain compression.
@@ -23264,6 +23326,10 @@ Chose source for manual setting of spoilers in manual flight modes.
- `0`: Disabled
- `1`: Flaps channel
- `2`: Aux1
- `3`: Aux2
- `4`: Aux3
- `5`: Aux4
- `6`: Aux5
| Reboot | minValue | maxValue | increment | default | unit |
| ------ | -------- | -------- | --------- | ------- | ---- |
@@ -23850,7 +23916,7 @@ Mode 6 is intended for use with a ground control station (not necessarily an RTK
| Reboot | minValue | maxValue | increment | default | unit |
| ------- | -------- | -------- | --------- | ------- | ---- |
| &check; | 0 | 1 | | 0 | |
| &check; | 0 | 6 | | 0 | |
### GPS_UBX_PPK (`INT32`) {#GPS_UBX_PPK}
@@ -28505,7 +28571,7 @@ MAVLink airframe type.
| Reboot | minValue | maxValue | increment | default | unit |
| ------ | -------- | -------- | --------- | ------- | ---- |
| &nbsp; | 0 | 22 | | 0 | |
| &nbsp; | 0 | 23 | | 0 | |
### MAV_USEHILGPS (`INT32`) {#MAV_USEHILGPS}
@@ -28762,7 +28828,7 @@ Heading behavior in autonomous modes.
| Reboot | minValue | maxValue | increment | default | unit |
| ------ | -------- | -------- | --------- | ------- | ---- |
| &nbsp; | 0 | 4 | | 0 | |
| &nbsp; | 0 | 5 | | 0 | |
### NAV_ACC_RAD (`FLOAT`) {#NAV_ACC_RAD}
@@ -37716,7 +37782,7 @@ TeraRanger Rangefinder (i2c).
| Reboot | minValue | maxValue | increment | default | unit |
| ------- | -------- | -------- | --------- | ------- | ---- |
| &check; | 0 | 3 | | 0 | |
| &check; | 0 | 5 | | 0 | |
### SENS_EN_VL53L0X (`INT32`) {#SENS_EN_VL53L0X}
@@ -43906,7 +43972,7 @@ Selects what type of mode is enabled, if any
| Reboot | minValue | maxValue | increment | default | unit |
| ------- | -------- | -------- | --------- | ------- | ---- |
| &check; | 0 | 2 | | 0 | |
| &check; | 0 | 3 | | 0 | |
### VOXL_ESC_PUB_BST (`INT32`) {#VOXL_ESC_PUB_BST}
+1
View File
@@ -409,6 +409,7 @@ They recommend sensors, power systems, and other components from the same manufa
- [CUAV Pixhawk V6X Wiring QuickStart](../assembly/quick_start_cuav_pixhawk_v6x.md)
- [CUAV V5+ Wiring Quickstart](../assembly/quick_start_cuav_v5_plus.md)
- [CUAV V5 nano Wiring Quickstart](../assembly/quick_start_cuav_v5_nano.md)
- [CUAV X25 EVO Wiring Quickstart](../assembly/quick_start_cuav_x25_evo.md)
- [Holybro Pixhawk 6C Wiring Quickstart](../assembly/quick_start_pixhawk6c.md)
- [Holybro Pixhawk 6X Wiring Quickstart](../assembly/quick_start_pixhawk6x.md)
- [Holybro Pixhawk 5X Wiring Quickstart](../assembly/quick_start_pixhawk5x.md)
@@ -0,0 +1,153 @@
# CUAV X25 EVO Wiring Quick Start
::: warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues.
:::
This quick start guide shows how to power the [X25 EVO](../flight_controller/cuav_x25-evo.md) flight controller and connect its most important peripherals.
::: info
The following flight controller models are applicable to this quick start guide.
[CUAV X25 SUPER](../flight_controller/cuav_x25-super.md)
:::
## Wiring Chart Overview
The image below shows how to connect the most important sensors and peripherals (except the motor and servo outputs).
We'll go through each of these in detail in the following sections.
![wiring](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_01.jpg)
| Interface | **Function** |
| :------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| POWER C1/C2 | Connect the PMU2 Lite to this port; this port is used for connecting the DroneCAN power module |
| M1 ~ M16 | PWM signal output ports, usable for controlling motors or servos; support 3.3V/5V PWM configuration |
| RC IN | Connect remote controller receivers with one-way protocols (e.g., SBUS/DSM/PPM). Note: ELRS/CRSF receivers should be connected to any serial port, not RC IN |
| RSSI | For connecting signal strength feedback modules |
| GPS&SAFETY | Connect Neo-series GPS or C-RTK-series RTK; this port includes interfaces for GPS, safety switch, and buzzer |
| GPS2 | Usable for connecting additional GPS/RTK modules |
| DEBUG (DSU) | For FMU chip debugging and reading debug device information; with ArduPilot firmware, it can be configured for other serial port functions |
| ADC3V3 | For analog level signal detection; the maximum detectable level signal is 3.3V |
| ADC6V6 | For analog level signal detection; the maximum detectable level signal is 6.6V (PX4 is not supported.) |
| TF CARD | Insert an SD card here to enable log storage functionality |
| ETH | Ethernet port, usable for connecting Ethernet devices such as companion computers |
| I2C1/2/3 | Connect external I2C devices (e.g., external compasses) for communication between the controller and I2C devices |
| TELEM1/TELEM2 | Connect telemetry modules (for data transmission) to enable MAVLINK data interaction |
| CAN1/2 | For communication between the controller and DroneCAN devices (e.g., connecting NEO4 SE GPS) |
| TYPE C | USB port of the controller, usable for connecting to the ground station, flashing firmware, and other operations |
| SPI6 | SPI port for external expansion; generally not used |
## Vehicle Front
::: 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).
:::
![front](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_02.jpg)
## GPS + Compass + Buzzer + Safety Switch + LED
We recommend using a CAN GPS/RTK (such as [Neo 4SE](https://store.cuav.net/shop/cuav-neo-4-se-gps-module/)); simply connect it to the **CAN 1** or **CAN 2** port.
You can also use a standard GPS/RTK module(such as [NEO3 GPS](https://store.cuav.net/shop/neo-3/) (10-pin connector)) by connecting it to the **GPS&SAFETY** port.
Most commonly used GPS modules today integrate GPS, compass, safety switch, buzzer, and LED status light.
If you need to use assisted GPS, connect to the **GPS2** port.
The GPS/compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible (separating the compass from other electronics will reduce interference), with the direction markings towards the front of the vehicle (the arrow on the NEO GPS should match the arrow on the flight controller).
![GPS](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_03.jpg)
::: 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).
:::
## 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).
Connection methods vary by remote controller and receiver type:
### Android Remote Controllers
Take the H16 as an example:
![H16 control](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_04.jpg)
Connect **TELEM1/TELEM2** to the UART0 port of the H16 remote controller, and link the H16s SBUS pin to the **RC IN** port.
### SBUS/DSM/PPM Protocol Receivers
![SBUS/DSM/PPM control](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_05.jpg)
Use wires to connect the receiver to the **RC IN** port at the rear of the controller.
### ELRS/CRSF Receivers
![ELRS/CRSF control](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_06.jpg)
Connect the [ELRS/CRSF](../telemetry/crsf_telemetry.md) receiver to any UART serial port of the X25 EVO (e.g., **TELEM2**).
## Power
The X25 EVO comes standard with the PMU2 Lite power module, which supports 2070V input and can measure a maximum current of 220A.
It can be directly connected to the **Power C1/C2** port of the X25 EVO and is plug-and-play (no configuration required).
![Power](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_07.png)
## Telemetry (Radio) System
[Telemetry system](../telemetry/index.md) allows you to communicate with the unmanned system via ground station software, enabling you to monitor and control the UAVs status during flight. Connect the on-board unit of the telemetry system to the **TELEM1** or **TELEM2** port.
You can also purchase telemetry radios from the [CUAV store](https://store.cuav.net/uav-telemetry-module/).
![Telemetry system](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_04.jpg)
## SD Card
SD cards are highly recommended as they are required for [recording and analyzing flight details](../getting_started/flight_reporting.md), running tasks and using UAVCAN bus hardware.
An SD card is already installed on X25 EVO when it leaves the factory.
::: tip
For more information see [Basic Concepts > SD Cards (Removable Memory)](../getting_started/px4_basic_concepts.md#sd-cards-removable-memory).
:::
## Motors/Servo
Motors/servos are connected to the **M1~M16** ports in the order specified for your vehicle in the [Airframe Reference](../airframes/airframe_reference.md).
![Motors](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_08.jpg)
## Servo Power Supply
The X25 EVO does not supply power to servos. If you need to power servos:
1. Connect a BEC to the positive and negative terminals of any column among **M1 ~ M16** (the positive and negative terminals of **M1 ~ M16** are interconnected).
2. Then connect the servos to the same column.
![servo power supply](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_09.jpg)
::: info
The power rail voltage must be appropriate for the servo being used!
:::
## 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)
## Further information
- [CUAV Docs](https://doc.cuav.net/) (CUAV)
- [X25 EVO](../flight_controller/cuav_x25-evo.md) (PX4 Doc Overview page)
- [X25 SUPER](../flight_controller/cuav_x25-super.md) (PX4 Doc Overview page)
+15 -1
View File
@@ -175,7 +175,7 @@ The fields are:
#### Flap Scale and Spoiler Scale Configuration
"Flap-control" and "Spoiler-control" are aerodynamic configurations that can either be commanded manually by the pilot (using RC, say), or are set automatically by the controller.
"Flap-control" and "Spoiler-control" are aerodynamic configurations that can either be commanded manually by the pilot (using RC or a Joystick, say) (see [Flaps and Spoiler Control with Manual Control](#flaps-and-spoiler-control-with-manual-control)), or are set automatically by the controller.
For example, a pilot or the landing system might engage "Spoiler-control" in order to reduce the airspeed before landing.
The configurations are an _abstract_ way for the controller to tell the allocator how much it should adjust the aerodynamic properties of the wings relative to the "full flaps" or "full spoiler" configuration (between `[0,1]`, where "1" indicates the full range).
@@ -198,6 +198,20 @@ In the following example, the vehicle has two ailerons, one elevator, one rudder
These are the elevator deflections added to compensate for the pitching moments generated by the flaps and spoiler actuators.
In the case here the elevator would be deflected 0.3 up when the flaps are fully deployed to counteract the pitching down moment caused by the flaps.
#### Flaps and Spoiler Control with Manual Control
The preferred method to manually actuate spoilers and flaps is to map a manual control switch to an `AUX` output (see [Generic Actuator Control with RC](#generic-actuator-control-with-rc)), and then map that AUX output to the flap or spoiler function using [FW_FLAPS_MAN](../advanced_config/parameter_reference.md#FW_FLAPS_MAN) or [FW_SPOILERS_MAN](../advanced_config/parameter_reference.md#FW_SPOILERS_MAN).
The source for the manual control can be RC or MAVLink.
::: warning
The following method is not recommended, and will be removed in a future release.
If using it you should migrate to using the AUX-based method.
It is also possible to define a flaps channel directly on the RC using [RC_MAP_FLAPS](../advanced_config/parameter_reference.md#RC_MAP_FLAPS).
This channel can also be used to control the spoilers by setting [FW_SPOILERS_MAN](../advanced_config/parameter_reference.md#FW_SPOILERS_MAN) to `Flaps channel`.
This method is not possible when the source for the manual control is MAVLink.
:::
#### Actuator Roll, Pitch, and Yaw Scaling
::: info
+15 -14
View File
@@ -314,23 +314,24 @@ The relevant parameters are shown below:
### Motor Failure Trigger
The failure detector can be configured to detect a motor failure while armed (and trigger an associated action) in the following conditions:
The failure detector can be configured to detect a motor failure while armed (and trigger an associated action) if the ESC current falls outside expected bounds for more than [MOTFAIL_TIME](#MOTFAIL_TIME) seconds.
Motor failures are non-latching: if the failure condition clears, the failure is cleared.
- A 300 ms timeout occurs in telemetry from an ESC that was previously available.
- The input current in the telemetry of an ESC which was previously positive gets too low for more than [`FD_ACT_MOT_TOUT`](FD_ACT_MOT_TOUT) ms.
The "too low" condition is defined by:
The undercurrent and overcurrent conditions are defined by:
```text
{esc current} < {parameter FD_ACT_MOT_C2T} * {motor command between 0 and 1}
```
```text
undercurrent: {esc current} < {MOTFAIL_C2T} * {motor command [0,1]} - {MOTFAIL_LOW_OFF}
overcurrent: {esc current} > {MOTFAIL_C2T} * {motor command [0,1]} + {MOTFAIL_HIGH_OFF}
```
| Parameter | Description |
| -------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <a id="FD_ACT_EN"></a>[FD_ACT_EN](../advanced_config/parameter_reference.md#FD_ACT_EN) | Enable/disable the motor failure trigger completely. |
| <a id="FD_ACT_MOT_THR"></a>[FD_ACT_MOT_THR](../advanced_config/parameter_reference.md#FD_ACT_MOT_THR) | Minimum normalized [0,1] motor command below which motor under current is ignored. |
| <a id="FD_ACT_MOT_C2T"></a>[FD_ACT_MOT_C2T](../advanced_config/parameter_reference.md#FD_ACT_MOT_C2T) | Scale between normalized [0,1] motor command and expected minimally reported current when the rotor is healthy. |
| <a id="FD_ACT_MOT_TOUT"></a>[FD_ACT_MOT_TOUT](../advanced_config/parameter_reference.md#FD_ACT_MOT_TOUT) | Time in milliseconds for which the under current detection condition needs to stay true. |
| <a id="CA_FAILURE_MODE"></a>[CA_FAILURE_MODE](../advanced_config/parameter_reference.md#CA_FAILURE_MODE) | Configure to not only warn about a motor failure but remove the first motor that detects a failure from the allocation effectiveness which turns off the motor and tries to operate the vehicle without it until disarming the next time. |
| Parameter | Description |
| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <a id="FD_ACT_EN"></a>[FD_ACT_EN](../advanced_config/parameter_reference.md#FD_ACT_EN) | Enable/disable the motor failure trigger completely. |
| <a id="MOTFAIL_C2T"></a>[MOTFAIL_C2T](../advanced_config/parameter_reference.md#MOTFAIL_C2T) | Slope between normalized motor command [01] and expected steady-state current (FD_ACT_MOT_C2T at 100%) (A/%). |
| <a id="MOTFAIL_LOW_OFF"></a>[MOTFAIL_LOW_OFF](../advanced_config/parameter_reference.md#MOTFAIL_LOW_OFF) | Undercurrent detection threshold offset (A). Subtracted from the expected current to form the lower bound. |
| <a id="MOTFAIL_HIGH_OFF"></a>[MOTFAIL_HIGH_OFF](../advanced_config/parameter_reference.md#MOTFAIL_HIGH_OFF) | Overcurrent detection threshold offset (A). Added to the expected current to form the upper bound. |
| <a id="MOTFAIL_TIME"></a>[MOTFAIL_TIME](../advanced_config/parameter_reference.md#MOTFAIL_TIME) | Hysteresis time (s) for which the current threshold must remain exceeded before a motor failure is triggered. |
| <a id="CA_FAILURE_MODE"></a>[CA_FAILURE_MODE](../advanced_config/parameter_reference.md#CA_FAILURE_MODE) | Configure to not only warn about a motor failure but remove the first motor that detects a failure from the allocation effectiveness which turns off the motor and tries to operate the vehicle without it until disarming the next time. |
### External Automatic Trigger System (ATS)
@@ -23,7 +23,7 @@ The boards in this category are:
- [CUAV V5+](../flight_controller/cuav_v5_plus.md) (FMUv5)
- [CUAV V5 nano](../flight_controller/cuav_v5_nano.md) (FMUv5)
- [CUAV X25 EVO](../flight_controller/cuav_x25-evo.md)
[CUAV X25 SUPER](../flight_controller/cuav_x25-super.md)
- [CUAV X25 SUPER](../flight_controller/cuav_x25-super.md)
- [CubePilot Cube Orange+](../flight_controller/cubepilot_cube_orangeplus.md)
- [CubePilot Cube Orange](../flight_controller/cubepilot_cube_orange.md)
- [CubePilot Cube Yellow](../flight_controller/cubepilot_cube_yellow.md)
+50 -17
View File
@@ -9,7 +9,7 @@ The _X25-EVO_ is an advanced autopilot manufactured by CUAV<sup>&reg;</sup>.
The autopilot is recommended for commercial system integration but is also suitable for academic research and any other applications.
![X25-EVO AutoPilot - hero image](../../assets/flight_controller/cuav_x25-evo/X25-EVO.jpg)
![X25-EVO AutoPilot - hero image](../../assets/flight_controller/cuav_x25-evo/x25_evo.jpg)
The X25-EVO brings you ultimate performance, stability, and reliability in every aspect.
@@ -19,12 +19,17 @@ These flight controllers are [manufacturer supported](../flight_controller/autop
### Features
- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory. Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models.
- Automotive-grade RM3100 compass. Designed for better stability and anti-interference capability.
- Triple-redundant IMUs and dual-redundant barometers located on separate buses. If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability.
- Independent LDO power control supplies power to each sensor group. A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle.
- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory.
Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models.
- Automotive-grade RM3100 compass.
Designed for better stability and anti-interference capability.
- Triple-redundant IMUs and dual-redundant barometers located on separate buses.
If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability.
- Independent LDO power control supplies power to each sensor group.
A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle.
- Integrated Microchip Ethernet PHY for high-speed communication with onboard devices like mission computers via Ethernet.
- Dual temperature compensation systems, located on the IMU board and FMU board respectively. Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs.
- Dual temperature compensation systems, located on the IMU board and FMU board respectively.
Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs.
- PWM servo output voltage switchable between 3.3V or 5V.
- Modular design for DIY carrier boards.
@@ -33,7 +38,7 @@ These flight controllers are [manufacturer supported](../flight_controller/autop
- Main Processor: STM32H743XI
- 32-bit Arm® Cortex®-M7, 480MHz, 2MB Flash, 1MB RAM
- Onboard Sensors:
- Accel/Gyro: IIM42652\*2
- Accel/Gyro: IIM42652 (x2)
- Accel/Gyro: IIM42653
- Magnetometer: RM3100
- Barometer: BMP581
@@ -47,14 +52,14 @@ These flight controllers are [manufacturer supported](../flight_controller/autop
- Servo Rail Input: 0~9.9V
- Rated Current:
- Total Output Max Current: 10A
- TELEM1 and TELEM2 Output Current limiter: 4A
- CAN1 and CAN2 Output Current limiter: 2.4A
- `TELEM1` and `TELEM2` Output Current limiter: 4A
- `CAN1` and `CAN2` Output Current limiter: 2.4A
- Other Ports Output Current limiter: 1.5A
### Interfaces
- 16x PWM Servo Outputs
- 1x Dedicated R/C Input for Spektrum / DSM and S.Bus
- 1x Dedicated R/C Input(`RC IN`) for Spektrum / DSM and S.Bus
- 1x Analog/PWM RSSI Input
- 2x TELEM Ports (with full flow control)
- 1x UART4 Port
@@ -83,7 +88,12 @@ These flight controllers are [manufacturer supported](../flight_controller/autop
### Mechanical Data
- Not provided.
- Weight
- Flight Controller Module: 110g
- Operating & storage temperature: -20 ~ 85°C
- Dimensions:
![CUAV X25 EVO](../../assets/flight_controller/cuav_x25-evo/x25_evo_size.png)
## Purchase Channels {#store}
@@ -91,11 +101,11 @@ Order from [CUAV](https://store.cuav.net/).
## Assembly/Setup
- Not provided.
The [X25 EVO Wiring Quick Start](../assembly/quick_start_cuav_x25_evo.md) provides instructions on how to assemble required/important peripherals including GPS, Power Module etc.
## Pin Definitions
## Pinouts
- Not provided.
![CUAV X25 EVO Pinout](../../assets/flight_controller/cuav_x25-evo/x25_evo_pinouts.jpg)
## Serial Port Mapping
@@ -106,12 +116,34 @@ Order from [CUAV](https://store.cuav.net/).
| USART3 | /dev/ttyS2 | Debug Console |
| UART4 | /dev/ttyS3 | UART4 |
| UART5 | /dev/ttyS4 | TELEM2 |
| USART6 | /dev/ttyS5 | RC |
| USART6 | /dev/ttyS5 | RC IN |
| UART7 | /dev/ttyS6 | TELEM1 |
## PWM Outputs {#pwm_outputs}
This flight controller supports up to 16 FMU PWM outputs (MAIN).
Outputs:
- Outputs 1-8 support [DShot](../peripherals/dshot.md).
- Outputs 9-16 do not support DShot.
- Outputs 1-7 support [Bidirectional DShot](../peripherals/dshot.md#bidirectional-dshot-telemetry).
- Output 8 supports Bidirectional DShot output only (no eRPM capture).
The 16 outputs are in 5 groups:
- Outputs 1-4 in group1 (Timer5)
- Outputs 5-8 in group2 (Timer4)
- Outputs 9-11 in group3 (Timer1)
- Outputs 12-14 in group4 (Timer8)
- Outputs 15-16 in group5 (Timer12)
All outputs within the same group must use the same output protocol and rate.
## Voltage Ratings
The _X25-EVO_ achieves triple redundancy on power supplies if three power sources are provided. The three power rails are POWERC1, POWERC2, and USB.
The _X25-EVO_ achieves triple redundancy on power supplies if three power sources are provided.
The three power rails are `POWERC1`, `POWERC2`, and `USB`.
- **POWER C1** and **POWER C2** are DroneCAN/UAVCAN battery interfaces.
@@ -154,7 +186,8 @@ The [PX4 System Console](../debug/system_console.md) and [SWD Interface](../debu
## Supported Platforms / Airframes
Any multirotor/airplane/rover or boat that can be controlled using normal RC servos or Futaba S-Bus servos. The complete set of supported configurations can be found in the [Airframe Reference](../airframes/airframe_reference.md).
Any multicopter / airplane / rover or boat that can be controlled with normal RC servos or Futaba S-Bus servos.
The complete set of supported configurations can be seen in the [Airframes Reference](../airframes/airframe_reference.md).
## Further info
+23 -18
View File
@@ -1,6 +1,6 @@
# CUAV X25-SUPER
<Badge type="tip" text="PX4 v1.18)" />
<Badge type="tip" text="PX4 v1.18" />
::: warning
PX4 does not manufacture this (or any) autopilot.
@@ -21,12 +21,17 @@ These flight controllers are [manufacturer supported](../flight_controller/autop
### Features
- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory. Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models.
- Automotive-grade RM3100 compass. Designed for better stability and anti-interference capability.
- Triple-redundant IMUs and dual-redundant barometers located on separate buses. If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability.
- Independent LDO power control supplies power to each sensor group. A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle.
- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory.
Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models.
- Automotive-grade RM3100 compass.
Designed for better stability and anti-interference capability.
- Triple-redundant IMUs and dual-redundant barometers located on separate buses.
If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability.
- Independent LDO power control supplies power to each sensor group.
A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle.
- Integrated Microchip Ethernet PHY for high-speed communication with onboard devices like mission computers via Ethernet.
- Dual temperature compensation systems, located on the IMU board and FMU board respectively. Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs.
- Dual temperature compensation systems, located on the IMU board and FMU board respectively.
Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs.
- PWM servo output voltage switchable between 3.3V or 5V.
- Modular design for DIY carrier boards.
@@ -50,14 +55,14 @@ These flight controllers are [manufacturer supported](../flight_controller/autop
- Servo Rail Input: 0~9.9V
- Rated Current:
- Total Output Max Current: 10A
- TELEM1 and TELEM2 Output Current limiter: 4A
- CAN1 and CAN2 Output Current limiter: 2.4A
- `TELEM1` and `TELEM2` Output Current limiter: 4A
- `CAN1` and `CAN2` Output Current limiter: 2.4A
- Other Ports Output Current limiter: 1.5A
### Interfaces
- 16x PWM Servo Outputs
- 1x Dedicated R/C Input for Spektrum / DSM and S.Bus
- 1x Dedicated R/C Input(`RC IN`) for Spektrum / DSM and S.Bus
- 1x Analog/PWM RSSI Input
- 2x TELEM Ports (with full flow control)
- 1x UART4 Port
@@ -80,16 +85,15 @@ These flight controllers are [manufacturer supported](../flight_controller/autop
- DroneCAN/UAVCAN Power Input
- 2x AD Ports
- Analog Input (3.3V)
- Analog Input (6.6V - not supported)
- Analog Input (6.6V - not supported by PX4)
- 1x Dedicated Debug Port
- FMU Debug
### Mechanical Data
- Size
- Flight controller
- Dimensions:
![CUAV X25-SUPER](../../assets/flight_controller/cuav_x25-super/x25-super_size.png)
![CUAV X25-SUPER](../../assets/flight_controller/cuav_x25-super/x25-super_size.png)
## Purchase Channels {#store}
@@ -97,7 +101,7 @@ Order from [CUAV](https://store.cuav.net/).
## Assembly/Setup
- Not provided.
The [X25 SUPER Wiring Quick Start](../assembly/quick_start_cuav_x25_evo.md) provides instructions on how to assemble required/important peripherals including GPS, Power Module etc.
## Pinouts
@@ -113,7 +117,7 @@ Order from [CUAV](https://store.cuav.net/).
| USART3 | /dev/ttyS2 | Debug Console |
| UART4 | /dev/ttyS3 | UART4 |
| UART5 | /dev/ttyS4 | TELEM2 |
| USART6 | /dev/ttyS5 | RC |
| USART6 | /dev/ttyS5 | RC IN |
| UART7 | /dev/ttyS6 | TELEM1 |
## RC Input
@@ -122,7 +126,8 @@ The RC input pin is directly connected to the FMU UART6 TX.
## Voltage Ratings
The _X25-SUPER_ achieves triple redundancy on power supplies if three power sources are provided. The three power rails are POWERC1, POWERC2, and USB.
The _X25-SUPER_ achieves triple redundancy on power supplies if three power sources are provided.
The three power rails are `POWERC1`, `POWERC2`, and `USB`.
- **POWER C1** and **POWER C2** are DroneCAN/UAVCAN battery interfaces.
@@ -140,13 +145,13 @@ Digital DroneCAN/UAVCAN battery monitoring is enabled by default.
## Building Firmware
::: tip
Most users will not need to build this firmware from PX4 v1.18.
Most users will not need to build this firmware (from PX4 v1.18).
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target, execute:
```
```sh
make cuav_x25-super_default
```
+64 -17
View File
@@ -2,17 +2,29 @@
<img src="../../assets/site/position_fixed.svg" title="Position fix required (e.g. GPS)" width="30px" />
:::: warning
Offboard control with ROS 2 requires _significant care_ to ensure that it is used safely.
Please read [ROS 2 Offboard Control](#ros-2-offboard-control) carefully to fully understand the risks involved when using it.
A good understanding of [PX4 controller diagrams](../flight_stack/controller_diagrams.md) is advised.
::: tip
[PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md) provides a safer alternative.
:::
::::
The vehicle obeys position, velocity, acceleration, attitude, attitude rates or thrust/torque setpoints provided by some source that is external to the flight stack, such as a companion computer.
The setpoints may be provided using MAVLink (or a MAVLink API such as [MAVSDK](https://mavsdk.mavlink.io/)) or by [ROS 2](../ros2/index.md).
PX4 requires that the external controller provides a continuous 2Hz "proof of life" signal, by streaming any of the supported MAVLink setpoint messages or the ROS 2 [OffboardControlMode](../msg_docs/OffboardControlMode.md) message.
PX4 enables offboard control only after receiving the signal for more than a second, and will regain control if the signal stops.
PX4 enables switching to offboard control mode only after receiving the signal for more than a second, and will failsafe (controlled by [COM_OBL_RC_ACT](../advanced_config/parameter_reference.md#COM_OBL_RC_ACT)) if the signal stops.
::: info
- This mode requires position or pose/attitude information - e.g. GPS, optical flow, visual-inertial odometry, mocap, etc.
- This mode requires position or pose/attitude information - e.g. GPS, optical flow, visual-inertial odometry, mocap, etc. depending on the type of offboard setpoints that the external controller sends.
- Manual control is disabled except to change modes (you can also fly without any manual controller at all by setting the parameter [COM_RC_IN_MODE](../advanced_config/parameter_reference.md#COM_RC_IN_MODE) to `4: Disable manual control`).
- The vehicle must be already be receiving a stream of MAVLink setpoint messages or ROS 2 [OffboardControlMode](../msg_docs/OffboardControlMode.md) messages before arming in offboard mode or switching to offboard mode when flying.
- The vehicle must already be receiving a stream of MAVLink setpoint messages or ROS 2 [OffboardControlMode](../msg_docs/OffboardControlMode.md) messages before arming in offboard mode or switching to offboard mode when flying.
- The vehicle will exit offboard mode if MAVLink setpoint messages or `OffboardControlMode` are not received at a rate of > 2Hz.
- Not all coordinate frames and field values allowed by MAVLink are supported for all setpoint messages and vehicles.
Read the sections below _carefully_ to ensure only supported values are used.
@@ -38,13 +50,37 @@ Note that offboard mode only supports a very limited set of MAVLink commands and
Operations, like taking off, landing, return to launch, may be best handled using the appropriate modes.
Operations like uploading, downloading missions can be performed in any mode.
## ROS 2 Messages
## ROS 2 Offboard Control
This section describes how to perform offboard control through one of the direct ROS 2 interfaces: UXRCE-DDS or Zenoh.
When using direct ROS 2 offboard control, PX4 setpoint messages generated by external controllers are injected into the [PX4 control pipeline](../flight_stack/controller_diagrams.md).
Because messages from internal and external controllers are indistinguishable within PX4, precise synchronization is required in order to avoid the controllers writing conflicting messages to the same topic.
In Offboard mode (only), an external system can use [`OffboardControlMode`](#the-offboardcontrolmode-px4-message) to specify which setpoint topics PX4 should publish/not publish, allowing them to be written safely by an external controller.
::: warning
PX4 has no means of filtering and distinguishing ROS 2 messages from internal messages, in any mode.
In order to interwork safely, the external controller must:
- Publish PX4 setpoint messages **ONLY** in Offboard mode.
- Specify which setpoints it will write using the `OffboardControlMode` topic.
- Stream the `OffboardControlMode` topic as a keep-alive signal.
- Stream the setpoints it wants: unlike with MAVLink, PX4 won't trigger a failsafe if setpoints aren't sent regularly.
If external setpoints are sent in any other flight mode, or they overwrite topics that have not been disabled by PX4 when in offboard mode, collisions are likely.
This will result in unexpected, and possibly catastrophic, behaviour.
:::
### The `OffboardControlMode` PX4 message
The following ROS 2 messages and their particular fields and field values are allowed for the specified frames.
In addition to providing heartbeat functionality, `OffboardControlMode` has two other main purposes:
1. Controls the level of the [PX4 control architecture](../flight_stack/controller_diagrams.md) at which offboard setpoints must be injected, and disables the bypassed controllers.
2. Determines which valid estimates (position or velocity) are required, and also which setpoint messages should be used.
1. Controls which internal PX4 control modules of the [PX4 control architecture](../flight_stack/controller_diagrams.md) shall remain active and which ones shall be disabled when the vehicle is in Offboard Mode.
2. Determines which valid estimates (position, velocity, etc.) are required.
The `OffboardControlMode` message is defined as shown.
@@ -69,33 +105,46 @@ For rovers see the [rover section](#rover).
The fields are ordered in terms of priority such that `position` takes precedence over `velocity` and later fields, `velocity` takes precedence over `acceleration`, and so on.
The first field that has a non-zero value (from top to bottom) defines what valid estimate is required in order to use offboard mode, and the setpoint message(s) that can be used.
For example, if the `acceleration` field is the first non-zero value, then PX4 requires a valid `velocity estimate`, and the setpoint must be specified using the `TrajectorySetpoint` message.
For example, if the `acceleration` field is the first non-zero value, then PX4 requires a valid `attitude estimate`, and the setpoint must be specified using the `TrajectorySetpoint` message.
| desired control quantity | position field | velocity field | acceleration field | attitude field | body_rate field | thrust_and_torque field | direct_actuator field | required estimate | required message |
| ------------------------ | -------------- | -------------- | ------------------ | -------------- | --------------- | ----------------------- | --------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| position (NED) | ✓ | - | - | - | - | - | - | position | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) |
| velocity (NED) | ✗ | ✓ | - | - | - | - | - | velocity | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) |
| acceleration (NED) | ✗ | ✗ | ✓ | - | - | - | - | velocity | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) |
| attitude (FRD) | ✗ | ✗ | ✗ | ✓ | - | - | - | none | [VehicleAttitudeSetpoint](../msg_docs/VehicleAttitudeSetpoint.md) |
| body_rate (FRD) | ✗ | ✗ | ✗ | ✗ | ✓ | - | - | none | [VehicleRatesSetpoint](../msg_docs/VehicleRatesSetpoint.md) |
| acceleration (NED) | ✗ | ✗ | ✓ | - | - | - | - | attitude | [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) |
| attitude (FRD) | ✗ | ✗ | ✗ | ✓ | - | - | - | attitude | [VehicleAttitudeSetpoint](../msg_docs/VehicleAttitudeSetpoint.md) |
| body_rate (FRD) | ✗ | ✗ | ✗ | ✗ | ✓ | - | - | angular velocity | [VehicleRatesSetpoint](../msg_docs/VehicleRatesSetpoint.md) |
| thrust and torque (FRD) | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | - | none | [VehicleThrustSetpoint](../msg_docs/VehicleThrustSetpoint.md) and [VehicleTorqueSetpoint](../msg_docs/VehicleTorqueSetpoint.md) |
| direct motors and servos | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | none | [ActuatorMotors](../msg_docs/ActuatorMotors.md) and [ActuatorServos](../msg_docs/ActuatorServos.md) |
where ✓ means that the bit is set, ✘ means that the bit is not set and `-` means that the bit is value is irrelevant.
where ✓ means that the bit is set, ✘ means that the bit is not set and `-` means that the bit value is irrelevant.
::: info
Before using offboard mode with ROS 2, please spend a few minutes understanding the different [frame conventions](../ros2/user_guide.md#ros-2-px4-frame-conventions) that PX4 and ROS 2 use.
:::
### Copter
In the following, the different setpoint messages for the main supported airframes are explained.
For fixed-wing offboard control, please refer to the [PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md).
### Multicopters
- [px4_msgs::msg::TrajectorySetpoint](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/TrajectorySetpoint.msg)
- The following input combinations are supported:
- Position setpoint (`position` different from `NaN`). Non-`NaN` values of velocity and acceleration are used as feedforward terms for the inner loop controllers.
- Velocity setpoint (`velocity` different from `NaN` and `position` set to `NaN`). Non-`NaN` values acceleration are used as feedforward terms for the inner loop controllers.
- Velocity setpoint (`velocity` different from `NaN` and `position` set to `NaN`). Non-`NaN` values of acceleration are used as feedforward terms for the inner loop controllers.
- Acceleration setpoint (`acceleration` different from `NaN` and `position` and `velocity` set to `NaN`)
- All values are interpreted in NED (Nord, East, Down) coordinate system and the units are `[m]`, `[m/s]` and `[m/s^2]` for position, velocity and acceleration, respectively.
- All values are interpreted in NED (North, East, Down) coordinate system and the units are `[m]`, `[m/s]` and `[m/s^2]` for position, velocity and acceleration, respectively.
::: warning
Position, velocity and acceleration control for multicopters are all handled by the `mc_pos_control` module.
This module is enabled if any of `position`, `velocity` and `acceleration` fields are set to true.
However, only the content of the `TrajectorySetpoint` messages determines which of the three controllers shall run.
This means that even if `OffboardControlMode` messages carry the intention of velocity control (only `velocity` field is set) but non-`NaN` position values are sent in the `TrajectorySetpoint` messages, then PX4 will keep running the position controller.
:::
- [px4_msgs::msg::VehicleAttitudeSetpoint](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/VehicleAttitudeSetpoint.msg)
- The following input combination is supported:
@@ -194,13 +243,11 @@ The following offboard control modes bypass all internal PX4 control loops and s
- [px4_msgs::msg::ActuatorMotors](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/ActuatorMotors.msg) + [px4_msgs::msg::ActuatorServos](https://github.com/PX4/PX4-Autopilot/blob/main/msg/versioned/ActuatorServos.msg)
- You directly control the motor outputs and/or servo outputs.
- Currently works at lower level than then `control_allocator` module.
Do not publish these messages when not in offboard mode.
- All the values normalized in `[-1, 1]`.
For outputs that do not support negative values, negative entries map to `NaN`.
- `NaN` maps to disarmed.
## MAVLink Messages
## MAVLink Offboard Control
The following MAVLink messages and their particular fields and field values are allowed for the specified vehicle frames.
+193 -192
View File
@@ -95,206 +95,207 @@ They are not build into the module, and hence are neither published or subscribe
::: details See messages
- [HomePositionV0](../msg_docs/HomePositionV0.md)
- [GimbalControls](../msg_docs/GimbalControls.md)
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
- [GpioOut](../msg_docs/GpioOut.md)
- [SensorAccel](../msg_docs/SensorAccel.md)
- [AirspeedWind](../msg_docs/AirspeedWind.md)
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
- [DatamanResponse](../msg_docs/DatamanResponse.md)
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
- [VehicleRoi](../msg_docs/VehicleRoi.md)
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
- [DebugArray](../msg_docs/DebugArray.md)
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
- [RcChannels](../msg_docs/RcChannels.md)
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
- [GainCompression](../msg_docs/GainCompression.md)
- [VehicleStatusV2](../msg_docs/VehicleStatusV2.md)
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
- [DebugValue](../msg_docs/DebugValue.md)
- [GpioConfig](../msg_docs/GpioConfig.md)
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
- [GeofenceResult](../msg_docs/GeofenceResult.md)
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
- [AdcReport](../msg_docs/AdcReport.md)
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
- [CameraTrigger](../msg_docs/CameraTrigger.md)
- [EscEepromRead](../msg_docs/EscEepromRead.md)
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
- [VelocityLimits](../msg_docs/VelocityLimits.md)
- [LedControl](../msg_docs/LedControl.md)
- [DatamanRequest](../msg_docs/DatamanRequest.md)
- [WheelEncoders](../msg_docs/WheelEncoders.md)
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
- [PowerButtonState](../msg_docs/PowerButtonState.md)
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
- [RadioStatus](../msg_docs/RadioStatus.md)
- [SensorTemp](../msg_docs/SensorTemp.md)
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
- [GpioRequest](../msg_docs/GpioRequest.md)
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
- [Mission](../msg_docs/Mission.md)
- [SystemPower](../msg_docs/SystemPower.md)
- [VehicleImu](../msg_docs/VehicleImu.md)
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
- [QshellReq](../msg_docs/QshellReq.md)
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
- [SensorSelection](../msg_docs/SensorSelection.md)
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
- [SensorsStatus](../msg_docs/SensorsStatus.md)
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
- [RtlStatus](../msg_docs/RtlStatus.md)
- [SensorUwb](../msg_docs/SensorUwb.md)
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
- [RaptorStatus](../msg_docs/RaptorStatus.md)
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
- [OrbTest](../msg_docs/OrbTest.md)
- [TecsStatus](../msg_docs/TecsStatus.md)
- [CameraStatus](../msg_docs/CameraStatus.md)
- [GpsDump](../msg_docs/GpsDump.md)
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
- [MissionResult](../msg_docs/MissionResult.md)
- [LogMessage](../msg_docs/LogMessage.md)
- [QshellRetval](../msg_docs/QshellRetval.md)
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
- [IrlockReport](../msg_docs/IrlockReport.md)
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
- [ButtonEvent](../msg_docs/ButtonEvent.md)
- [SensorCorrection](../msg_docs/SensorCorrection.md)
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
- [DeviceInformation](../msg_docs/DeviceInformation.md)
- [Gripper](../msg_docs/Gripper.md)
- [SensorMag](../msg_docs/SensorMag.md)
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
- [EscReport](../msg_docs/EscReport.md)
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
- [MagWorkerData](../msg_docs/MagWorkerData.md)
- [EstimatorStates](../msg_docs/EstimatorStates.md)
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
- [Cpuload](../msg_docs/Cpuload.md)
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
- [GpsInjectData](../msg_docs/GpsInjectData.md)
- [SensorSelection](../msg_docs/SensorSelection.md)
- [DatamanResponse](../msg_docs/DatamanResponse.md)
- [GpioRequest](../msg_docs/GpioRequest.md)
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
- [CameraStatus](../msg_docs/CameraStatus.md)
- [RaptorInput](../msg_docs/RaptorInput.md)
- [GimbalControls](../msg_docs/GimbalControls.md)
- [MavlinkLog](../msg_docs/MavlinkLog.md)
- [MountOrientation](../msg_docs/MountOrientation.md)
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
- [RtlStatus](../msg_docs/RtlStatus.md)
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
- [RaptorStatus](../msg_docs/RaptorStatus.md)
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
- [FollowTarget](../msg_docs/FollowTarget.md)
- [SensorTemp](../msg_docs/SensorTemp.md)
- [EscEepromRead](../msg_docs/EscEepromRead.md)
- [EstimatorFusionControl](../msg_docs/EstimatorFusionControl.md)
- [SensorsStatus](../msg_docs/SensorsStatus.md)
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
- [PowerMonitor](../msg_docs/PowerMonitor.md)
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
- [SensorUwb](../msg_docs/SensorUwb.md)
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
- [DatamanRequest](../msg_docs/DatamanRequest.md)
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
- [UlogStream](../msg_docs/UlogStream.md)
- [VehicleRoi](../msg_docs/VehicleRoi.md)
- [EscStatus](../msg_docs/EscStatus.md)
- [QshellReq](../msg_docs/QshellReq.md)
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
- [ActionRequest](../msg_docs/ActionRequest.md)
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
- [IrlockReport](../msg_docs/IrlockReport.md)
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
- [SensorCorrection](../msg_docs/SensorCorrection.md)
- [DebugValue](../msg_docs/DebugValue.md)
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
- [SensorBaro](../msg_docs/SensorBaro.md)
- [WheelEncoders](../msg_docs/WheelEncoders.md)
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
- [PpsCapture](../msg_docs/PpsCapture.md)
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
- [Event](../msg_docs/Event.md)
- [GpioIn](../msg_docs/GpioIn.md)
- [PowerMonitor](../msg_docs/PowerMonitor.md)
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
- [RaptorInput](../msg_docs/RaptorInput.md)
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
- [ActionRequest](../msg_docs/ActionRequest.md)
- [ActuatorTest](../msg_docs/ActuatorTest.md)
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
- [SensorBaro](../msg_docs/SensorBaro.md)
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
- [SensorGyro](../msg_docs/SensorGyro.md)
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
- [MountOrientation](../msg_docs/MountOrientation.md)
- [HealthReport](../msg_docs/HealthReport.md)
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
- [HeaterStatus](../msg_docs/HeaterStatus.md)
- [UlogStream](../msg_docs/UlogStream.md)
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
- [PwmInput](../msg_docs/PwmInput.md)
- [EventV0](../msg_docs/EventV0.md)
- [FollowTarget](../msg_docs/FollowTarget.md)
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
- [Ping](../msg_docs/Ping.md)
- [RcParameterMap](../msg_docs/RcParameterMap.md)
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
- [Airspeed](../msg_docs/Airspeed.md)
- [EscEepromWrite](../msg_docs/EscEepromWrite.md)
- [BatteryInfo](../msg_docs/BatteryInfo.md)
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
- [LoggerStatus](../msg_docs/LoggerStatus.md)
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
- [CellularStatus](../msg_docs/CellularStatus.md)
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
- [MavlinkLog](../msg_docs/MavlinkLog.md)
- [GpsInjectData](../msg_docs/GpsInjectData.md)
- [InputRc](../msg_docs/InputRc.md)
- [DebugVect](../msg_docs/DebugVect.md)
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
- [SensorAirflow](../msg_docs/SensorAirflow.md)
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
- [EscStatus](../msg_docs/EscStatus.md)
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
- [Vtx](../msg_docs/Vtx.md)
- [RangingBeacon](../msg_docs/RangingBeacon.md)
- [NeuralControl](../msg_docs/NeuralControl.md)
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
- [OrbitStatus](../msg_docs/OrbitStatus.md)
- [VehicleAirData](../msg_docs/VehicleAirData.md)
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
- [Rpm](../msg_docs/Rpm.md)
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
- [CameraCapture](../msg_docs/CameraCapture.md)
- [EstimatorStates](../msg_docs/EstimatorStates.md)
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
- [RadioStatus](../msg_docs/RadioStatus.md)
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
- [PwmInput](../msg_docs/PwmInput.md)
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
- [BatteryInfo](../msg_docs/BatteryInfo.md)
- [ButtonEvent](../msg_docs/ButtonEvent.md)
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
- [VelocityLimits](../msg_docs/VelocityLimits.md)
- [AirspeedWind](../msg_docs/AirspeedWind.md)
- [GpioOut](../msg_docs/GpioOut.md)
- [SensorAccel](../msg_docs/SensorAccel.md)
- [SensorAirflow](../msg_docs/SensorAirflow.md)
- [Vtx](../msg_docs/Vtx.md)
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
- [DebugArray](../msg_docs/DebugArray.md)
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
- [EventV0](../msg_docs/EventV0.md)
- [HealthReport](../msg_docs/HealthReport.md)
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
- [AdcReport](../msg_docs/AdcReport.md)
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
- [OrbTest](../msg_docs/OrbTest.md)
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
- [RangingBeacon](../msg_docs/RangingBeacon.md)
- [MissionResult](../msg_docs/MissionResult.md)
- [EstimatorBias](../msg_docs/EstimatorBias.md)
- [LedControl](../msg_docs/LedControl.md)
- [MagWorkerData](../msg_docs/MagWorkerData.md)
- [EscReport](../msg_docs/EscReport.md)
- [Rpm](../msg_docs/Rpm.md)
- [CameraCapture](../msg_docs/CameraCapture.md)
- [DebugVect](../msg_docs/DebugVect.md)
- [TuneControl](../msg_docs/TuneControl.md)
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
- [Ping](../msg_docs/Ping.md)
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
- [GpsDump](../msg_docs/GpsDump.md)
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
- [VehicleAirData](../msg_docs/VehicleAirData.md)
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
- [NeuralControl](../msg_docs/NeuralControl.md)
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
- [LoggerStatus](../msg_docs/LoggerStatus.md)
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
- [VehicleStatusV2](../msg_docs/VehicleStatusV2.md)
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
- [GainCompression](../msg_docs/GainCompression.md)
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
- [Cpuload](../msg_docs/Cpuload.md)
- [Mission](../msg_docs/Mission.md)
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
- [LogMessage](../msg_docs/LogMessage.md)
- [HomePositionV0](../msg_docs/HomePositionV0.md)
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
- [QshellRetval](../msg_docs/QshellRetval.md)
- [GpioIn](../msg_docs/GpioIn.md)
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
- [SensorMag](../msg_docs/SensorMag.md)
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
- [DeviceInformation](../msg_docs/DeviceInformation.md)
- [OrbitStatus](../msg_docs/OrbitStatus.md)
- [CellularStatus](../msg_docs/CellularStatus.md)
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
- [TecsStatus](../msg_docs/TecsStatus.md)
- [Event](../msg_docs/Event.md)
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
- [VehicleImu](../msg_docs/VehicleImu.md)
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
- [CameraTrigger](../msg_docs/CameraTrigger.md)
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
- [SensorGyro](../msg_docs/SensorGyro.md)
- [ActuatorTest](../msg_docs/ActuatorTest.md)
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
- [GpioConfig](../msg_docs/GpioConfig.md)
- [EscEepromWrite](../msg_docs/EscEepromWrite.md)
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
- [HeaterStatus](../msg_docs/HeaterStatus.md)
- [InputRc](../msg_docs/InputRc.md)
- [RcParameterMap](../msg_docs/RcParameterMap.md)
- [SystemPower](../msg_docs/SystemPower.md)
- [GeofenceResult](../msg_docs/GeofenceResult.md)
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
- [RcChannels](../msg_docs/RcChannels.md)
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
- [Airspeed](../msg_docs/Airspeed.md)
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
:::
@@ -0,0 +1,65 @@
---
pageClass: is-wide-page
---
# EstimatorFusionControl (UORB message)
**TOPICS:** estimator_fusion_control
## Fields
| Name | Type | Unit [Frame] | Range/Enum | Description |
| --------------- | --------- | ------------ | ---------- | -------------------------------------- |
| timestamp | `uint64` | | | time since system start (microseconds) |
| gps_intended | `bool[2]` | | |
| of_intended | `bool` | | |
| ev_intended | `bool` | | |
| agp_intended | `bool[4]` | | |
| baro_intended | `bool` | | |
| rng_intended | `bool` | | |
| mag_intended | `bool` | | |
| aspd_intended | `bool` | | |
| rngbcn_intended | `bool` | | |
| gps_active | `bool[2]` | | |
| of_active | `bool` | | |
| ev_active | `bool` | | |
| agp_active | `bool[4]` | | |
| baro_active | `bool` | | |
| rng_active | `bool` | | |
| mag_active | `bool` | | |
| aspd_active | `bool` | | |
| rngbcn_active | `bool` | | |
## Source Message
[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorFusionControl.msg)
::: details Click here to see original file
```c
uint64 timestamp # time since system start (microseconds)
# sensor intended for fusion (enabled via EKF2_SENS_EN AND CTRL param != disabled)
bool[2] gps_intended
bool of_intended
bool ev_intended
bool[4] agp_intended
bool baro_intended
bool rng_intended
bool mag_intended
bool aspd_intended
bool rngbcn_intended
# whether the estimator is actively fusing data from each source
bool[2] gps_active
bool of_active
bool ev_active
bool[4] agp_active
bool baro_active
bool rng_active
bool mag_active
bool aspd_active
bool rngbcn_active
```
:::
+34
View File
@@ -1458,6 +1458,20 @@ None
| 6 | | | ? |
| 7 | | | ? |
### VEHICLE_CMD_ESTIMATOR_SENSOR_ENABLE (43006)
Enable/disable estimator sensor fusion.
| Param | Units | Range/Enum | Description |
| ----- | ----- | ---------- | ---------------------------------- |
| 1 | | | Source (FUSION*SOURCE*\*) |
| 2 | | | Sensor instance (0-based) |
| 3 | | | Enable (1) or Disable (0) |
| 4 | | | Estimator Instance (NaN: not used) |
| 5 | | | Empty |
| 6 | | | Empty |
| 7 | | | Empty |
### VEHICLE_CMD_PX4_INTERNAL_START (65537)
Start of PX4 internal only vehicle commands (> UINT16_MAX).
@@ -1544,6 +1558,15 @@ Change mode by specifying nav_state directly.
| --------------------------------------------------------------------------------------------------------- | -------- | ----- | ----------------------------------------------------------------------------------------------------- |
| <a id="#MESSAGE_VERSION"></a> MESSAGE_VERSION | `uint32` | 0 |
| <a id="#PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION"></a> PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION | `uint16` | 3 | Param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration. |
| <a id="#FUSION_SOURCE_GPS"></a> FUSION_SOURCE_GPS | `uint8` | 0 | GNSS (EKF2_GPS{i}\_CTRL, use instance param) |
| <a id="#FUSION_SOURCE_OF"></a> FUSION_SOURCE_OF | `uint8` | 1 | Optical Flow (EKF2_OF_CTRL) |
| <a id="#FUSION_SOURCE_EV"></a> FUSION_SOURCE_EV | `uint8` | 2 | External Vision (EKF2_EV_CTRL) |
| <a id="#FUSION_SOURCE_AGP"></a> FUSION_SOURCE_AGP | `uint8` | 3 | Auxiliary Global Position (EKF2_AGP{i}\_CTRL, use instance param) |
| <a id="#FUSION_SOURCE_BARO"></a> FUSION_SOURCE_BARO | `uint8` | 4 | Barometer (EKF2_BARO_CTRL) |
| <a id="#FUSION_SOURCE_RNG"></a> FUSION_SOURCE_RNG | `uint8` | 5 | Range Finder (EKF2_RNG_CTRL) |
| <a id="#FUSION_SOURCE_MAG"></a> FUSION_SOURCE_MAG | `uint8` | 6 | Magnetometer (EKF2_MAG_TYPE) |
| <a id="#FUSION_SOURCE_ASPD"></a> FUSION_SOURCE_ASPD | `uint8` | 7 | Airspeed (EKF2_ARSP_THR) |
| <a id="#FUSION_SOURCE_RNGBCN"></a> FUSION_SOURCE_RNGBCN | `uint8` | 8 | Ranging Beacon |
| <a id="#VEHICLE_MOUNT_MODE_RETRACT"></a> VEHICLE_MOUNT_MODE_RETRACT | `uint8` | 0 | Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization. |
| <a id="#VEHICLE_MOUNT_MODE_NEUTRAL"></a> VEHICLE_MOUNT_MODE_NEUTRAL | `uint8` | 1 | Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. |
| <a id="#VEHICLE_MOUNT_MODE_MAVLINK_TARGETING"></a> VEHICLE_MOUNT_MODE_MAVLINK_TARGETING | `uint8` | 2 | Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization. |
@@ -1710,6 +1733,17 @@ uint16 VEHICLE_CMD_DO_WINCH = 42600 # Command to operate winch.
uint16 VEHICLE_CMD_EXTERNAL_POSITION_ESTIMATE = 43003 # External reset of estimator global position when dead reckoning.
uint16 VEHICLE_CMD_EXTERNAL_WIND_ESTIMATE = 43004
uint16 VEHICLE_CMD_ESTIMATOR_SENSOR_ENABLE = 43006 # Enable/disable estimator sensor fusion. |Source (FUSION_SOURCE_*)|Sensor instance (0-based)|Enable (1) or Disable (0)|Estimator Instance (NaN: not used)|Empty|Empty|Empty|
# Sensor fusion source types for VEHICLE_CMD_ESTIMATOR_SENSOR_ENABLE
uint8 FUSION_SOURCE_GPS = 0 # GNSS (EKF2_GPS{i}_CTRL, use instance param)
uint8 FUSION_SOURCE_OF = 1 # Optical Flow (EKF2_OF_CTRL)
uint8 FUSION_SOURCE_EV = 2 # External Vision (EKF2_EV_CTRL)
uint8 FUSION_SOURCE_AGP = 3 # Auxiliary Global Position (EKF2_AGP{i}_CTRL, use instance param)
uint8 FUSION_SOURCE_BARO = 4 # Barometer (EKF2_BARO_CTRL)
uint8 FUSION_SOURCE_RNG = 5 # Range Finder (EKF2_RNG_CTRL)
uint8 FUSION_SOURCE_MAG = 6 # Magnetometer (EKF2_MAG_TYPE)
uint8 FUSION_SOURCE_ASPD = 7 # Airspeed (EKF2_ARSP_THR)
uint8 FUSION_SOURCE_RNGBCN = 8 # Ranging Beacon
# PX4 vehicle commands (beyond 16 bit MAVLink commands).
uint32 VEHICLE_CMD_PX4_INTERNAL_START = 65537 # Start of PX4 internal only vehicle commands (> UINT16_MAX).
+1
View File
@@ -95,6 +95,7 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m
- [EstimatorBias](EstimatorBias.md)
- [EstimatorBias3d](EstimatorBias3d.md)
- [EstimatorEventFlags](EstimatorEventFlags.md)
- [EstimatorFusionControl](EstimatorFusionControl.md)
- [EstimatorGpsStatus](EstimatorGpsStatus.md)
- [EstimatorInnovations](EstimatorInnovations.md)
- [EstimatorSelectorStatus](EstimatorSelectorStatus.md)
+1
View File
@@ -23,6 +23,7 @@ Recommended digital airspeed sensors include:
- [Holybro High Precision DroneCAN Airspeed Sensor - DLVR](https://holybro.com/collections/sensors/products/high-precision-dronecan-airspeed-sensor-dlvr)
- [RaccoonLab Cyphal/CAN and DroneCAN Airspeed Sensor - MS4525DO](https://raccoonlab.co/tproduct/360882105-652259850171-cyphal-and-dronecan-airspeed-v2)
- [Avionics Anonymous Air Data Computer with OAT probe](https://www.tindie.com/products/avionicsanonymous/uavcan-air-data-computer-airspeed-sensor/)
- [UAV-DEV GmbH DroneCAN Airspeed and Barometer Sensor - AUAV](https://wiki.uav-dev.com/en/product/airspeed/auav)
- Based on [Venturi effect](https://en.wikipedia.org/wiki/Venturi_effect)
- [TFSLOT](airspeed_tfslot.md) Venturi effect airspeed sensor.
+100
View File
@@ -0,0 +1,100 @@
# Holybro SiK Telemetry Radio - Long Range
This Holybro SiK Long Range Telemetry Radio is a small, light, and inexpensive open-source radio platform with an extended range (~20km) compared to the standard model.
This radio is plug-and-play, ready for all Pixhawk Standard and other similar flight controllers, providing the easiest way to set up a telemetry connection between your controller and a ground station.
It uses open-source firmware that has been specially designed to work well with MAVLink packets and to be integrated with PX4, ArduPilot, Mission Planner and QGroundControl.
The radios are available in 915 MHz or 433 MHz versions.
Please purchase the model that is appropriate for your country/region.
![Sik Telemetry Radio - Long Range](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange.jpg)
## Where to Buy
- [Holybro SiK Telemetry Radio - Long Range](https://holybro.com/collections/telemetry-radios/products/sik-telemetry-radio-1w)
## Features
- 1W maximum RF output and up to 20km range (compared to 100mW/300m for the short range version).
- Open-source SIK firmware
- Plug-n-play for Pixhawk Standard Flight Controllers
- The Easiest way to connect your controller and Ground Station
- Interchangeable air and ground radio
- 6-position JST-GH connector
## Specification
- 1 W maximum output power (adjustable) -117 dBm receive sensitivity
- RP-SMA connector
- 2-way full-duplex communication through adaptive TDM UART interface
- Transparent serial link
- MAVLink protocol framing
- Frequency Hopping Spread Spectrum (FHSS) Configurable duty cycle
- Error correction corrects up to 25% of bit errors Open-source SIK firmware
- Configurable through Mission Planner & APM Planner
- FT230X USB to BASIC UART IC
- USB Type C connector
- XT30 power connector for 7~28V DC input
## LEDs Indicators Status
The radios have four status LEDs.
The USB `RX` and `TX` LEDs indicate the status of reception and transmission of the USB port.
The `RADIO` and `ACT` two LED lights indicate the status of the RF circuit.
- USB-TX LED (orange):
- Blinking: USB port has data transmission
- Off: USB port has no data transmission
- USB-RX LED (orange):
- Blinking: USB port has data reception
- Off: USB port has no data reception
- Radio LED (Green)
- Blinking: Searching for another radio
- Solid: Link is established with another radio
- ACT LED (Red)
- Flashing: Transmitting data
- Solid: In firmware update mode
![Holybro SiK LongRange LED Indicators](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_label.png)
## Connecting to Flight Controller
Supply the power (7~28V) to the radio via the XT30 connector.
Use the 6-pin JST-GH connector that comes with the radio to connect the radio to your flight controller's `TELEM1` port.
Note that `TELEM2` can also be used, but you may need to [configure the telemetry port](../peripherals/mavlink_peripherals.md) on some flight controllers.
## Connecting to a PC or Ground Station
First, power the module with a 7~28V DC source.
Then, connect the radio to your Windows PC or Ground Station using a Type-C USB cable.
The necessary drivers should be installed automatically, and the radio will appear as a new “USB Serial Port” in the Windows Device Manager under Ports (COM & LPT).
The Mission Planner's COM Port selection drop-down should also include the newly added COM port.
## Packages Include
### Single Radio
- 1W Radio modules with antennas (1)
- High-gain omnidirectional antenna (1)
- Male Type-C to male Type-C USB cable (1)
- Male XT30 to female XT30 adapter cable (1)
- Male XT30 to female XT60 adapter cable (1)
- JST-GH-6P to JST-GH-6P cable (1) (for Pixhawk Standard FC)
- Rubber damping grommet (3)
![Sik Telemetry Radio - LongRange Package1](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_include1.png)
### Pair Radios
- 1W Radio modules with antennas (2)
- High-gain omnidirectional antenna (2)
- Male Type-C to male Type-C USB cable (1)
- Male XT30 to female XT30 adapter cable (1)
- Male XT30 to female XT60 adapter cable (1)
- JST-GH-6P to JST-GH-6P cable (1) (for Pixhawk Standard FC)
- Rubber damping grommet (3)
![Sik Telemetry Radio - LongRange Package2](../../assets/hardware/telemetry/holybro_sik_longrange/holybro_sik_longrange_include2.png)
+1
View File
@@ -6,6 +6,7 @@ PX4 supports a number of types of telemetry radios:
- [SiK Radio](../telemetry/sik_radio.md) based firmware (more generally, any radio with a UART interface should work).
- [HolyBro SiK Telemetry Radio](../telemetry/holybro_sik_radio.md)
- [HolyBro SiK Long Range](../telemetry/holybro_sik_longrange.md)
- [RFD900 Telemetry Radio](../telemetry/rfd900_telemetry.md)
- [ThunderFly TFSIK01 Telemetry Radio](../telemetry/tfsik_telemetry.md)
- <del>_HKPilot Telemetry Radio_</del> (Discontinued)
+1
View File
@@ -14,6 +14,7 @@ Hardware for the SiK radio can be obtained from various manufacturers/stores in
## Vendors
- [Holybro Telemetry Radio](../telemetry/holybro_sik_radio.md)
- [HolyBro SiK Long Range](../telemetry/holybro_sik_longrange.md)
- [RFD900 Telemetry Radio](../telemetry/rfd900_telemetry.md)
- [ThunderFly TFSIK01 Telemetry Radio](../telemetry/tfsik_telemetry.md)
- <del>_HKPilot Telemetry Radio_</del> (Discontinued)
+7
View File
@@ -22,6 +22,8 @@ For significant changes to the system you should also run general flight tests u
These test cards define "standard" flight tests.
These are run by the test team as part of release testing, and for more significant system changes.
### Multicopter
- [MC_01 - Manual modes](../test_cards/mc_01_manual_modes.md)
- [MC_02 - Full Autonomous](../test_cards/mc_02_full_autonomous.md)
- [MC_03 - Auto Manual Mix](../test_cards/mc_03_auto_manual_mix.md)
@@ -32,3 +34,8 @@ These are run by the test team as part of release testing, and for more signific
- [MC_08 - DSHOT ESC](../test_cards/mc_08_dshot.md)
- [MC_09 - VIO (Visual-Inertial Odometry)](../test_cards/mc_09_vio.md)
- [MC_10 - Optical Flow / GPS Mixed](../test_cards/mc_10_optical_flow_gps_mixed.md)
### Fixed Wing
- [FW_01 - Manual Modes](../test_cards/fw_01_manual_modes.md)
- [FW_02 - Full Autonomous](../test_cards/fw_02_full_autonomous.md)
+46
View File
@@ -0,0 +1,46 @@
# Test FW_01 - Manual Modes
## Objective
To test that manual flight modes work as expected for fixed wing vehicles.
## Preflight
Ensure that the vehicle can go into Stabilized, Altitude, and Position mode while still on the ground.
## Flight Tests
❏ Stabilized
&nbsp;&nbsp;&nbsp;&nbsp;❏ Wings level with stick centered
&nbsp;&nbsp;&nbsp;&nbsp;❏ Pitch/Roll response with correct bank angle limits
&nbsp;&nbsp;&nbsp;&nbsp;❏ Yaw coordination
&nbsp;&nbsp;&nbsp;&nbsp;❏ Throttle response 1:1
❏ Altitude
&nbsp;&nbsp;&nbsp;&nbsp;❏ Altitude should hold current value with stick centered
&nbsp;&nbsp;&nbsp;&nbsp;❏ Pitch input controls climb/descend rate
&nbsp;&nbsp;&nbsp;&nbsp;❏ Throttle automatically managed to maintain airspeed
&nbsp;&nbsp;&nbsp;&nbsp;❏ Roll/Yaw respond correctly to stick movement
❏ Position
&nbsp;&nbsp;&nbsp;&nbsp;❏ Vehicle should hold current heading and loiter with stick centered
&nbsp;&nbsp;&nbsp;&nbsp;❏ Altitude should hold current value
&nbsp;&nbsp;&nbsp;&nbsp;❏ Roll input commands heading change
## Expected Results
- Takeoff should be smooth (hand launch or runway)
- No oscillations should be present in any of the above flight modes
- Vehicle should maintain stable flight throughout all mode transitions
- Landing approach should be stable and controllable
@@ -0,0 +1,64 @@
# Test FW_02 - Full Autonomous
## Objective
To test the auto modes such as Mission, Takeoff, Hold, and RTL for fixed wing vehicles.
## Preflight
Plan a mission on the ground. Ensure the mission has:
- Takeoff as first waypoint
- Changes in altitude throughout the mission
- Last waypoint is an RTL
- Duration of 1 to 2 minutes
## Flight Tests
❏ Takeoff
&nbsp;&nbsp;&nbsp;&nbsp;❏ Engage Takeoff mode (hand launch or runway)
&nbsp;&nbsp;&nbsp;&nbsp;❏ Vehicle should climb to takeoff altitude
&nbsp;&nbsp;&nbsp;&nbsp;❏ Vehicle should hold/loiter after reaching takeoff altitude
❏ Mission
&nbsp;&nbsp;&nbsp;&nbsp;❏ Auto takeoff (hand launch or runway)
&nbsp;&nbsp;&nbsp;&nbsp;❏ Verify changes in altitude throughout the mission
&nbsp;&nbsp;&nbsp;&nbsp;❏ Verify Mission Ends in RTL
&nbsp;&nbsp;&nbsp;&nbsp;❏ Duration of 1 to 2 minutes
&nbsp;&nbsp;&nbsp;&nbsp;❏ Auto land or hold at end
❏ Hold
&nbsp;&nbsp;&nbsp;&nbsp;❏ Engage Hold mode during flight
&nbsp;&nbsp;&nbsp;&nbsp;❏ Vehicle should orbit at current position and altitude
&nbsp;&nbsp;&nbsp;&nbsp;❏ Orbit radius and direction should match parameters
❏ RTL
&nbsp;&nbsp;&nbsp;&nbsp;❏ Arm and takeoff in any manual mode
&nbsp;&nbsp;&nbsp;&nbsp;❏ Fly out ~200m from start point
&nbsp;&nbsp;&nbsp;&nbsp;❏ Engage Return mode
&nbsp;&nbsp;&nbsp;&nbsp;❏ Vehicle should climb to RTL altitude if below it
&nbsp;&nbsp;&nbsp;&nbsp;❏ Vehicle should return to home and hold or land
## Expected Results
- Mission should upload on first attempt
- Vehicle should automatically takeoff upon engaging Auto
- Waypoint tracking should be smooth with appropriate turn radius
- Vehicle should adjust height to RTL altitude before returning home
- Landing approach should be stable (if auto-land is configured)
+1
View File
@@ -172,6 +172,7 @@
- [CUAV V5 nano (FMUv5)](flight_controller/cuav_v5_nano.md)
- [CUAV V5 nano 배선 퀵 스타트](assembly/quick_start_cuav_v5_nano.md)
- [CUAV X25 EVO](flight_controller/cuav_x25-evo.md)
- [CUAV X25 EVO Wiring Quick Start](assembly/quick_start_cuav_x25_evo.md)
- [CUAV X25 SUPER](flight_controller/cuav_x25-super.md)
- [CubePilot Cube Orange+ (CubePilot)](flight_controller/cubepilot_cube_orangeplus.md)
- [CubePilot Cube Orange (CubePilot)](flight_controller/cubepilot_cube_orange.md)
@@ -27,6 +27,8 @@ Supported flight controllers include:
- [ARK Electronics ARKV6X](../flight_controller/ark_v6x.md)
- [CUAV Pixhawk V6X](../flight_controller/cuav_pixhawk_v6x.md)
- [CUAV X25 EVO](../flight_controller/cuav_x25-evo.md)
- [CUAV X25 SUPER](../flight_controller/cuav_x25-super.md)
- [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md)
- [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md)
- [RaccoonLab FMUv6X Autopilot](../flight_controller/raccoonlab_fmu6x.md)
+1
View File
@@ -410,6 +410,7 @@ They recommend sensors, power systems, and other components from the same manufa
- [CUAV Pixhawk V6X Wiring QuickStart](../assembly/quick_start_cuav_pixhawk_v6x.md)
- [CUAV V5+ Wiring Quickstart](../assembly/quick_start_cuav_v5_plus.md)
- [CUAV V5 nano Wiring Quickstart](../assembly/quick_start_cuav_v5_nano.md)
- [CUAV X25 EVO Wiring Quickstart](../assembly/quick_start_cuav_x25_evo.md)
- [Holybro Pixhawk 6C Wiring Quickstart](../assembly/quick_start_pixhawk6c.md)
- [Holybro Pixhawk 6X Wiring Quickstart](../assembly/quick_start_pixhawk6x.md)
- [Holybro Pixhawk 5X Wiring Quickstart](../assembly/quick_start_pixhawk5x.md)
@@ -0,0 +1,154 @@
# CUAV X25 EVO Wiring Quick Start
:::warning
PX4 does not manufacture this (or any) autopilot.
Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues.
:::
This quick start guide shows how to power the [X25 EVO](../flight_controller/cuav_x25-evo.md) flight controller and connect its most important peripherals.
:::info
The following flight controller models are applicable to this quick start guide.
[CUAV X25 SUPER](../flight_controller/cuav_x25-super.md)
:::
## 배선 개요
아래의 이미지는 주요 센서와 주변 장치(모터 및 서보 출력 제외)들의 연결 방법을 설명합니다.
다음 섹션에서 각 장치에 대하여 자세히 설명합니다.
![wiring](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_01.jpg)
| 인터페이스 | **Function** |
| :----------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| POWER C1/C2 | Connect the PMU2 Lite to this port; this port is used for connecting the DroneCAN power module |
| M1 ~ M16 | PWM signal output ports, usable for controlling motors or servos; support 3.3V/5V PWM configuration |
| RC IN | Connect remote controller receivers with one-way protocols (e.g., SBUS/DSM/PPM). Note: ELRS/CRSF receivers should be connected to any serial port, not RC IN |
| RSSI | For connecting signal strength feedback modules |
| GPS&SAFETY | Connect Neo-series GPS or C-RTK-series RTK; this port includes interfaces for GPS, safety switch, and buzzer |
| GPS2 | Usable for connecting additional GPS/RTK modules |
| DEBUG (DSU) | For FMU chip debugging and reading debug device information; with ArduPilot firmware, it can be configured for other serial port functions |
| ADC3V3 | For analog level signal detection; the maximum detectable level signal is 3.3V |
| ADC6V6 | For analog level signal detection; the maximum detectable level signal is 6.6V (PX4 is not supported.) |
| TF CARD | Insert an SD card here to enable log storage functionality |
| ETH | Ethernet port, usable for connecting Ethernet devices such as companion computers |
| I2C1/2/3 | Connect external I2C devices (e.g., external compasses) for communication between the controller and I2C devices |
| TELEM1/TELEM2 | Connect telemetry modules (for data transmission) to enable MAVLINK data interaction |
| CAN1/2 | For communication between the controller and DroneCAN devices (e.g., connecting NEO4 SE GPS) |
| TYPE C | USB port of the controller, usable for connecting to the ground station, flashing firmware, and other operations |
| SPI6 | SPI port for external expansion; generally not used |
## Vehicle Front
:::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).
:::
![front](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_02.jpg)
## GPS + 나침반 + 부저 + 안전 스위치 + LED
We recommend using a CAN GPS/RTK (such as [Neo 4SE](https://store.cuav.net/shop/cuav-neo-4-se-gps-module/)); simply connect it to the **CAN 1** or **CAN 2** port.
You can also use a standard GPS/RTK module(such as [NEO3 GPS](https://store.cuav.net/shop/neo-3/) (10-pin connector)) by connecting it to the **GPS&SAFETY** port.
Most commonly used GPS modules today integrate GPS, compass, safety switch, buzzer, and LED status light.
If you need to use assisted GPS, connect to the **GPS2** port.
The GPS/compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible (separating the compass from other electronics will reduce interference), with the direction markings towards the front of the vehicle (the arrow on the NEO GPS should match the arrow on the flight controller).
![GPS](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_03.jpg)
:::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.
안전 스위치를 다시 눌러 안전 장치를 활성화하고 기체 시동을 끌 수 있습니다.
조종기나 지상국 프로그램에서 기체 시동을 끌 수 없는 상황에서 유용합니다.
:::
## 무선 조종
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).
Connection methods vary by remote controller and receiver type:
### Android Remote Controllers
Take the H16 as an example:
![H16 control](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_04.jpg)
Connect **TELEM1/TELEM2** to the UART0 port of the H16 remote controller, and link the H16s SBUS pin to the **RC IN** port.
### SBUS/DSM/PPM Protocol Receivers
![SBUS/DSM/PPM control](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_05.jpg)
Use wires to connect the receiver to the **RC IN** port at the rear of the controller.
### ELRS/CRSF Receivers
![ELRS/CRSF control](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_06.jpg)
Connect the [ELRS/CRSF](../telemetry/crsf_telemetry.md) receiver to any UART serial port of the X25 EVO (e.g., **TELEM2**).
## 전원
The X25 EVO comes standard with the PMU2 Lite power module, which supports 2070V input and can measure a maximum current of 220A.
It can be directly connected to the **Power C1/C2** port of the X25 EVO and is plug-and-play (no configuration required).
![Power](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_07.png)
## Telemetry (Radio) System
[Telemetry system](../telemetry/index.md) allows you to communicate with the unmanned system via ground station software, enabling you to monitor and control the UAVs status during flight. Connect the on-board unit of the telemetry system to the **TELEM1** or **TELEM2** port.
You can also purchase telemetry radios from the [CUAV store](https://store.cuav.net/uav-telemetry-module/).
![Telemetry system](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_04.jpg)
## SD 카드
SD cards are highly recommended as they are required for [recording and analyzing flight details](../getting_started/flight_reporting.md), running tasks and using UAVCAN bus hardware.
An SD card is already installed on X25 EVO when it leaves the factory.
:::tip
For more information see [Basic Concepts > SD Cards (Removable Memory)](../getting_started/px4_basic_concepts.md#sd-cards-removable-memory).
:::
## Motors/Servo
Motors/servos are connected to the **M1~M16** ports in the order specified for your vehicle in the [Airframe Reference](../airframes/airframe_reference.md).
![Motors](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_08.jpg)
## Servo Power Supply
The X25 EVO does not supply power to servos. If you need to power servos:
1. Connect a BEC to the positive and negative terminals of any column among **M1 ~ M16** (the positive and negative terminals of **M1 ~ M16** are interconnected).
2. Then connect the servos to the same column.
![servo power supply](../../assets/flight_controller/cuav_x25-evo/x25_evo_quickstart_09.jpg)
:::info
The power rail voltage must be appropriate for the servo being used!
:::
## 기타 주변 장치
The wiring and configuration of optional/less common components is covered within the topics for individual [peripherals](../peripherals/index.md).
## 설정
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)
## 추가 정보
- [CUAV Docs](https://doc.cuav.net/) (CUAV)
- [X25 EVO](../flight_controller/cuav_x25-evo.md) (PX4 Doc Overview page)
- [X25 SUPER](../flight_controller/cuav_x25-super.md) (PX4 Doc Overview page)
+15 -1
View File
@@ -176,7 +176,7 @@ The fields are:
#### Flap Scale and Spoiler Scale Configuration
"Flap-control" and "Spoiler-control" are aerodynamic configurations that can either be commanded manually by the pilot (using RC, say), or are set automatically by the controller.
"Flap-control" and "Spoiler-control" are aerodynamic configurations that can either be commanded manually by the pilot (using RC or a Joystick, say) (see [Flaps and Spoiler Control with Manual Control](#flaps-and-spoiler-control-with-manual-control)), or are set automatically by the controller.
For example, a pilot or the landing system might engage "Spoiler-control" in order to reduce the airspeed before landing.
The configurations are an _abstract_ way for the controller to tell the allocator how much it should adjust the aerodynamic properties of the wings relative to the "full flaps" or "full spoiler" configuration (between `[0,1]`, where "1" indicates the full range).
@@ -199,6 +199,20 @@ In the following example, the vehicle has two ailerons, one elevator, one rudder
These are the elevator deflections added to compensate for the pitching moments generated by the flaps and spoiler actuators.
In the case here the elevator would be deflected 0.3 up when the flaps are fully deployed to counteract the pitching down moment caused by the flaps.
#### Flaps and Spoiler Control with Manual Control
The preferred method to manually actuate spoilers and flaps is to map a manual control switch to an `AUX` output (see [Generic Actuator Control with RC](#generic-actuator-control-with-rc)), and then map that AUX output to the flap or spoiler function using [FW_FLAPS_MAN](../advanced_config/parameter_reference.md#FW_FLAPS_MAN) or [FW_SPOILERS_MAN](../advanced_config/parameter_reference.md#FW_SPOILERS_MAN).
The source for the manual control can be RC or MAVLink.
:::warning
The following method is not recommended, and will be removed in a future release.
If using it you should migrate to using the AUX-based method.
It is also possible to define a flaps channel directly on the RC using [RC_MAP_FLAPS](../advanced_config/parameter_reference.md#RC_MAP_FLAPS).
This channel can also be used to control the spoilers by setting [FW_SPOILERS_MAN](../advanced_config/parameter_reference.md#FW_SPOILERS_MAN) to `Flaps channel`.
This method is not possible when the source for the manual control is MAVLink.
:::
#### 액추에이터 롤, 피치 및 요 스케일링
:::info
+15 -14
View File
@@ -314,23 +314,24 @@ The failure detector is active in all vehicle types and modes, except for those
### Motor Failure Trigger
The failure detector can be configured to detect a motor failure while armed (and trigger an associated action) in the following conditions:
The failure detector can be configured to detect a motor failure while armed (and trigger an associated action) if the ESC current falls outside expected bounds for more than [MOTFAIL_TIME](#MOTFAIL_TIME) seconds.
Motor failures are non-latching: if the failure condition clears, the failure is cleared.
- A 300 ms timeout occurs in telemetry from an ESC that was previously available.
- The input current in the telemetry of an ESC which was previously positive gets too low for more than [`FD_ACT_MOT_TOUT`](FD_ACT_MOT_TOUT) ms.
The "too low" condition is defined by:
The undercurrent and overcurrent conditions are defined by:
```text
{esc current} < {parameter FD_ACT_MOT_C2T} * {motor command between 0 and 1}
```
```text
undercurrent: {esc current} < {MOTFAIL_C2T} * {motor command [0,1]} - {MOTFAIL_LOW_OFF}
overcurrent: {esc current} > {MOTFAIL_C2T} * {motor command [0,1]} + {MOTFAIL_HIGH_OFF}
```
| 매개변수 | 설명 |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <a id="FD_ACT_EN"></a>[FD_ACT_EN](../advanced_config/parameter_reference.md#FD_ACT_EN) | Enable/disable the motor failure trigger completely. |
| <a id="FD_ACT_MOT_THR"></a>[FD_ACT_MOT_THR](../advanced_config/parameter_reference.md#FD_ACT_MOT_THR) | Minimum normalized [0,1] motor command below which motor under current is ignored. |
| <a id="FD_ACT_MOT_C2T"></a>[FD_ACT_MOT_C2T](../advanced_config/parameter_reference.md#FD_ACT_MOT_C2T) | Scale between normalized [0,1] motor command and expected minimally reported current when the rotor is healthy. |
| <a id="FD_ACT_MOT_TOUT"></a>[FD_ACT_MOT_TOUT](../advanced_config/parameter_reference.md#FD_ACT_MOT_TOUT) | Time in milliseconds for which the under current detection condition needs to stay true. |
| <a id="CA_FAILURE_MODE"></a>[CA_FAILURE_MODE](../advanced_config/parameter_reference.md#CA_FAILURE_MODE) | Configure to not only warn about a motor failure but remove the first motor that detects a failure from the allocation effectiveness which turns off the motor and tries to operate the vehicle without it until disarming the next time. |
| 매개변수 | 설명 |
| ----------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <a id="FD_ACT_EN"></a>[FD_ACT_EN](../advanced_config/parameter_reference.md#FD_ACT_EN) | Enable/disable the motor failure trigger completely. |
| <a id="MOTFAIL_C2T"></a>[MOTFAIL_C2T](../advanced_config/parameter_reference.md#MOTFAIL_C2T) | Slope between normalized motor command [01] and expected steady-state current (FD_ACT_MOT_C2T at 100%) (A/%). |
| <a id="MOTFAIL_LOW_OFF"></a>[MOTFAIL_LOW_OFF](../advanced_config/parameter_reference.md#MOTFAIL_LOW_OFF) | Undercurrent detection threshold offset (A). Subtracted from the expected current to form the lower bound. |
| <a id="MOTFAIL_HIGH_OFF"></a>[MOTFAIL_HIGH_OFF](../advanced_config/parameter_reference.md#MOTFAIL_HIGH_OFF) | Overcurrent detection threshold offset (A). Added to the expected current to form the upper bound. |
| <a id="MOTFAIL_TIME"></a>[MOTFAIL_TIME](../advanced_config/parameter_reference.md#MOTFAIL_TIME) | Hysteresis time (s) for which the current threshold must remain exceeded before a motor failure is triggered. |
| <a id="CA_FAILURE_MODE"></a>[CA_FAILURE_MODE](../advanced_config/parameter_reference.md#CA_FAILURE_MODE) | Configure to not only warn about a motor failure but remove the first motor that detects a failure from the allocation effectiveness which turns off the motor and tries to operate the vehicle without it until disarming the next time. |
### 외부 자동 작동 시스템 (ATS)
@@ -23,7 +23,7 @@ This category includes boards that are not fully compliant with the pixhawk stan
- [CUAV V5+](../flight_controller/cuav_v5_plus.md) (FMUv5)
- [CUAV V5 nano](../flight_controller/cuav_v5_nano.md) (FMUv5)
- [CUAV X25 EVO](../flight_controller/cuav_x25-evo.md)
[CUAV X25 SUPER](../flight_controller/cuav_x25-super.md)
- [CUAV X25 SUPER](../flight_controller/cuav_x25-super.md)
- [CubePilot Cube Orange+](../flight_controller/cubepilot_cube_orangeplus.md)
- [CubePilot Cube Orange](../flight_controller/cubepilot_cube_orange.md)
- [CubePilot Cube Yellow](../flight_controller/cubepilot_cube_yellow.md)
+50 -17
View File
@@ -9,7 +9,7 @@ The _X25-EVO_ is an advanced autopilot manufactured by CUAV<sup>&reg;</sup>.
The autopilot is recommended for commercial system integration but is also suitable for academic research and any other applications.
![X25-EVO AutoPilot - hero image](../../assets/flight_controller/cuav_x25-evo/X25-EVO.jpg)
![X25-EVO AutoPilot - hero image](../../assets/flight_controller/cuav_x25-evo/x25_evo.jpg)
The X25-EVO brings you ultimate performance, stability, and reliability in every aspect.
@@ -19,12 +19,17 @@ The X25-EVO brings you ultimate performance, stability, and reliability in every
### 특징
- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory. Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models.
- Automotive-grade RM3100 compass. Designed for better stability and anti-interference capability.
- Triple-redundant IMUs and dual-redundant barometers located on separate buses. If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability.
- Independent LDO power control supplies power to each sensor group. A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle.
- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory.
Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models.
- Automotive-grade RM3100 compass.
Designed for better stability and anti-interference capability.
- Triple-redundant IMUs and dual-redundant barometers located on separate buses.
If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability.
- Independent LDO power control supplies power to each sensor group.
A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle.
- Integrated Microchip Ethernet PHY for high-speed communication with onboard devices like mission computers via Ethernet.
- Dual temperature compensation systems, located on the IMU board and FMU board respectively. Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs.
- Dual temperature compensation systems, located on the IMU board and FMU board respectively.
Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs.
- PWM servo output voltage switchable between 3.3V or 5V.
- Modular design for DIY carrier boards.
@@ -33,7 +38,7 @@ The X25-EVO brings you ultimate performance, stability, and reliability in every
- Main Processor: STM32H743XI
- 32-bit Arm® Cortex®-M7, 480MHz, 2MB Flash, 1MB RAM
- Onboard Sensors:
- Accel/Gyro: IIM42652\*2
- Accel/Gyro: IIM42652 (x2)
- Accel/Gyro: IIM42653
- 자력계 : RM3100
- Barometer: BMP581
@@ -47,14 +52,14 @@ The X25-EVO brings you ultimate performance, stability, and reliability in every
- Servo Rail Input: 0~9.9V
- Rated Current:
- Total Output Max Current: 10A
- TELEM1 and TELEM2 Output Current limiter: 4A
- CAN1 and CAN2 Output Current limiter: 2.4A
- `TELEM1` and `TELEM2` Output Current limiter: 4A
- `CAN1` and `CAN2` Output Current limiter: 2.4A
- Other Ports Output Current limiter: 1.5A
### 인터페이스
- 16x PWM Servo Outputs
- 1x Dedicated R/C Input for Spektrum / DSM and S.Bus
- 1x Dedicated R/C Input(`RC IN`) for Spektrum / DSM and S.Bus
- 1x Analog/PWM RSSI Input
- 2x TELEM Ports (with full flow control)
- 1x UART4 Port
@@ -83,7 +88,12 @@ The X25-EVO brings you ultimate performance, stability, and reliability in every
### 기계식 부품
- Not provided.
- 중량
- Flight Controller Module: 110g
- Operating & storage temperature: -20 ~ 85°C
- Dimensions:
![CUAV X25 EVO](../../assets/flight_controller/cuav_x25-evo/x25_evo_size.png)
## Purchase Channels {#store}
@@ -91,11 +101,11 @@ Order from [CUAV](https://store.cuav.net/).
## 조립 및 설정
- Not provided.
The [X25 EVO Wiring Quick Start](../assembly/quick_start_cuav_x25_evo.md) provides instructions on how to assemble required/important peripherals including GPS, Power Module etc.
## Pin Definitions
## 핀배열
- Not provided.
![CUAV X25 EVO Pinout](../../assets/flight_controller/cuav_x25-evo/x25_evo_pinouts.jpg)
## 시리얼 포트 매핑
@@ -106,12 +116,34 @@ Order from [CUAV](https://store.cuav.net/).
| USART3 | /dev/ttyS2 | 디버그 콘솔 |
| UART4 | /dev/ttyS3 | UART4 |
| UART5 | /dev/ttyS4 | TELEM2 |
| USART6 | /dev/ttyS5 | RC |
| USART6 | /dev/ttyS5 | RC IN |
| UART7 | /dev/ttyS6 | TELEM1 |
## PWM Outputs {#pwm_outputs}
This flight controller supports up to 16 FMU PWM outputs (MAIN).
Outputs:
- Outputs 1-8 support [DShot](../peripherals/dshot.md).
- Outputs 9-16 do not support DShot.
- Outputs 1-7 support [Bidirectional DShot](../peripherals/dshot.md#bidirectional-dshot-telemetry).
- Output 8 supports Bidirectional DShot output only (no eRPM capture).
The 16 outputs are in 5 groups:
- Outputs 1-4 in group1 (Timer5)
- Outputs 5-8 in group2 (Timer4)
- Outputs 9-11 in group3 (Timer1)
- Outputs 12-14 in group4 (Timer8)
- Outputs 15-16 in group5 (Timer12)
All outputs within the same group must use the same output protocol and rate.
## 정격 전압
The _X25-EVO_ achieves triple redundancy on power supplies if three power sources are provided. The three power rails are POWERC1, POWERC2, and USB.
The _X25-EVO_ achieves triple redundancy on power supplies if three power sources are provided.
The three power rails are `POWERC1`, `POWERC2`, and `USB`.
- **POWER C1** and **POWER C2** are DroneCAN/UAVCAN battery interfaces.
@@ -154,7 +186,8 @@ The [PX4 System Console](../debug/system_console.md) and [SWD Interface](../debu
## 지원 플랫폼 및 기체
Any multirotor/airplane/rover or boat that can be controlled using normal RC servos or Futaba S-Bus servos. The complete set of supported configurations can be found in the [Airframe Reference](../airframes/airframe_reference.md).
일반 RC 서보 또는 Futaba S-Bus 서보로 제어 가능한 모든 멀티콥터/비행기/로버 또는 보트.
The complete set of supported configurations can be seen in the [Airframes Reference](../airframes/airframe_reference.md).
## 추가 정보
+23 -18
View File
@@ -1,6 +1,6 @@
# CUAV X25-SUPER
<Badge type="tip" text="PX4 v1.18)" />
<Badge type="tip" text="PX4 v1.18" />
:::warning
PX4 does not manufacture this (or any) autopilot.
@@ -21,12 +21,17 @@ The X25-SUPER brings you ultimate performance, stability, and reliability in eve
### 특징
- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory. Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models.
- Automotive-grade RM3100 compass. Designed for better stability and anti-interference capability.
- Triple-redundant IMUs and dual-redundant barometers located on separate buses. If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability.
- Independent LDO power control supplies power to each sensor group. A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle.
- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory.
Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models.
- Automotive-grade RM3100 compass.
Designed for better stability and anti-interference capability.
- Triple-redundant IMUs and dual-redundant barometers located on separate buses.
If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability.
- Independent LDO power control supplies power to each sensor group.
A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle.
- Integrated Microchip Ethernet PHY for high-speed communication with onboard devices like mission computers via Ethernet.
- Dual temperature compensation systems, located on the IMU board and FMU board respectively. Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs.
- Dual temperature compensation systems, located on the IMU board and FMU board respectively.
Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs.
- PWM servo output voltage switchable between 3.3V or 5V.
- Modular design for DIY carrier boards.
@@ -50,14 +55,14 @@ The X25-SUPER brings you ultimate performance, stability, and reliability in eve
- Servo Rail Input: 0~9.9V
- Rated Current:
- Total Output Max Current: 10A
- TELEM1 and TELEM2 Output Current limiter: 4A
- CAN1 and CAN2 Output Current limiter: 2.4A
- `TELEM1` and `TELEM2` Output Current limiter: 4A
- `CAN1` and `CAN2` Output Current limiter: 2.4A
- Other Ports Output Current limiter: 1.5A
### 인터페이스
- 16x PWM Servo Outputs
- 1x Dedicated R/C Input for Spektrum / DSM and S.Bus
- 1x Dedicated R/C Input(`RC IN`) for Spektrum / DSM and S.Bus
- 1x Analog/PWM RSSI Input
- 2x TELEM Ports (with full flow control)
- 1x UART4 Port
@@ -80,16 +85,15 @@ The X25-SUPER brings you ultimate performance, stability, and reliability in eve
- DroneCAN/UAVCAN Power Input
- 2x AD Ports
- Analog Input (3.3V)
- Analog Input (6.6V - not supported)
- Analog Input (6.6V - not supported by PX4)
- 1x Dedicated Debug Port
- FMU Debug
### 기계식 부품
- Size
- Flight controller
- Dimensions:
![CUAV X25-SUPER](../../assets/flight_controller/cuav_x25-super/x25-super_size.png)
![CUAV X25-SUPER](../../assets/flight_controller/cuav_x25-super/x25-super_size.png)
## Purchase Channels {#store}
@@ -97,7 +101,7 @@ Order from [CUAV](https://store.cuav.net/).
## 조립 및 설정
- Not provided.
The [X25 SUPER Wiring Quick Start](../assembly/quick_start_cuav_x25_evo.md) provides instructions on how to assemble required/important peripherals including GPS, Power Module etc.
## 핀배열
@@ -113,7 +117,7 @@ Order from [CUAV](https://store.cuav.net/).
| USART3 | /dev/ttyS2 | 디버그 콘솔 |
| UART4 | /dev/ttyS3 | UART4 |
| UART5 | /dev/ttyS4 | TELEM2 |
| USART6 | /dev/ttyS5 | RC |
| USART6 | /dev/ttyS5 | RC IN |
| UART7 | /dev/ttyS6 | TELEM1 |
## RC Input
@@ -122,7 +126,8 @@ The RC input pin is directly connected to the FMU UART6 TX.
## 정격 전압
The _X25-SUPER_ achieves triple redundancy on power supplies if three power sources are provided. The three power rails are POWERC1, POWERC2, and USB.
The _X25-SUPER_ achieves triple redundancy on power supplies if three power sources are provided.
The three power rails are `POWERC1`, `POWERC2`, and `USB`.
- **POWER C1** and **POWER C2** are DroneCAN/UAVCAN battery interfaces.
@@ -140,13 +145,13 @@ Digital DroneCAN/UAVCAN battery monitoring is enabled by default.
## 펌웨어 빌드
:::tip
Most users will not need to build this firmware from PX4 v1.18.
Most users will not need to build this firmware (from PX4 v1.18).
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
:::
To [build PX4](../dev_setup/building_px4.md) for this target, execute:
```
```sh
make cuav_x25-super_default
```
+2 -2
View File
@@ -159,7 +159,7 @@ Runs after the package is installed. Common tasks:
- Board-specific setup (e.g., DSP signature generation)
```bash
#!/bin/bash
#!/usr/bin/env bash
set -e
# Create px4-* symlinks
@@ -185,7 +185,7 @@ fi
Runs before the package is removed:
```bash
#!/bin/bash
#!/usr/bin/env bash
set -e
# Stop the service
+16
View File
@@ -70,3 +70,19 @@ The command line and GUI interfaces are shown below.
### menuconfig Command Line Interface
![menuconfig command line interface](../../assets/hardware/kconfig-guiconfig.png)
## Fortified Toolchain Compatibility
Some toolchains define `_FORTIFY_SOURCE` by default. Those toolchains generally require some optimization, which means PX4 configurations that use `-O0` may fail.
PX4 keeps the default debug optimization unchanged unless you explicitly opt in. To switch `PX4_DEBUG_OPT_LEVEL` from `-O0` to `-Og`, enable:
- `Toolchain > Fortified toolchain support`
This is the Kconfig symbol:
```sh
CONFIG_BOARD_SUPPORT_FORTIFIED_TOOLCHAIN=y
```
You can set it either in `boardconfig`/`boardguiconfig` or directly in your board's `*.px4board` file.
+197 -195
View File
@@ -96,206 +96,208 @@ They are not build into the module, and hence are neither published or subscribe
:::details
See messages
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
- [CameraStatus](../msg_docs/CameraStatus.md)
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
- [RcParameterMap](../msg_docs/RcParameterMap.md)
- [Rpm](../msg_docs/Rpm.md)
- [EscStatus](../msg_docs/EscStatus.md)
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
- [RadioStatus](../msg_docs/RadioStatus.md)
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
- [SensorAirflow](../msg_docs/SensorAirflow.md)
- [LedControl](../msg_docs/LedControl.md)
- [HealthReport](../msg_docs/HealthReport.md)
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
- [GpsInjectData](../msg_docs/GpsInjectData.md)
- [NeuralControl](../msg_docs/NeuralControl.md)
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
- [RtlStatus](../msg_docs/RtlStatus.md)
- [DebugValue](../msg_docs/DebugValue.md)
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
- [PpsCapture](../msg_docs/PpsCapture.md)
- [RcChannels](../msg_docs/RcChannels.md)
- [SensorMag](../msg_docs/SensorMag.md)
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
- [DeviceInformation](../msg_docs/DeviceInformation.md)
- [FollowTarget](../msg_docs/FollowTarget.md)
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
- [Mission](../msg_docs/Mission.md)
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
- [VehicleRoi](../msg_docs/VehicleRoi.md)
- [InputRc](../msg_docs/InputRc.md)
- [GimbalControls](../msg_docs/GimbalControls.md)
- [SystemPower](../msg_docs/SystemPower.md)
- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
- [ActuatorTest](../msg_docs/ActuatorTest.md)
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
- [VehicleImu](../msg_docs/VehicleImu.md)
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
- [Cpuload](../msg_docs/Cpuload.md)
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
- [TuneControl](../msg_docs/TuneControl.md)
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
- [DebugVect](../msg_docs/DebugVect.md)
- [TecsStatus](../msg_docs/TecsStatus.md)
- [ButtonEvent](../msg_docs/ButtonEvent.md)
- [DebugArray](../msg_docs/DebugArray.md)
- [VelocityLimits](../msg_docs/VelocityLimits.md)
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
- [SensorUwb](../msg_docs/SensorUwb.md)
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
- [MavlinkLog](../msg_docs/MavlinkLog.md)
- [SensorsStatus](../msg_docs/SensorsStatus.md)
- [HomePositionV0](../msg_docs/HomePositionV0.md)
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
- [EventV0](../msg_docs/EventV0.md)
- [EstimatorStates](../msg_docs/EstimatorStates.md)
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
- [VehicleAirData](../msg_docs/VehicleAirData.md)
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
- [MagWorkerData](../msg_docs/MagWorkerData.md)
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
- [Vtx](../msg_docs/Vtx.md)
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
- [Gripper](../msg_docs/Gripper.md)
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
- [GeofenceResult](../msg_docs/GeofenceResult.md)
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
- [BatteryInfo](../msg_docs/BatteryInfo.md)
- [ActionRequest](../msg_docs/ActionRequest.md)
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
- [EstimatorBias](../msg_docs/EstimatorBias.md)
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
- [Ping](../msg_docs/Ping.md)
- [GainCompression](../msg_docs/GainCompression.md)
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
- [VehicleStatusV2](../msg_docs/VehicleStatusV2.md)
- [RaptorInput](../msg_docs/RaptorInput.md)
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
- [Event](../msg_docs/Event.md)
- [GpioConfig](../msg_docs/GpioConfig.md)
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
- [RaptorStatus](../msg_docs/RaptorStatus.md)
- [GpioOut](../msg_docs/GpioOut.md)
- [SensorAccel](../msg_docs/SensorAccel.md)
- [SensorTemp](../msg_docs/SensorTemp.md)
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
- [PowerButtonState](../msg_docs/PowerButtonState.md)
- [OrbTest](../msg_docs/OrbTest.md)
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
- [DatamanRequest](../msg_docs/DatamanRequest.md)
- [EscEepromRead](../msg_docs/EscEepromRead.md)
- [OrbitStatus](../msg_docs/OrbitStatus.md)
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
- [CameraTrigger](../msg_docs/CameraTrigger.md)
- [QshellRetval](../msg_docs/QshellRetval.md)
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
- [CameraCapture](../msg_docs/CameraCapture.md)
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
- [DatamanResponse](../msg_docs/DatamanResponse.md)
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
- [GeofenceResult](../msg_docs/GeofenceResult.md)
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
- [QshellReq](../msg_docs/QshellReq.md)
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
- [VehicleImu](../msg_docs/VehicleImu.md)
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
- [GpioRequest](../msg_docs/GpioRequest.md)
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
- [CameraStatus](../msg_docs/CameraStatus.md)
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
- [MountOrientation](../msg_docs/MountOrientation.md)
- [Gripper](../msg_docs/Gripper.md)
- [RtlStatus](../msg_docs/RtlStatus.md)
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
- [GpsInjectData](../msg_docs/GpsInjectData.md)
- [Cpuload](../msg_docs/Cpuload.md)
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
- [HealthReport](../msg_docs/HealthReport.md)
- [DatamanRequest](../msg_docs/DatamanRequest.md)
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
- [RangingBeacon](../msg_docs/RangingBeacon.md)
- [AirspeedWind](../msg_docs/AirspeedWind.md)
- [VelocityLimits](../msg_docs/VelocityLimits.md)
- [SensorGyro](../msg_docs/SensorGyro.md)
- [GimbalControls](../msg_docs/GimbalControls.md)
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
- [NeuralControl](../msg_docs/NeuralControl.md)
- [DebugArray](../msg_docs/DebugArray.md)
- [WheelEncoders](../msg_docs/WheelEncoders.md)
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
- [GpioOut](../msg_docs/GpioOut.md)
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
- [RaptorStatus](../msg_docs/RaptorStatus.md)
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
- [MissionResult](../msg_docs/MissionResult.md)
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
- [IrlockReport](../msg_docs/IrlockReport.md)
- [PowerMonitor](../msg_docs/PowerMonitor.md)
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
- [Ping](../msg_docs/Ping.md)
- [DeviceInformation](../msg_docs/DeviceInformation.md)
- [VehicleStatusV2](../msg_docs/VehicleStatusV2.md)
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
- [HeaterStatus](../msg_docs/HeaterStatus.md)
- [SensorMag](../msg_docs/SensorMag.md)
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
- [EscEepromRead](../msg_docs/EscEepromRead.md)
- [TecsStatus](../msg_docs/TecsStatus.md)
- [UlogStream](../msg_docs/UlogStream.md)
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
- [SensorBaro](../msg_docs/SensorBaro.md)
- [SensorsStatus](../msg_docs/SensorsStatus.md)
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
- [Mission](../msg_docs/Mission.md)
- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
- [EscStatus](../msg_docs/EscStatus.md)
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
- [CameraCapture](../msg_docs/CameraCapture.md)
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
- [ActionRequest](../msg_docs/ActionRequest.md)
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
- [LogMessage](../msg_docs/LogMessage.md)
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
- [ActuatorTest](../msg_docs/ActuatorTest.md)
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
- [AirspeedWind](../msg_docs/AirspeedWind.md)
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
- [PwmInput](../msg_docs/PwmInput.md)
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
- [IrlockReport](../msg_docs/IrlockReport.md)
- [QshellReq](../msg_docs/QshellReq.md)
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
- [SensorCorrection](../msg_docs/SensorCorrection.md)
- [CellularStatus](../msg_docs/CellularStatus.md)
- [UlogStream](../msg_docs/UlogStream.md)
- [GpioIn](../msg_docs/GpioIn.md)
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
- [WheelEncoders](../msg_docs/WheelEncoders.md)
- [EscReport](../msg_docs/EscReport.md)
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
- [MissionResult](../msg_docs/MissionResult.md)
- [LogMessage](../msg_docs/LogMessage.md)
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
- [PowerMonitor](../msg_docs/PowerMonitor.md)
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
- [HeaterStatus](../msg_docs/HeaterStatus.md)
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
- [GpioRequest](../msg_docs/GpioRequest.md)
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
- [SensorBaro](../msg_docs/SensorBaro.md)
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
- [GpsDump](../msg_docs/GpsDump.md)
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
- [Airspeed](../msg_docs/Airspeed.md)
- [LoggerStatus](../msg_docs/LoggerStatus.md)
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
- [SensorGyro](../msg_docs/SensorGyro.md)
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
- [MountOrientation](../msg_docs/MountOrientation.md)
- [EscEepromWrite](../msg_docs/EscEepromWrite.md)
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
- [SensorSelection](../msg_docs/SensorSelection.md)
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
- [AdcReport](../msg_docs/AdcReport.md)
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
- [GpioConfig](../msg_docs/GpioConfig.md)
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
- [OrbitStatus](../msg_docs/OrbitStatus.md)
- [Rpm](../msg_docs/Rpm.md)
- [InputRc](../msg_docs/InputRc.md)
- [SensorTemp](../msg_docs/SensorTemp.md)
- [TuneControl](../msg_docs/TuneControl.md)
- [SensorAccel](../msg_docs/SensorAccel.md)
- [CameraTrigger](../msg_docs/CameraTrigger.md)
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
- [EstimatorBias](../msg_docs/EstimatorBias.md)
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
- [MagWorkerData](../msg_docs/MagWorkerData.md)
- [PowerButtonState](../msg_docs/PowerButtonState.md)
- [QshellRetval](../msg_docs/QshellRetval.md)
- [RcChannels](../msg_docs/RcChannels.md)
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
- [EscEepromWrite](../msg_docs/EscEepromWrite.md)
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
- [CellularStatus](../msg_docs/CellularStatus.md)
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
- [ButtonEvent](../msg_docs/ButtonEvent.md)
- [SystemPower](../msg_docs/SystemPower.md)
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
- [SensorCorrection](../msg_docs/SensorCorrection.md)
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
- [EscReport](../msg_docs/EscReport.md)
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
- [SensorSelection](../msg_docs/SensorSelection.md)
- [DebugValue](../msg_docs/DebugValue.md)
- [GpioIn](../msg_docs/GpioIn.md)
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
- [EstimatorFusionControl](../msg_docs/EstimatorFusionControl.md)
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
- [DatamanResponse](../msg_docs/DatamanResponse.md)
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
- [Vtx](../msg_docs/Vtx.md)
- [Event](../msg_docs/Event.md)
- [OrbTest](../msg_docs/OrbTest.md)
- [BatteryInfo](../msg_docs/BatteryInfo.md)
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
- [RcParameterMap](../msg_docs/RcParameterMap.md)
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
- [PwmInput](../msg_docs/PwmInput.md)
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
- [RadioStatus](../msg_docs/RadioStatus.md)
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
- [VehicleAirData](../msg_docs/VehicleAirData.md)
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
- [EstimatorStates](../msg_docs/EstimatorStates.md)
- [LedControl](../msg_docs/LedControl.md)
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
- [MavlinkLog](../msg_docs/MavlinkLog.md)
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
- [EventV0](../msg_docs/EventV0.md)
- [GpsDump](../msg_docs/GpsDump.md)
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
- [GainCompression](../msg_docs/GainCompression.md)
- [VehicleRoi](../msg_docs/VehicleRoi.md)
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
- [FollowTarget](../msg_docs/FollowTarget.md)
- [SensorUwb](../msg_docs/SensorUwb.md)
- [PpsCapture](../msg_docs/PpsCapture.md)
- [HomePositionV0](../msg_docs/HomePositionV0.md)
- [LoggerStatus](../msg_docs/LoggerStatus.md)
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
- [SensorAirflow](../msg_docs/SensorAirflow.md)
- [DebugVect](../msg_docs/DebugVect.md)
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
- [Airspeed](../msg_docs/Airspeed.md)
- [RaptorInput](../msg_docs/RaptorInput.md)
:::
+2 -2
View File
@@ -4,7 +4,7 @@ pageClass: is-wide-page
# EstimatorAidSource1d (UORB message)
**TOPICS:** estimator_aid_src_baro_hgt estimator_aid_src_ev_hgt estimator_aid_src_gnss_hgt estimator_aid_src_rng_hgt estimator_aid_src_airspeed estimator_aid_src_sideslip estimator_aid_src_fake_hgt estimator_aid_src_gnss_yaw estimator_aid_src_ev_yaw
**TOPICS:** estimator_aid_src_baro_hgt estimator_aid_src_ev_hgt estimator_aid_src_gnss_hgt estimator_aid_src_rng_hgt estimator_aid_src_ranging_beacon estimator_aid_src_airspeed estimator_aid_src_sideslip estimator_aid_src_fake_hgt estimator_aid_src_gnss_yaw estimator_aid_src_ev_yaw
## Fields
@@ -56,7 +56,7 @@ float32 test_ratio_filtered # signed filtered test ratio
bool innovation_rejected # true if the observation has been rejected
bool fused # true if the sample was successfully fused
# TOPICS estimator_aid_src_baro_hgt estimator_aid_src_ev_hgt estimator_aid_src_gnss_hgt estimator_aid_src_rng_hgt
# TOPICS estimator_aid_src_baro_hgt estimator_aid_src_ev_hgt estimator_aid_src_gnss_hgt estimator_aid_src_rng_hgt estimator_aid_src_ranging_beacon
# TOPICS estimator_aid_src_airspeed estimator_aid_src_sideslip
# TOPICS estimator_aid_src_fake_hgt
# TOPICS estimator_aid_src_gnss_yaw estimator_aid_src_ev_yaw
@@ -0,0 +1,66 @@
---
pageClass: is-wide-page
---
# EstimatorFusionControl (UORB message)
**TOPICS:** estimator_fusion_control
## Fields
| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 |
| ------------------------------------ | --------- | ---------------------------------------------------------------- | ---------- | --------------------------------------------------------- |
| timestamp | `uint64` | | | time since system start (microseconds) |
| gps_intended | `bool[2]` | | | |
| of_intended | `bool` | | | |
| ev_intended | `bool` | | | |
| agp_intended | `bool[4]` | | | |
| baro_intended | `bool` | | | |
| rng_intended | `bool` | | | |
| mag_intended | `bool` | | | |
| aspd_intended | `bool` | | | |
| rngbcn_intended | `bool` | | | |
| gps_active | `bool[2]` | | | |
| of_active | `bool` | | | |
| ev_active | `bool` | | | |
| agp_active | `bool[4]` | | | |
| baro_active | `bool` | | | |
| rng_active | `bool` | | | |
| mag_active | `bool` | | | |
| aspd_active | `bool` | | | |
| rngbcn_active | `bool` | | | |
## Source Message
[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorFusionControl.msg)
:::details
Click here to see original file
```c
uint64 timestamp # time since system start (microseconds)
# sensor intended for fusion (enabled via EKF2_SENS_EN AND CTRL param != disabled)
bool[2] gps_intended
bool of_intended
bool ev_intended
bool[4] agp_intended
bool baro_intended
bool rng_intended
bool mag_intended
bool aspd_intended
bool rngbcn_intended
# whether the estimator is actively fusing data from each source
bool[2] gps_active
bool of_active
bool ev_active
bool[4] agp_active
bool baro_active
bool rng_active
bool mag_active
bool aspd_active
bool rngbcn_active
```
:::
+73
View File
@@ -0,0 +1,73 @@
---
pageClass: is-wide-page
---
# RangingBeacon (UORB message)
Ranging beacon measurement data (e.g. LoRa, UWB).
**TOPICS:** ranging_beacon
## Fields
| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 |
| ------------------------------------- | --------- | ---------------------------------------------------------------- | ------------------------------------------ | ----------------------------------------------------------------------------------- |
| timestamp | `uint64` | us | | time since system start |
| timestamp_sample | `uint64` | us | | the timestamp of the raw data |
| beacon_id | `uint8` | | | |
| range | `float32` | m | | Range measurement |
| lat | `float64` | deg | | Latitude |
| lon | `float64` | deg | | Longitude |
| alt | `float32` | m | | Beacon altitude (frame defined in alt_type) |
| alt_type | `uint8` | | [ALT_TYPE](#ALT_TYPE) | Altitude frame for alt field |
| hacc | `float32` | m | | Groundbeacon horizontal accuracy |
| vacc | `float32` | m | | Groundbeacon vertical accuracy |
| sequence_nr | `uint8` | | | |
| status | `uint8` | | | |
| carrier_freq | `uint16` | MHz | | Carrier frequency |
| range_accuracy | `float32` | m | | Range accuracy estimate |
## Enums
### ALT_TYPE {#ALT_TYPE}
| 명칭 | 형식 | Value | 설명 |
| ------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------- |
| <a id="#ALT_TYPE_WGS84"></a> ALT_TYPE_WGS84 | `uint8` | 0 | Altitude above WGS84 ellipsoid |
| <a id="#ALT_TYPE_MSL"></a> ALT_TYPE_MSL | `uint8` | 1 | Altitude above Mean Sea Level (AMSL) |
## Source Message
[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/RangingBeacon.msg)
:::details
Click here to see original file
```c
# Ranging beacon measurement data (e.g. LoRa, UWB)
uint64 timestamp # [us] time since system start
uint64 timestamp_sample # [us] the timestamp of the raw data
uint8 beacon_id
float32 range # [m] Range measurement
float64 lat # [deg] Latitude
float64 lon # [deg] Longitude
float32 alt # [m] Beacon altitude (frame defined in alt_type)
uint8 alt_type # [@enum ALT_TYPE] Altitude frame for alt field
uint8 ALT_TYPE_WGS84 = 0 # Altitude above WGS84 ellipsoid
uint8 ALT_TYPE_MSL = 1 # Altitude above Mean Sea Level (AMSL)
float32 hacc # [m] Groundbeacon horizontal accuracy
float32 vacc # [m] Groundbeacon vertical accuracy
uint8 sequence_nr
uint8 status
uint16 carrier_freq # [MHz] Carrier frequency
float32 range_accuracy # [m] Range accuracy estimate
# TOPICS ranging_beacon
```
:::
+34
View File
@@ -1458,6 +1458,20 @@ None
| 6 | | | ? |
| 7 | | | ? |
### VEHICLE_CMD_ESTIMATOR_SENSOR_ENABLE (43006)
Enable/disable estimator sensor fusion.
| Param | 단위 | Range/Enum | 설명 |
| ----- | -- | ---------- | --------------------------------------------------------------------- |
| 1 | | | Source (FUSION_SOURCE_\*) |
| 2 | | | Sensor instance (0-based) |
| 3 | | | Enable (1) or Disable (0) |
| 4 | | | Estimator Instance (NaN: not used) |
| 5 | | | 비어 있음 |
| 6 | | | 비어 있음 |
| 7 | | | 비어 있음 |
### VEHICLE_CMD_PX4_INTERNAL_START (65537)
Start of PX4 internal only vehicle commands (> UINT16_MAX).
@@ -1544,6 +1558,15 @@ Change mode by specifying nav_state directly.
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| <a id="#MESSAGE_VERSION"></a> MESSAGE_VERSION | `uint32` | 0 | |
| <a id="#PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION"></a> PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION | `uint16` | 3 | Param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration. |
| <a id="#FUSION_SOURCE_GPS"></a> FUSION_SOURCE_GPS | `uint8` | 0 | GNSS (EKF2_GPS{i}\_CTRL, use instance param) |
| <a id="#FUSION_SOURCE_OF"></a> FUSION_SOURCE_OF | `uint8` | 1 | Optical Flow (EKF2_OF_CTRL) |
| <a id="#FUSION_SOURCE_EV"></a> FUSION_SOURCE_EV | `uint8` | 2 | External Vision (EKF2_EV_CTRL) |
| <a id="#FUSION_SOURCE_AGP"></a> FUSION_SOURCE_AGP | `uint8` | 3 | Auxiliary Global Position (EKF2_AGP{i}\_CTRL, use instance param) |
| <a id="#FUSION_SOURCE_BARO"></a> FUSION_SOURCE_BARO | `uint8` | 4 | Barometer (EKF2_BARO_CTRL) |
| <a id="#FUSION_SOURCE_RNG"></a> FUSION_SOURCE_RNG | `uint8` | 5 | Range Finder (EKF2_RNG_CTRL) |
| <a id="#FUSION_SOURCE_MAG"></a> FUSION_SOURCE_MAG | `uint8` | 6 | Magnetometer (EKF2_MAG_TYPE) |
| <a id="#FUSION_SOURCE_ASPD"></a> FUSION_SOURCE_ASPD | `uint8` | 7 | Airspeed (EKF2_ARSP_THR) |
| <a id="#FUSION_SOURCE_RNGBCN"></a> FUSION_SOURCE_RNGBCN | `uint8` | 8 | Ranging Beacon |
| <a id="#VEHICLE_MOUNT_MODE_RETRACT"></a> VEHICLE_MOUNT_MODE_RETRACT | `uint8` | 0 | Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization. |
| <a id="#VEHICLE_MOUNT_MODE_NEUTRAL"></a> VEHICLE_MOUNT_MODE_NEUTRAL | `uint8` | 1 | Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. |
| <a id="#VEHICLE_MOUNT_MODE_MAVLINK_TARGETING"></a> VEHICLE_MOUNT_MODE_MAVLINK_TARGETING | `uint8` | 2 | Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization. |
@@ -1711,6 +1734,17 @@ uint16 VEHICLE_CMD_DO_WINCH = 42600 # Command to operate winch.
uint16 VEHICLE_CMD_EXTERNAL_POSITION_ESTIMATE = 43003 # External reset of estimator global position when dead reckoning.
uint16 VEHICLE_CMD_EXTERNAL_WIND_ESTIMATE = 43004
uint16 VEHICLE_CMD_ESTIMATOR_SENSOR_ENABLE = 43006 # Enable/disable estimator sensor fusion. |Source (FUSION_SOURCE_*)|Sensor instance (0-based)|Enable (1) or Disable (0)|Estimator Instance (NaN: not used)|Empty|Empty|Empty|
# Sensor fusion source types for VEHICLE_CMD_ESTIMATOR_SENSOR_ENABLE
uint8 FUSION_SOURCE_GPS = 0 # GNSS (EKF2_GPS{i}_CTRL, use instance param)
uint8 FUSION_SOURCE_OF = 1 # Optical Flow (EKF2_OF_CTRL)
uint8 FUSION_SOURCE_EV = 2 # External Vision (EKF2_EV_CTRL)
uint8 FUSION_SOURCE_AGP = 3 # Auxiliary Global Position (EKF2_AGP{i}_CTRL, use instance param)
uint8 FUSION_SOURCE_BARO = 4 # Barometer (EKF2_BARO_CTRL)
uint8 FUSION_SOURCE_RNG = 5 # Range Finder (EKF2_RNG_CTRL)
uint8 FUSION_SOURCE_MAG = 6 # Magnetometer (EKF2_MAG_TYPE)
uint8 FUSION_SOURCE_ASPD = 7 # Airspeed (EKF2_ARSP_THR)
uint8 FUSION_SOURCE_RNGBCN = 8 # Ranging Beacon
# PX4 vehicle commands (beyond 16 bit MAVLink commands).
uint32 VEHICLE_CMD_PX4_INTERNAL_START = 65537 # Start of PX4 internal only vehicle commands (> UINT16_MAX).
+2
View File
@@ -95,6 +95,7 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m
- [EstimatorBias](EstimatorBias.md)
- [EstimatorBias3d](EstimatorBias3d.md)
- [EstimatorEventFlags](EstimatorEventFlags.md)
- [EstimatorFusionControl](EstimatorFusionControl.md)
- [EstimatorGpsStatus](EstimatorGpsStatus.md)
- [EstimatorInnovations](EstimatorInnovations.md)
- [EstimatorSelectorStatus](EstimatorSelectorStatus.md)
@@ -192,6 +193,7 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m
- [QshellReq](QshellReq.md)
- [QshellRetval](QshellRetval.md)
- [RadioStatus](RadioStatus.md)
- [RangingBeacon](RangingBeacon.md) — Ranging beacon measurement data (e.g. LoRa, UWB).
- [RateCtrlStatus](RateCtrlStatus.md)
- [RcChannels](RcChannels.md)
- [RcParameterMap](RcParameterMap.md)
+1
View File
@@ -23,6 +23,7 @@ For fixed-wing flight it is the airspeed that guarantees lift — not ground spe
- [Holybro High Precision DroneCAN Airspeed Sensor - DLVR](https://holybro.com/collections/sensors/products/high-precision-dronecan-airspeed-sensor-dlvr)
- [RaccoonLab Cyphal/CAN and DroneCAN Airspeed Sensor - MS4525DO](https://raccoonlab.co/tproduct/360882105-652259850171-cyphal-and-dronecan-airspeed-v2)
- [Avionics Anonymous Air Data Computer with OAT probe](https://www.tindie.com/products/avionicsanonymous/uavcan-air-data-computer-airspeed-sensor/)
- [UAV-DEV GmbH DroneCAN Airspeed and Barometer Sensor - AUAV](https://wiki.uav-dev.com/en/product/airspeed/auav)
- Based on [Venturi effect](https://en.wikipedia.org/wiki/Venturi_effect)
- [TFSLOT](airspeed_tfslot.md) Venturi effect airspeed sensor.
File diff suppressed because one or more lines are too long
Binary file not shown.

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