mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-06-19 21:00:35 +08:00
Compare commits
58 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 885af949cb | |||
| 7297364484 | |||
| 9e796daee8 | |||
| 17242bc1a4 | |||
| 8a9be9a8f0 | |||
| b346fcfa00 | |||
| 1d852907a2 | |||
| dd177ac8cf | |||
| 68b533f79f | |||
| 7daac63809 | |||
| 2ef5b0a20f | |||
| 2e2067173a | |||
| 93f06f6a23 | |||
| ca0dec5a33 | |||
| 790c2d3369 | |||
| 8478503349 | |||
| 6a18fd045f | |||
| 06942bbfcc | |||
| 89c4980e55 | |||
| e756574420 | |||
| df00901bfa | |||
| 918efc8f97 | |||
| 8602849847 | |||
| d564c5b4c2 | |||
| 245ae58264 | |||
| 996060f581 | |||
| a120773793 | |||
| 6cf8d80bdd | |||
| b4601278db | |||
| 0d66981dcc | |||
| 62f5f5267e | |||
| fd7edaa4fe | |||
| b343eb6a11 | |||
| b8877c4cfc | |||
| 64e996b475 | |||
| 1d45f699be | |||
| be126454c0 | |||
| ce3e62841f | |||
| 657854ae1b | |||
| 5613313107 | |||
| eafb6c396b | |||
| 2ebfd40bba | |||
| 368dd362c5 | |||
| 7332f264f0 | |||
| 06d6c31614 | |||
| d9448f3e99 | |||
| 50a42680d7 | |||
| 70a84a0c1b | |||
| 05de941399 | |||
| adc9a6d35d | |||
| fe91ace0bb | |||
| 977777f40a | |||
| 4afdf38378 | |||
| d0004403a3 | |||
| 2e651117e8 | |||
| 18c176beef | |||
| 602add3ec1 | |||
| 47d5971f42 |
@@ -0,0 +1,21 @@
|
||||
name: Build Gazebo Classic SITL
|
||||
description: Build PX4 firmware and Gazebo Classic plugins with ccache stats
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Build - PX4 Firmware (SITL)
|
||||
shell: bash
|
||||
run: make px4_sitl_default
|
||||
|
||||
- name: Cache - Stats after PX4 Firmware
|
||||
shell: bash
|
||||
run: ccache -s
|
||||
|
||||
- name: Build - Gazebo Classic Plugins
|
||||
shell: bash
|
||||
run: make px4_sitl_default sitl_gazebo-classic
|
||||
|
||||
- name: Cache - Stats after Gazebo Plugins
|
||||
shell: bash
|
||||
run: ccache -s
|
||||
@@ -0,0 +1,22 @@
|
||||
name: Save ccache
|
||||
description: Print ccache stats and save to cache
|
||||
|
||||
inputs:
|
||||
cache-primary-key:
|
||||
description: Primary cache key from setup-ccache output
|
||||
required: true
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Cache - Stats
|
||||
if: always()
|
||||
shell: bash
|
||||
run: ccache -s
|
||||
|
||||
- name: Cache - Save ccache
|
||||
if: always()
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ${{ inputs.cache-primary-key }}
|
||||
@@ -0,0 +1,56 @@
|
||||
name: Setup ccache
|
||||
description: Restore ccache from cache and configure ccache.conf
|
||||
|
||||
inputs:
|
||||
cache-key-prefix:
|
||||
description: Cache key prefix (e.g. ccache-sitl)
|
||||
required: true
|
||||
max-size:
|
||||
description: Max ccache size (e.g. 300M)
|
||||
required: false
|
||||
default: '300M'
|
||||
base-dir:
|
||||
description: ccache base_dir value
|
||||
required: false
|
||||
default: '${GITHUB_WORKSPACE}'
|
||||
install-ccache:
|
||||
description: Install ccache via apt before configuring
|
||||
required: false
|
||||
default: 'false'
|
||||
|
||||
outputs:
|
||||
cache-primary-key:
|
||||
description: Primary cache key (pass to save-ccache)
|
||||
value: ${{ steps.restore.outputs.cache-primary-key }}
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Cache - Install ccache
|
||||
if: inputs.install-ccache == 'true'
|
||||
shell: bash
|
||||
run: apt-get update && apt-get install -y ccache
|
||||
|
||||
- name: Cache - Restore ccache
|
||||
id: restore
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ${{ inputs.cache-key-prefix }}-${{ github.ref_name }}-${{ github.sha }}
|
||||
restore-keys: |
|
||||
${{ inputs.cache-key-prefix }}-${{ github.ref_name }}-
|
||||
${{ inputs.cache-key-prefix }}-${{ github.base_ref || 'main' }}-
|
||||
${{ inputs.cache-key-prefix }}-
|
||||
|
||||
- name: Cache - Configure ccache
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p ~/.ccache
|
||||
echo "base_dir = ${{ inputs.base-dir }}" > ~/.ccache/ccache.conf
|
||||
echo "compression = true" >> ~/.ccache/ccache.conf
|
||||
echo "compression_level = 6" >> ~/.ccache/ccache.conf
|
||||
echo "max_size = ${{ inputs.max-size }}" >> ~/.ccache/ccache.conf
|
||||
echo "hash_dir = false" >> ~/.ccache/ccache.conf
|
||||
echo "compiler_check = content" >> ~/.ccache/ccache.conf
|
||||
ccache -s
|
||||
ccache -z
|
||||
@@ -0,0 +1,67 @@
|
||||
# PX4 CI Configuration for Forks
|
||||
# Copy to .github/ci-config.yml and customize.
|
||||
# All settings are optional — omit any key to use the upstream default.
|
||||
#
|
||||
# This example is tuned for GitHub-hosted runners.
|
||||
# The upstream PX4 repo uses RunsOn/AWS for all jobs.
|
||||
|
||||
# Infrastructure hint — set to true when running on GitHub-hosted runners.
|
||||
# The upstream PX4 repo uses RunsOn/AWS (is_gha: false by default).
|
||||
# Jobs may use this flag to skip steps that require RunsOn-specific
|
||||
# infrastructure (e.g. S3 cache access, spot instance features).
|
||||
# No job behavior is gated on this today — it is wired for future use.
|
||||
is_gha: true
|
||||
|
||||
# Runner labels — one label per size tier.
|
||||
# For GitHub-hosted runners, all tiers can point to ubuntu-latest.
|
||||
# For self-hosted runners, map each tier to the appropriate pool.
|
||||
runners:
|
||||
small: '["ubuntu-latest"]'
|
||||
medium: '["ubuntu-latest"]'
|
||||
large: '["ubuntu-latest"]'
|
||||
utility: '["ubuntu-latest"]'
|
||||
|
||||
# Job toggles — enable only what your fork needs.
|
||||
# Jobs marked false below are upstream-specific (hardware boards,
|
||||
# platform-specific builds) and rarely useful for feature forks.
|
||||
jobs:
|
||||
# T1 — gate checks (disable only if you have a very good reason)
|
||||
gate_checks: true # format, newlines, module config validation
|
||||
shellcheck: true # shell script linting
|
||||
mavsdk_checks: true # mypy + flake8 on MAVSDK Python scripts
|
||||
|
||||
# T2 — core checks (recommended for all forks)
|
||||
sitl_build: true
|
||||
clang_tidy: true
|
||||
|
||||
# T2 — upstream-specific, disable for most forks
|
||||
gazebo_classic_build: false # only needed if running sitl_tests/mavros_tests
|
||||
ubuntu_builds: false # verifies clean builds on bare Ubuntu images
|
||||
macos_build: false # macOS platform verification
|
||||
itcm_check: false # NuttX board ITCM placement, board-specific
|
||||
flash_analysis: false # binary size diffing against PR base, repo-specific
|
||||
failsafe_sim: false # Emscripten web simulation build
|
||||
|
||||
# T3 — integration tests (expensive, disable unless you need them)
|
||||
sitl_tests: false # requires gazebo_classic_build
|
||||
ros_integration: false # requires Galactic ROS container
|
||||
mavros_tests: false # requires gazebo_classic_build
|
||||
ros_translation_node: true # lightweight, runs on standard ROS images
|
||||
|
||||
# Cache sizes — adjust if you hit your cache storage limit.
|
||||
# GitHub-hosted runners share a 10 GB per-repo native cache.
|
||||
# With the job set above (~60% of jobs disabled), total warm footprint
|
||||
# is roughly 15-20% of the 10 GB limit per concurrent PR.
|
||||
# If you re-enable more jobs, total footprint scales up proportionally.
|
||||
# Raise your repo's cache limit if needed:
|
||||
# Settings → Actions → Caches (up to 10 TB configurable)
|
||||
cache:
|
||||
sitl: 300M # ~94% fill at current default — do not lower
|
||||
sitl_gazebo_classic: 350M # only relevant if gazebo_classic_build: true
|
||||
clang_tidy: 150M # ~40% fill, sized with headroom
|
||||
ubuntu_builds: 200M # only relevant if ubuntu_builds: true
|
||||
macos: 200M # only relevant if macos_build: true
|
||||
itcm: 200M # only relevant if itcm_check: true, growing
|
||||
flash: 200M # only relevant if flash_analysis: true
|
||||
ros_integration: 400M # ~70% fill, trending up
|
||||
ros_translation: 150M # ~35% fill, sized with headroom
|
||||
@@ -21,8 +21,10 @@ applyTo: "docs/en/**"
|
||||
- Do not apply bold or italic styling inside a heading.
|
||||
- **Formatting:**
|
||||
- **Bold:** Only for UI elements (buttons, menu items).
|
||||
- **Italics (Emphasis):** For tool names (e.g., *QGroundControl*).
|
||||
- **Inline Code:** Use backticks for file paths, parameters, and CLI commands (e.g., `prettier`).
|
||||
Backticks are optional for hyperlinked CLI commands and tool names.
|
||||
- **Italics (Emphasis):** Use for application names (e.g., *QGroundControl*).
|
||||
Emphasis is optional for hyperlinked applications.
|
||||
- **Structure:** End every line at the end of a sentence (Semantic Line Breaks).
|
||||
|
||||
## Linking & Navigation
|
||||
|
||||
@@ -37,21 +37,19 @@
|
||||
name: Build all targets
|
||||
|
||||
on:
|
||||
# Triggered by CI orchestrator for all branches/PRs (after all tiers pass)
|
||||
workflow_run:
|
||||
workflows: ["CI Pipeline (Orchestrator)"]
|
||||
types: [completed]
|
||||
branches: ['**']
|
||||
# Direct trigger for tagged releases (orchestrator doesn't run on tags)
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
branches:
|
||||
- 'main'
|
||||
- 'stable'
|
||||
- 'beta'
|
||||
- 'release/**'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
# Manual trigger for debugging
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
@@ -65,14 +63,27 @@ permissions:
|
||||
jobs:
|
||||
group_targets:
|
||||
name: Scan for Board Targets
|
||||
# Only run if:
|
||||
# 1. Direct push to tag (independent trigger for releases), OR
|
||||
# 2. Orchestrator workflow_run completed successfully (for all branches/PRs), OR
|
||||
# 3. Manual workflow_dispatch
|
||||
if: |
|
||||
github.event_name == 'push' ||
|
||||
github.event_name == 'workflow_dispatch' ||
|
||||
(github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success')
|
||||
# runs-on: ubuntu-latest
|
||||
runs-on: [runs-on,runner=1cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false]
|
||||
permissions:
|
||||
contents: read
|
||||
actions: read
|
||||
outputs:
|
||||
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||
timestamp: ${{ steps.set-timestamp.outputs.timestamp }}
|
||||
branchname: ${{ steps.set-branch.outputs.branchname }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.head_sha || github.sha }}
|
||||
|
||||
- name: Cache Python pip
|
||||
uses: actions/cache@v4
|
||||
@@ -102,12 +113,13 @@ jobs:
|
||||
- id: set-branch
|
||||
name: Save Current Branch Name
|
||||
run: |
|
||||
echo "branchname=${{
|
||||
github.event_name == 'pull_request' &&
|
||||
format('pr-{0}', github.event.pull_request.number) ||
|
||||
github.head_ref ||
|
||||
github.ref_name
|
||||
}}" >> $GITHUB_OUTPUT
|
||||
if [ "${{ github.event_name }}" = "workflow_run" ]; then
|
||||
# For workflow_run events, get branch from the triggering workflow
|
||||
echo "branchname=${{ github.event.workflow_run.head_branch }}" >> $GITHUB_OUTPUT
|
||||
else
|
||||
# For push/workflow_dispatch events
|
||||
echo "branchname=${{ github.head_ref || github.ref_name }}" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Debug Matrix Output
|
||||
if: runner.debug == '1'
|
||||
@@ -121,6 +133,9 @@ jobs:
|
||||
# runs-on: ubuntu-latest
|
||||
runs-on: [runs-on,"runner=8cpu-linux-${{ matrix.runner }}","image=ubuntu24-full-${{ matrix.runner }}","run-id=${{ github.run_id }}",spot=false]
|
||||
needs: group_targets
|
||||
permissions:
|
||||
contents: read
|
||||
packages: read
|
||||
strategy:
|
||||
matrix: ${{ fromJson(needs.group_targets.outputs.matrix) }}
|
||||
fail-fast: false
|
||||
@@ -133,6 +148,7 @@ jobs:
|
||||
- uses: runs-on/action@v2
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.head_sha || github.sha }}
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Git ownership workaround
|
||||
@@ -207,6 +223,8 @@ jobs:
|
||||
runs-on: [runs-on,runner=1cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false]
|
||||
needs: [setup, group_targets]
|
||||
if: startsWith(github.ref, 'refs/tags/v') || contains(fromJSON('["main","stable","beta"]'), needs.group_targets.outputs.branchname)
|
||||
permissions:
|
||||
contents: write
|
||||
outputs:
|
||||
uploadlocation: ${{ steps.upload-location.outputs.uploadlocation }}
|
||||
steps:
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
name: Checks
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
container:
|
||||
image: px4io/px4-dev:v1.16.0-rc1-258-g0369abd556
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
check: [
|
||||
"check_format",
|
||||
"check_newlines",
|
||||
"tests",
|
||||
"tests_coverage",
|
||||
"px4_fmu-v2_default stack_check",
|
||||
"validate_module_configs",
|
||||
"shellcheck_all",
|
||||
"NO_NINJA_BUILD=1 px4_fmu-v5_default",
|
||||
"NO_NINJA_BUILD=1 px4_sitl_default",
|
||||
"px4_sitl_allyes",
|
||||
"module_documentation",
|
||||
]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Building [${{ matrix.check }}]
|
||||
run: |
|
||||
cd "$GITHUB_WORKSPACE"
|
||||
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
||||
make ${{ matrix.check }}
|
||||
|
||||
- name: Uploading Coverage to Codecov.io
|
||||
if: contains(matrix.check, 'coverage')
|
||||
uses: codecov/codecov-action@v1
|
||||
with:
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
flags: unittests
|
||||
file: coverage/lcov.info
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,41 @@
|
||||
name: Simple CI (Fork-Friendly)
|
||||
|
||||
# Forks: This is a lightweight CI workflow for forks that don't need
|
||||
# the full orchestrator pipeline. It builds PX4 SITL + one hardware
|
||||
# target and runs unit tests + format checks.
|
||||
#
|
||||
# To use: rename this file from ci-simple.yml.example to ci-simple.yml
|
||||
# and enable GitHub Actions in your fork settings.
|
||||
# To customize: adjust the 'make' target or container image tag below.
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ['**']
|
||||
pull_request:
|
||||
branches: ['**']
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
quick-check:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: ghcr.io/px4/px4-dev:v1.17.0-beta1
|
||||
steps:
|
||||
- name: Configure git
|
||||
run: git config --system --add safe.directory '*'
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Quick Check (SITL + FMUv5 + tests + format)
|
||||
run: make quick_check
|
||||
env:
|
||||
RUNS_IN_DOCKER: true
|
||||
@@ -1,69 +0,0 @@
|
||||
name: Static Analysis
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
clang_tidy:
|
||||
name: Clang-Tidy
|
||||
runs-on: [runs-on, runner=16cpu-linux-x64, "run-id=${{ github.run_id }}", "extras=s3-cache"]
|
||||
container:
|
||||
image: px4io/px4-dev:v1.17.0-beta1
|
||||
steps:
|
||||
- uses: runs-on/action@v2
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
fetch-tags: true
|
||||
|
||||
- name: Configure Git Safe Directory
|
||||
run: git config --system --add safe.directory '*'
|
||||
|
||||
- name: Restore Compiler Cache
|
||||
id: cc_restore
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ccache-clang-tidy-${{ github.head_ref || github.ref_name }}
|
||||
restore-keys: |
|
||||
ccache-clang-tidy-${{ github.head_ref || github.ref_name }}-
|
||||
ccache-clang-tidy-main-
|
||||
ccache-clang-tidy-
|
||||
|
||||
- name: Configure Compiler Cache
|
||||
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 = 120M" >> ~/.ccache/ccache.conf
|
||||
echo "hash_dir = false" >> ~/.ccache/ccache.conf
|
||||
echo "compiler_check = content" >> ~/.ccache/ccache.conf
|
||||
ccache -s
|
||||
ccache -z
|
||||
|
||||
- name: Run Clang-Tidy Analysis
|
||||
run: make -j16 clang-tidy
|
||||
|
||||
- name: Compiler Cache Stats
|
||||
if: always()
|
||||
run: ccache -s
|
||||
|
||||
- name: Save Compiler Cache
|
||||
if: always()
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ${{ steps.cc_restore.outputs.cache-primary-key }}
|
||||
@@ -1,67 +0,0 @@
|
||||
name: MacOS build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: macos-latest
|
||||
strategy:
|
||||
matrix:
|
||||
config: [
|
||||
px4_fmu-v5_default,
|
||||
px4_sitl
|
||||
]
|
||||
steps:
|
||||
- name: install Python 3.10
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.10"
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: setup
|
||||
run: |
|
||||
./Tools/setup/macos.sh
|
||||
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_timestamp
|
||||
shell: cmake -P {0}
|
||||
run: |
|
||||
string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC)
|
||||
file(APPEND "$ENV{GITHUB_OUTPUT}" "timestamp=${current_date}\n")
|
||||
- name: ccache cache files
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: macos_${{matrix.config}}-ccache-${{steps.ccache_cache_timestamp.outputs.timestamp}}
|
||||
restore-keys: macos_${{matrix.config}}-ccache-
|
||||
- name: setup ccache
|
||||
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 = 40M" >> ~/.ccache/ccache.conf
|
||||
echo "hash_dir = false" >> ~/.ccache/ccache.conf
|
||||
ccache -s
|
||||
ccache -z
|
||||
|
||||
- name: make ${{matrix.config}}
|
||||
run: |
|
||||
ccache -z
|
||||
make ${{matrix.config}}
|
||||
ccache -s
|
||||
@@ -1,57 +0,0 @@
|
||||
name: Ubuntu environment build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
- 'stable'
|
||||
- 'beta'
|
||||
- 'release/**'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
env:
|
||||
RUNS_IN_DOCKER: true
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build_and_test:
|
||||
name: Build and Test
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
version: ['ubuntu:22.04', 'ubuntu:24.04']
|
||||
runs-on: [runs-on,runner=4cpu-linux-x64,"image=ubuntu24-full-x64","run-id=${{ github.run_id }}",spot=false]
|
||||
container:
|
||||
image: ${{ matrix.version }}
|
||||
volumes:
|
||||
- /github/workspace:/github/workspace
|
||||
steps:
|
||||
|
||||
- name: Fix git in container
|
||||
run: |
|
||||
# we only need this because we are running the job in a container
|
||||
# when checkout pulls git it does it in a shared volume
|
||||
# and file ownership changes between steps
|
||||
# first we install git since its missing from the base image
|
||||
# then we mark the directory as safe for other instances
|
||||
# of git to use.
|
||||
apt update && apt install git -y
|
||||
git config --global --add safe.directory $(realpath .)
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install Deps, Build, and Make Quick Check
|
||||
run: |
|
||||
# we need to install dependencies and build on the same step
|
||||
# given the stateless nature of docker images
|
||||
./Tools/setup/ubuntu.sh
|
||||
make quick_check
|
||||
@@ -1,35 +0,0 @@
|
||||
name: EKF Change Indicator
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
# If two events are triggered within a short time in the same PR, cancel the run of the oldest event
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
unit_tests:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
container:
|
||||
image: px4io/px4-dev:v1.16.0-rc1-258-g0369abd556
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: main test
|
||||
run: |
|
||||
cd "$GITHUB_WORKSPACE"
|
||||
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
||||
make tests TESTFILTER=EKF
|
||||
|
||||
- name: Check if there is a functional change
|
||||
run: git diff --exit-code
|
||||
working-directory: src/modules/ekf2/test/change_indication
|
||||
@@ -1,54 +0,0 @@
|
||||
name: EKF Update Change Indicator
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
jobs:
|
||||
unit_tests:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
container:
|
||||
image: px4io/px4-dev:v1.16.0-rc1-258-g0369abd556
|
||||
|
||||
env:
|
||||
GIT_COMMITTER_EMAIL: bot@px4.io
|
||||
GIT_COMMITTER_NAME: PX4BuildBot
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: main test
|
||||
run: |
|
||||
cd "$GITHUB_WORKSPACE"
|
||||
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
||||
make tests TESTFILTER=EKF
|
||||
|
||||
- name: Check if there exists diff and save result in variable
|
||||
id: diff-check
|
||||
working-directory: src/modules/ekf2/test/change_indication
|
||||
run: |
|
||||
if git diff --quiet; then
|
||||
echo "CHANGE_INDICATED=false" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "CHANGE_INDICATED=true" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: auto-commit any changes to change indication
|
||||
if: steps.diff-check.outputs.CHANGE_INDICATED == 'true'
|
||||
uses: stefanzweifel/git-auto-commit-action@v4
|
||||
with:
|
||||
file_pattern: 'src/modules/ekf2/test/change_indication/*.csv'
|
||||
commit_user_name: ${{ env.GIT_COMMITTER_NAME }}
|
||||
commit_user_email: ${{ env.GIT_COMMITTER_EMAIL }}
|
||||
commit_message: |
|
||||
[AUTO COMMIT] update change indication
|
||||
|
||||
See .github/workflows/ekf_update_change_indicator.yml for more details
|
||||
|
||||
- name: if there is a functional change, fail check
|
||||
if: steps.diff-check.outputs.CHANGE_INDICATED == 'true'
|
||||
run: exit 1
|
||||
@@ -1,58 +0,0 @@
|
||||
name: Failsafe Simulator Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
check: [
|
||||
"failsafe_web",
|
||||
]
|
||||
container:
|
||||
image: px4io/px4-dev:v1.16.0-rc1-258-g0369abd556
|
||||
options: --privileged --ulimit core=-1 --security-opt seccomp=unconfined
|
||||
steps:
|
||||
- name: Install Node v20.18.0
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20.18.0
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Git ownership workaround
|
||||
run: git config --system --add safe.directory '*'
|
||||
|
||||
- name: Install empscripten
|
||||
run: |
|
||||
git clone https://github.com/emscripten-core/emsdk.git _emscripten_sdk
|
||||
cd _emscripten_sdk
|
||||
git checkout 4.0.15
|
||||
./emsdk install latest
|
||||
./emsdk activate latest
|
||||
|
||||
- name: Testing [${{ matrix.check }}]
|
||||
run: |
|
||||
. ./_emscripten_sdk/emsdk_env.sh
|
||||
make ${{ matrix.check }}
|
||||
@@ -1,154 +0,0 @@
|
||||
name: FLASH usage analysis
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
issues: write
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
env:
|
||||
MIN_FLASH_POS_DIFF_FOR_COMMENT: 50
|
||||
MIN_FLASH_NEG_DIFF_FOR_COMMENT: -50
|
||||
|
||||
jobs:
|
||||
analyze_flash:
|
||||
name: Analyzing ${{ matrix.target }}
|
||||
runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false]
|
||||
container:
|
||||
image: px4io/px4-dev:v1.16.0-rc1-258-g0369abd556
|
||||
strategy:
|
||||
matrix:
|
||||
target: [px4_fmu-v5x, px4_fmu-v6x]
|
||||
outputs:
|
||||
px4_fmu-v5x-bloaty-output: ${{ steps.gen-output.outputs.px4_fmu-v5x-bloaty-output }}
|
||||
px4_fmu-v5x-bloaty-summary-map: ${{ steps.gen-output.outputs.px4_fmu-v5x-bloaty-summary-map }}
|
||||
px4_fmu-v6x-bloaty-output: ${{ steps.gen-output.outputs.px4_fmu-v6x-bloaty-output }}
|
||||
px4_fmu-v6x-bloaty-summary-map: ${{ steps.gen-output.outputs.px4_fmu-v6x-bloaty-summary-map }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Git ownership workaround
|
||||
run: git config --system --add safe.directory '*'
|
||||
|
||||
- name: Build Target
|
||||
run: make ${{ matrix.target }}_flash-analysis
|
||||
|
||||
- name: Store the ELF with the change
|
||||
run: cp ./build/**/*.elf ./with-change.elf
|
||||
|
||||
- name: Clean previous build
|
||||
run: |
|
||||
make clean
|
||||
make distclean
|
||||
make submodulesclean
|
||||
|
||||
- name: If it's a PR checkout the base branch
|
||||
if: ${{ github.event.pull_request }}
|
||||
# As checkout creates a merge commit (merging the base branch into the PR branch), the base branch is the base for a diff of the PR changes.
|
||||
run: git checkout ${{ github.event.pull_request.base.ref }}
|
||||
|
||||
- name: If it's a push checkout the previous commit
|
||||
if: github.event_name == 'push'
|
||||
run: git checkout ${{ github.event.before }}
|
||||
|
||||
- name: Update submodules
|
||||
run: make submodulesupdate
|
||||
|
||||
- name: Build
|
||||
run: make ${{ matrix.target }}_flash-analysis
|
||||
|
||||
- name: Store the ELF before the change
|
||||
run: cp ./build/**/*.elf ./before-change.elf
|
||||
|
||||
- name: bloaty-action
|
||||
uses: PX4/bloaty-action@v1.0.0
|
||||
id: bloaty-step
|
||||
with:
|
||||
bloaty-file-args: ./with-change.elf -- ./before-change.elf
|
||||
bloaty-additional-args: -d sections,symbols -s vm -n 20
|
||||
output-to-summary: true
|
||||
|
||||
- name: Generate output
|
||||
id: gen-output
|
||||
run: |
|
||||
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64)
|
||||
echo "${{ matrix.target }}-bloaty-output<<$EOF" >> $GITHUB_OUTPUT
|
||||
echo "${{ steps.bloaty-step.outputs.bloaty-output-encoded }}" >> $GITHUB_OUTPUT
|
||||
echo "$EOF" >> $GITHUB_OUTPUT
|
||||
echo "${{ matrix.target }}-bloaty-summary-map<<$EOF" >> $GITHUB_OUTPUT
|
||||
echo '${{ steps.bloaty-step.outputs.bloaty-summary-map }}' >> $GITHUB_OUTPUT
|
||||
echo "$EOF" >> $GITHUB_OUTPUT
|
||||
|
||||
# TODO:
|
||||
# This part of the workflow is causing errors for forks. We should find a way to fix this and enable it again for forks.
|
||||
# Track this issue https://github.com/PX4/PX4-Autopilot/issues/24408
|
||||
post_pr_comment:
|
||||
name: Publish Results
|
||||
runs-on: [runs-on,runner=1cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}"]
|
||||
needs: [analyze_flash]
|
||||
env:
|
||||
V5X-SUMMARY-MAP-ABS: ${{ fromJSON(fromJSON(needs.analyze_flash.outputs.px4_fmu-v5x-bloaty-summary-map).vm-absolute) }}
|
||||
V5X-SUMMARY-MAP-PERC: ${{ fromJSON(fromJSON(needs.analyze_flash.outputs.px4_fmu-v5x-bloaty-summary-map).vm-percentage) }}
|
||||
V6X-SUMMARY-MAP-ABS: ${{ fromJSON(fromJSON(needs.analyze_flash.outputs.px4_fmu-v6x-bloaty-summary-map).vm-absolute) }}
|
||||
V6X-SUMMARY-MAP-PERC: ${{ fromJSON(fromJSON(needs.analyze_flash.outputs.px4_fmu-v6x-bloaty-summary-map).vm-percentage) }}
|
||||
if: github.event.pull_request && github.event.pull_request.head.repo.full_name == github.repository
|
||||
steps:
|
||||
- name: Find Comment
|
||||
uses: peter-evans/find-comment@v3
|
||||
id: fc
|
||||
with:
|
||||
issue-number: ${{ github.event.pull_request.number }}
|
||||
comment-author: 'github-actions[bot]'
|
||||
body-includes: FLASH Analysis
|
||||
|
||||
- name: Set Build Time
|
||||
id: bt
|
||||
run: |
|
||||
echo "timestamp=$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Create or update comment
|
||||
# This can't be moved to the job-level conditions, as GH actions don't allow a job-level if condition to access the env.
|
||||
if: |
|
||||
steps.fc.outputs.comment-id != '' ||
|
||||
env.V5X-SUMMARY-MAP-ABS >= fromJSON(env.MIN_FLASH_POS_DIFF_FOR_COMMENT) ||
|
||||
env.V5X-SUMMARY-MAP-ABS <= fromJSON(env.MIN_FLASH_NEG_DIFF_FOR_COMMENT) ||
|
||||
env.V6X-SUMMARY-MAP-ABS >= fromJSON(env.MIN_FLASH_POS_DIFF_FOR_COMMENT) ||
|
||||
env.V6X-SUMMARY-MAP-ABS <= fromJSON(env.MIN_FLASH_NEG_DIFF_FOR_COMMENT)
|
||||
uses: peter-evans/create-or-update-comment@v4
|
||||
with:
|
||||
comment-id: ${{ steps.fc.outputs.comment-id }}
|
||||
issue-number: ${{ github.event.pull_request.number }}
|
||||
body: |
|
||||
## 🔎 FLASH Analysis
|
||||
<details>
|
||||
<summary>px4_fmu-v5x [Total VM Diff: ${{ env.V5X-SUMMARY-MAP-ABS }} byte (${{ env.V5X-SUMMARY-MAP-PERC}} %)]</summary>
|
||||
|
||||
```
|
||||
${{ needs.analyze_flash.outputs.px4_fmu-v5x-bloaty-output }}
|
||||
```
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>px4_fmu-v6x [Total VM Diff: ${{ env.V6X-SUMMARY-MAP-ABS }} byte (${{ env.V6X-SUMMARY-MAP-PERC }} %)]</summary>
|
||||
|
||||
```
|
||||
${{ needs.analyze_flash.outputs.px4_fmu-v6x-bloaty-output }}
|
||||
```
|
||||
</details>
|
||||
|
||||
**Updated: _${{ steps.bt.outputs.timestamp }}_**
|
||||
edit-mode: replace
|
||||
@@ -1,67 +0,0 @@
|
||||
name: ITCM check
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
check_itcm:
|
||||
name: Checking ${{ matrix.target }}
|
||||
runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false]
|
||||
container:
|
||||
image: px4io/px4-dev:v1.16.0-rc1-258-g0369abd556
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- target: px4_fmu-v5x
|
||||
scripts: >
|
||||
boards/px4/fmu-v5x/nuttx-config/scripts/itcm_gen_functions.ld
|
||||
boards/px4/fmu-v5x/nuttx-config/scripts/itcm_static_functions.ld
|
||||
- target: px4_fmu-v6xrt
|
||||
scripts: >
|
||||
boards/px4/fmu-v6xrt/nuttx-config/scripts/itcm_functions_includes.ld
|
||||
boards/px4/fmu-v6xrt/nuttx-config/scripts/itcm_static_functions.ld
|
||||
- target: nxp_tropic-community
|
||||
scripts: >
|
||||
boards/nxp/tropic-community/nuttx-config/scripts/itcm_functions_includes.ld
|
||||
boards/nxp/tropic-community/nuttx-config/scripts/itcm_static_functions.ld
|
||||
- target: nxp_mr-tropic
|
||||
scripts: >
|
||||
boards/nxp/mr-tropic/nuttx-config/scripts/itcm_functions_includes.ld
|
||||
boards/nxp/mr-tropic/nuttx-config/scripts/itcm_static_functions.ld
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Git ownership workaround
|
||||
run: git config --system --add safe.directory '*'
|
||||
|
||||
- name: Build Target
|
||||
run: make ${{ matrix.target }}
|
||||
|
||||
- name: Copy built ELF
|
||||
run: cp ./build/**/*.elf ./built.elf
|
||||
|
||||
- name: Install itcm-check dependencies
|
||||
run: pip3 install -r Tools/setup/optional-requirements.txt --break-system-packages
|
||||
|
||||
- name: Execute the itcm-check
|
||||
run: python3 Tools/itcm_check.py --elf-file built.elf --script-files ${{ matrix.scripts }}
|
||||
@@ -1,45 +0,0 @@
|
||||
name: MAVROS Mission Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Build SITL and Run Tests (inside old ROS container)
|
||||
run: |
|
||||
docker run --rm \
|
||||
-v "${GITHUB_WORKSPACE}:/workspace" \
|
||||
-w /workspace \
|
||||
px4io/px4-dev-ros-melodic:2021-09-08 \
|
||||
bash -c '
|
||||
git config --global --add safe.directory /workspace
|
||||
make px4_sitl_default
|
||||
make px4_sitl_default sitl_gazebo-classic
|
||||
./test/rostest_px4_run.sh \
|
||||
mavros_posix_test_mission.test \
|
||||
mission:=MC_mission_box \
|
||||
vehicle:=iris
|
||||
'
|
||||
@@ -1,44 +0,0 @@
|
||||
name: MAVROS Offboard Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Build SITL and Run Tests (inside old ROS container)
|
||||
run: |
|
||||
docker run --rm \
|
||||
-v "${GITHUB_WORKSPACE}:/workspace" \
|
||||
-w /workspace \
|
||||
px4io/px4-dev-ros-melodic:2021-09-08 \
|
||||
bash -c '
|
||||
git config --global --add safe.directory /workspace
|
||||
make px4_sitl_default
|
||||
make px4_sitl_default sitl_gazebo-classic
|
||||
./test/rostest_px4_run.sh \
|
||||
mavros_posix_tests_offboard_posctl.test \
|
||||
vehicle:=iris
|
||||
'
|
||||
@@ -1,46 +0,0 @@
|
||||
name: Nuttx Target with extra env config
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
container:
|
||||
image: px4io/px4-dev:v1.16.0-rc1-258-g0369abd556
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
config:
|
||||
- px4_fmu-v5_default
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Build PX4 and Run Test [${{ matrix.config }}]
|
||||
run: |
|
||||
cd "$GITHUB_WORKSPACE"
|
||||
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
||||
export PX4_EXTRA_NUTTX_CONFIG='CONFIG_NSH_LOGIN_PASSWORD="test";CONFIG_NSH_CONSOLE_LOGIN=y'
|
||||
echo "PX4_EXTRA_NUTTX_CONFIG: $PX4_EXTRA_NUTTX_CONFIG"
|
||||
|
||||
make ${{ matrix.config }} nuttx_context
|
||||
|
||||
echo "Check that the config option is set"
|
||||
grep CONFIG_NSH_LOGIN_PASSWORD build/${{ matrix.config }}/NuttX/nuttx/.config
|
||||
@@ -1,33 +0,0 @@
|
||||
name: Python CI Checks
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Install Python3
|
||||
run: sudo apt-get install python3 python3-setuptools python3-pip -y
|
||||
|
||||
- name: Install tools
|
||||
run: python3 -m pip install mypy types-requests flake8 --break-system-packages
|
||||
|
||||
- name: Check MAVSDK test scripts with mypy
|
||||
run: $HOME/.local/bin/mypy --strict test/mavsdk_tests/*.py
|
||||
|
||||
- name: Check MAVSDK test scripts with flake8
|
||||
run: $HOME/.local/bin/flake8 test/mavsdk_tests/*.py
|
||||
@@ -1,134 +0,0 @@
|
||||
# NOTE: this workflow is now running on Dronecode / PX4 AWS account.
|
||||
# - If you want to keep the tests running in GitHub Actions you need to uncomment the "runs-on: ubuntu-latest" lines
|
||||
# and comment the "runs-on: [runs-on,runner=..." lines.
|
||||
# - If you would like to duplicate this setup try setting up "RunsOn" on your own AWS account try https://runs-on.com
|
||||
|
||||
name: ROS Integration Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu22-full-x64,"run-id=${{ github.run_id }}",spot=false]
|
||||
container:
|
||||
image: px4io/px4-dev-ros2-galactic:2021-09-08
|
||||
options: --privileged --ulimit core=-1 --security-opt seccomp=unconfined
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Git Ownership Workaround
|
||||
run: git config --system --add safe.directory '*'
|
||||
|
||||
- name: Update ROS Keys
|
||||
run: |
|
||||
sudo rm /etc/apt/sources.list.d/ros2.list && \
|
||||
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg && \
|
||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
|
||||
|
||||
- name: Install gazebo
|
||||
run: |
|
||||
apt update && apt install -y gazebo11 libgazebo11-dev gstreamer1.0-plugins-bad gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly libgstreamer-plugins-base1.0-dev
|
||||
|
||||
- name: Prepare ccache timestamp
|
||||
id: ccache_cache_timestamp
|
||||
shell: cmake -P {0}
|
||||
run: |
|
||||
string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC)
|
||||
message("::set-output name=timestamp::${current_date}")
|
||||
- name: ccache cache files
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ros_integration_tests-${{matrix.config.build_type}}-ccache-${{steps.ccache_cache_timestamp.outputs.timestamp}}
|
||||
restore-keys: ros_integration_tests-${{matrix.config.build_type}}-ccache-
|
||||
- name: setup ccache
|
||||
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 = 300M" >> ~/.ccache/ccache.conf
|
||||
echo "hash_dir = false" >> ~/.ccache/ccache.conf
|
||||
ccache -s
|
||||
ccache -z
|
||||
|
||||
- name: Get and build micro-xrce-dds-agent
|
||||
run: |
|
||||
cd /opt
|
||||
git clone --recursive https://github.com/eProsima/Micro-XRCE-DDS-Agent.git
|
||||
cd Micro-XRCE-DDS-Agent
|
||||
git checkout v2.2.1 # recent versions require cmake 3.22, but px4-dev-ros2-galactic:2021-09-08 is on 3.16
|
||||
sed -i 's/_fastdds_tag 2.8.x/_fastdds_tag 2.8.2/g' CMakeLists.txt
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ..
|
||||
make -j2
|
||||
- name: ccache post-run micro-xrce-dds-agent
|
||||
run: ccache -s
|
||||
|
||||
- name: Get and build the ros2 interface library
|
||||
shell: bash
|
||||
run: |
|
||||
PX4_DIR="$(pwd)"
|
||||
. /opt/ros/galactic/setup.bash
|
||||
mkdir -p /opt/px4_ws/src
|
||||
cd /opt/px4_ws/src
|
||||
git clone --recursive https://github.com/Auterion/px4-ros2-interface-lib.git
|
||||
# Ignore python packages due to compilation issue (can be enabled when updating ROS)
|
||||
touch px4-ros2-interface-lib/px4_ros2_py/COLCON_IGNORE || true
|
||||
touch px4-ros2-interface-lib/examples/python/COLCON_IGNORE || true
|
||||
cd ..
|
||||
# Copy messages to ROS workspace
|
||||
"${PX4_DIR}/Tools/copy_to_ros_ws.sh" "$(pwd)"
|
||||
rm -rf src/translation_node src/px4_msgs_old
|
||||
colcon build --symlink-install
|
||||
- name: ccache post-run ros workspace
|
||||
run: ccache -s
|
||||
|
||||
- name: Build PX4
|
||||
run: make px4_sitl_default
|
||||
- name: ccache post-run px4/firmware
|
||||
run: ccache -s
|
||||
- name: Build SITL Gazebo
|
||||
run: make px4_sitl_default sitl_gazebo-classic
|
||||
- name: ccache post-run sitl_gazebo-classic
|
||||
run: ccache -s
|
||||
|
||||
- name: Core dump settings
|
||||
run: |
|
||||
ulimit -c unlimited
|
||||
echo "`pwd`/%e.core" > /proc/sys/kernel/core_pattern
|
||||
|
||||
- name: Run tests
|
||||
shell: bash
|
||||
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
|
||||
timeout-minutes: 45
|
||||
|
||||
- name: Upload failed logs
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: failed-logs.zip
|
||||
path: |
|
||||
logs/**/**/**/*.log
|
||||
logs/**/**/**/*.ulg
|
||||
build/px4_sitl_default/tmp_ros_tests/rootfs/log/**/*.ulg
|
||||
@@ -1,61 +0,0 @@
|
||||
name: ROS Translation Node Tests
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build_and_test:
|
||||
name: Build and test
|
||||
runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false]
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
config:
|
||||
- {ros_version: "humble", ubuntu: "jammy"}
|
||||
- {ros_version: "jazzy", ubuntu: "noble"}
|
||||
container:
|
||||
image: rostooling/setup-ros-docker:ubuntu-${{ matrix.config.ubuntu }}-latest
|
||||
steps:
|
||||
- name: Setup ROS 2 (${{ matrix.config.ros_version }})
|
||||
uses: ros-tooling/setup-ros@v0.7
|
||||
with:
|
||||
required-ros-distributions: ${{ matrix.config.ros_version }}
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
# Workaround for https://github.com/actions/runner/issues/2033
|
||||
- name: ownership workaround
|
||||
run: git config --system --add safe.directory '*'
|
||||
|
||||
- name: Check .msg file versioning
|
||||
if: github.event_name == 'pull_request'
|
||||
run: |
|
||||
./Tools/ci/check_msg_versioning.sh ${{ github.event.pull_request.base.sha }} ${{github.event.pull_request.head.sha}}
|
||||
|
||||
- name: Build and test
|
||||
run: |
|
||||
ros_ws=/ros_ws
|
||||
mkdir -p $ros_ws/src
|
||||
./Tools/copy_to_ros_ws.sh $ros_ws
|
||||
cd $ros_ws
|
||||
source /opt/ros/${{ matrix.config.ros_version }}/setup.sh
|
||||
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release --symlink-install --event-handlers=console_cohesion+
|
||||
source ./install/setup.sh
|
||||
./build/translation_node/translation_node_unit_tests
|
||||
@@ -1,163 +0,0 @@
|
||||
# NOTE: this workflow is now running on Dronecode / PX4 AWS account.
|
||||
# - If you want to keep the tests running in GitHub Actions you need to uncomment the "runs-on: ubuntu-latest" lines
|
||||
# and comment the "runs-on: [runs-on,runner=..." lines.
|
||||
# - If you would like to duplicate this setup try setting up "RunsOn" on your own AWS account try https://runs-on.com
|
||||
|
||||
name: SITL Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Testing PX4 ${{ matrix.config.model }}
|
||||
runs-on: [runs-on,runner=4cpu-linux-x64,image=ubuntu22-full-x64,"run-id=${{ github.run_id }}",spot=false]
|
||||
container:
|
||||
image: px4io/px4-dev-simulation-focal:2021-09-08
|
||||
options: --privileged --ulimit core=-1 --security-opt seccomp=unconfined
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
config:
|
||||
- {model: "iris", latitude: "59.617693", longitude: "-151.145316", altitude: "48", build_type: "RelWithDebInfo" } # Alaska
|
||||
# VTOL/tailsitter disabled: persistent flaky CI failures (timeouts, erratic
|
||||
# transitions). Re-enable once the test infrastructure is stabilized.
|
||||
# - {model: "tailsitter" , latitude: "29.660316", longitude: "-82.316658", altitude: "30", build_type: "RelWithDebInfo" } # Florida
|
||||
# - {model: "standard_vtol", latitude: "47.397742", longitude: "8.545594", altitude: "488", build_type: "Coverage" } # Zurich
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Git Ownership Workaround
|
||||
run: git config --system --add safe.directory '*'
|
||||
|
||||
- id: set-timestamp
|
||||
name: Set timestamp for cache
|
||||
run: echo "::set-output name=timestamp::$(date +"%Y%m%d%H%M%S")"
|
||||
|
||||
- name: Cache Key Config
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: sitl-ccache-${{ steps.set-timestamp.outputs.timestamp }}
|
||||
restore-keys: sitl-ccache-${{ steps.set-timestamp.outputs.timestamp }}
|
||||
|
||||
- name: Cache Conf Config
|
||||
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 = 120M" >> ~/.ccache/ccache.conf
|
||||
echo "hash_dir = false" >> ~/.ccache/ccache.conf
|
||||
ccache -s
|
||||
ccache -z
|
||||
|
||||
- name: Build PX4
|
||||
env:
|
||||
PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}}
|
||||
run: make px4_sitl_default
|
||||
|
||||
- name: Cache Post-Run [px4_sitl_default]
|
||||
run: ccache -s
|
||||
|
||||
- name: Build SITL Gazebo
|
||||
env:
|
||||
PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}}
|
||||
run: make px4_sitl_default sitl_gazebo-classic
|
||||
|
||||
- name: Cache Post-Run [sitl_gazebo-classic]
|
||||
run: ccache -s
|
||||
|
||||
- name: Download MAVSDK
|
||||
run: wget "https://github.com/mavlink/MAVSDK/releases/download/v$(cat test/mavsdk_tests/MAVSDK_VERSION)/libmavsdk-dev_$(cat test/mavsdk_tests/MAVSDK_VERSION)_ubuntu20.04_amd64.deb"
|
||||
|
||||
- name: Install MAVSDK
|
||||
run: dpkg -i "libmavsdk-dev_$(cat test/mavsdk_tests/MAVSDK_VERSION)_ubuntu20.04_amd64.deb"
|
||||
|
||||
- name: Check PX4 Environment Variables
|
||||
env:
|
||||
PX4_HOME_LAT: ${{matrix.config.latitude}}
|
||||
PX4_HOME_LON: ${{matrix.config.longitude}}
|
||||
PX4_HOME_ALT: ${{matrix.config.altitude}}
|
||||
PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}}
|
||||
run: |
|
||||
export
|
||||
ulimit -a
|
||||
|
||||
- name: Build PX4 / MAVSDK tests
|
||||
env:
|
||||
PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}}
|
||||
DONT_RUN: 1
|
||||
run: make px4_sitl_default sitl_gazebo-classic mavsdk_tests
|
||||
|
||||
- name: Cache Post-Run [px4_sitl_default sitl_gazebo-classic mavsdk_tests]
|
||||
run: ccache -s
|
||||
|
||||
- name: Core Dump Settings
|
||||
run: |
|
||||
ulimit -c unlimited
|
||||
echo "`pwd`/%e.core" > /proc/sys/kernel/core_pattern
|
||||
|
||||
- name: Run SITL / MAVSDK Tests
|
||||
env:
|
||||
PX4_HOME_LAT: ${{matrix.config.latitude}}
|
||||
PX4_HOME_LON: ${{matrix.config.longitude}}
|
||||
PX4_HOME_ALT: ${{matrix.config.altitude}}
|
||||
PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}}
|
||||
run: test/mavsdk_tests/mavsdk_test_runner.py --speed-factor 10 --abort-early --model ${{matrix.config.model}} test/mavsdk_tests/configs/sitl.json --verbose --force-color
|
||||
timeout-minutes: 45
|
||||
|
||||
- name: Upload failed logs
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: failed-${{matrix.config.model}}-logs.zip
|
||||
path: |
|
||||
logs/**/**/**/*.log
|
||||
logs/**/**/**/*.ulg
|
||||
build/px4_sitl_default/tmp_mavsdk_tests/rootfs/log/**/*.ulg
|
||||
|
||||
- name: Look at Core files
|
||||
if: failure() && ${{ hashFiles('px4.core') != '' }}
|
||||
run: gdb build/px4_sitl_default/bin/px4 px4.core -ex "thread apply all bt" -ex "quit"
|
||||
|
||||
- name: Upload PX4 coredump
|
||||
if: failure() && ${{ hashFiles('px4.core') != '' }}
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: coredump
|
||||
path: px4.core
|
||||
|
||||
- name: Setup & Generate Coverage Report
|
||||
if: contains(matrix.config.build_type, 'Coverage')
|
||||
run: |
|
||||
git config --global credential.helper "" # disable the keychain credential helper
|
||||
git config --global --add credential.helper store # enable the local store credential helper
|
||||
echo "https://x-access-token:${{ secrets.ACCESS_TOKEN }}@github.com" >> ~/.git-credentials # add credential
|
||||
git config --global url."https://github.com/".insteadof git@github.com: # credentials add credential
|
||||
mkdir -p coverage
|
||||
lcov --directory build/px4_sitl_default --base-directory build/px4_sitl_default --gcov-tool gcov --capture -o coverage/lcov.info
|
||||
|
||||
- name: Upload Coverage Information to Codecov
|
||||
if: contains(matrix.config.build_type, 'Coverage')
|
||||
uses: codecov/codecov-action@v4
|
||||
with:
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
flags: mavsdk
|
||||
file: coverage/lcov.info
|
||||
Executable
+147
@@ -0,0 +1,147 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Run clang-tidy incrementally on files changed in a PR.
|
||||
|
||||
Usage: run-clang-tidy-pr.py <base-ref>
|
||||
base-ref: e.g. origin/main
|
||||
|
||||
Computes the set of translation units (TUs) affected by the PR diff,
|
||||
then invokes Tools/run-clang-tidy.py on that subset only.
|
||||
Exits 0 silently when no C++ files were changed.
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
EXTENSIONS_CPP = {'.cpp', '.c'}
|
||||
EXTENSIONS_HDR = {'.hpp', '.h'}
|
||||
# Manual exclusions from Makefile:508
|
||||
EXCLUDE_EXTRA = '|'.join([
|
||||
'src/systemcmds/tests',
|
||||
'src/examples',
|
||||
'src/modules/gyro_fft/CMSIS_5',
|
||||
'src/lib/drivers/smbus',
|
||||
'src/drivers/gpio',
|
||||
r'src/modules/commander/failsafe/emscripten',
|
||||
r'failsafe_test\.dir',
|
||||
])
|
||||
|
||||
|
||||
def repo_root():
|
||||
try:
|
||||
return subprocess.check_output(
|
||||
['git', 'rev-parse', '--show-toplevel'], text=True).strip()
|
||||
except subprocess.CalledProcessError:
|
||||
print('error: not inside a git repository', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def changed_files(base_ref, root):
|
||||
try:
|
||||
out = subprocess.check_output(
|
||||
['git', 'diff', '--name-only', f'{base_ref}...HEAD',
|
||||
'--', '*.cpp', '*.hpp', '*.h', '*.c'],
|
||||
text=True, cwd=root).strip()
|
||||
return out.splitlines() if out else []
|
||||
except subprocess.CalledProcessError:
|
||||
print(f'error: could not diff against "{base_ref}" — '
|
||||
'is the ref valid and fetched?', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def submodule_paths(root):
|
||||
# Returns [] if .gitmodules is absent or has no paths — both valid
|
||||
try:
|
||||
out = subprocess.check_output(
|
||||
['git', 'config', '--file', '.gitmodules',
|
||||
'--get-regexp', 'path'],
|
||||
text=True, cwd=root).strip()
|
||||
return [line.split()[1] for line in out.splitlines()]
|
||||
except subprocess.CalledProcessError:
|
||||
return []
|
||||
|
||||
|
||||
def build_exclude(root):
|
||||
submodules = '|'.join(submodule_paths(root))
|
||||
return f'{submodules}|{EXCLUDE_EXTRA}' if submodules else EXCLUDE_EXTRA
|
||||
|
||||
|
||||
def load_db(build_dir):
|
||||
db_path = os.path.join(build_dir, 'compile_commands.json')
|
||||
if not os.path.isfile(db_path):
|
||||
print(f'error: {db_path} not found', file=sys.stderr)
|
||||
print('Run "make px4_sitl_default-clang" first to generate '
|
||||
'the compilation database', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
try:
|
||||
with open(db_path) as f:
|
||||
return json.load(f)
|
||||
except json.JSONDecodeError as e:
|
||||
print(f'error: compile_commands.json is malformed: {e}', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def find_tus(changed, db, root):
|
||||
db_files = {e['file'] for e in db}
|
||||
result = set()
|
||||
for f in changed:
|
||||
abs_path = os.path.join(root, f)
|
||||
ext = os.path.splitext(f)[1]
|
||||
if ext in EXTENSIONS_CPP:
|
||||
if abs_path in db_files:
|
||||
result.add(abs_path)
|
||||
elif ext in EXTENSIONS_HDR:
|
||||
hdr = os.path.basename(f)
|
||||
for e in db:
|
||||
try:
|
||||
if hdr in open(e['file']).read():
|
||||
result.add(e['file'])
|
||||
except OSError:
|
||||
pass # file deleted in PR — skip
|
||||
return sorted(result)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description=__doc__,
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter)
|
||||
parser.add_argument('base_ref',
|
||||
help='Git ref to diff against, e.g. origin/main')
|
||||
args = parser.parse_args()
|
||||
|
||||
root = repo_root()
|
||||
build_dir = os.path.join(root, 'build', 'px4_sitl_default-clang')
|
||||
|
||||
run_tidy = os.path.join(root, 'Tools', 'run-clang-tidy.py')
|
||||
if not os.path.isfile(run_tidy):
|
||||
print(f'error: {run_tidy} not found', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
changed = changed_files(args.base_ref, root)
|
||||
if not changed:
|
||||
print('No C++ files changed — skipping clang-tidy')
|
||||
sys.exit(0)
|
||||
|
||||
db = load_db(build_dir)
|
||||
tus = find_tus(changed, db, root)
|
||||
|
||||
if not tus:
|
||||
print('No matching TUs in compile_commands.json — skipping clang-tidy')
|
||||
sys.exit(0)
|
||||
|
||||
print(f'Running clang-tidy on {len(tus)} translation unit(s)')
|
||||
|
||||
result = subprocess.run(
|
||||
[sys.executable, run_tidy,
|
||||
'-header-filter=.*\\.hpp',
|
||||
'-j0',
|
||||
f'-exclude={build_exclude(root)}',
|
||||
'-p', build_dir] + tus
|
||||
)
|
||||
sys.exit(result.returncode)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -74,7 +74,7 @@ python3 -m pip install --user -r ${DIR}/requirements.txt
|
||||
|
||||
# Optional, but recommended additional simulation tools:
|
||||
if [[ $INSTALL_SIM == "--sim-tools" ]]; then
|
||||
if brew ls --versions px4-sim > /dev/null; then
|
||||
if ! brew ls --versions px4-sim > /dev/null; then
|
||||
brew install px4-sim
|
||||
elif [[ $REINSTALL_FORMULAS == "--reinstall" ]]; then
|
||||
brew reinstall px4-sim
|
||||
|
||||
@@ -243,15 +243,6 @@
|
||||
*/
|
||||
#define DIRECT_PWM_OUTPUT_CHANNELS 9
|
||||
|
||||
#define GPIO_FMU_CH1 /* PI0 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTI|GPIO_PIN0)
|
||||
#define GPIO_FMU_CH2 /* PH12 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN12)
|
||||
#define GPIO_FMU_CH3 /* PH11 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN11)
|
||||
#define GPIO_FMU_CH4 /* PH10 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN10)
|
||||
#define GPIO_FMU_CH5 /* PD13 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTD|GPIO_PIN13)
|
||||
#define GPIO_FMU_CH6 /* PD14 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTD|GPIO_PIN14)
|
||||
#define GPIO_FMU_CH7 /* PH6 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN6)
|
||||
#define GPIO_FMU_CH8 /* PH9 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN9)
|
||||
|
||||
#define GPIO_FMU_CAP /* PE11 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTE|GPIO_PIN11)
|
||||
#define GPIO_SPIX_SYNC /* PE9 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTE|GPIO_PIN9)
|
||||
|
||||
@@ -465,14 +456,6 @@
|
||||
GPIO_SAFETY_SWITCH_IN, \
|
||||
GPIO_PG6, \
|
||||
GPIO_nARMED_INIT, \
|
||||
GPIO_FMU_CH1, \
|
||||
GPIO_FMU_CH2, \
|
||||
GPIO_FMU_CH3, \
|
||||
GPIO_FMU_CH4, \
|
||||
GPIO_FMU_CH5, \
|
||||
GPIO_FMU_CH6, \
|
||||
GPIO_FMU_CH7, \
|
||||
GPIO_FMU_CH8, \
|
||||
GPIO_FMU_CAP, \
|
||||
GPIO_SPIX_SYNC \
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
# CONFIG_BOARD_UAVCAN_TIMER_OVERRIDE is not set
|
||||
CONFIG_BOARD_CONSTRAINED_FLASH=y
|
||||
CONFIG_BOARD_CONSTRAINED_MEMORY=y
|
||||
CONFIG_MODULES_UXRCE_DDS_CLIENT=n
|
||||
CONFIG_MODULES_ZENOH=y
|
||||
@@ -26,6 +26,8 @@ then
|
||||
fi
|
||||
|
||||
param set-default BAT1_V_DIV 21.0
|
||||
param set-default BAT1_V_FILT 0.075
|
||||
param set-default BAT1_I_FILT 0.5
|
||||
|
||||
param set-default RC_CRSF_PRT_CFG 300
|
||||
param set-default RC_SBUS_PRT_CFG 0
|
||||
|
||||
@@ -176,9 +176,6 @@
|
||||
|
||||
#define BOARD_BATTERY1_V_DIV (21.0f) // (20k + 1k) / 1k = 21
|
||||
|
||||
#define BOARD_BATTERY_ADC_VOLTAGE_FILTER_S 0.075f
|
||||
#define BOARD_BATTERY_ADC_CURRENT_FILTER_S 0.125f
|
||||
|
||||
#define ADC_SCALED_PAYLOAD_SENSE ADC_SCALED_12V_CHANNEL
|
||||
|
||||
/* HW has to large of R termination on ADC todo:change when HW value is chosen */
|
||||
@@ -226,16 +223,6 @@
|
||||
*/
|
||||
#define DIRECT_PWM_OUTPUT_CHANNELS 9
|
||||
|
||||
#define GPIO_FMU_CH1 /* PI0 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTI|GPIO_PIN0)
|
||||
#define GPIO_FMU_CH2 /* PH12 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN12)
|
||||
#define GPIO_FMU_CH3 /* PH11 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN11)
|
||||
#define GPIO_FMU_CH4 /* PH10 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN10)
|
||||
#define GPIO_FMU_CH5 /* PI5 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTI|GPIO_PIN5)
|
||||
#define GPIO_FMU_CH6 /* PI6 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTI|GPIO_PIN6)
|
||||
#define GPIO_FMU_CH7 /* PI7 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTI|GPIO_PIN7)
|
||||
#define GPIO_FMU_CH8 /* PI2 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTI|GPIO_PIN2)
|
||||
#define GPIO_FMU_CH9 /* PD12 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTD|GPIO_PIN12)
|
||||
|
||||
#define GPIO_SPIX_SYNC /* PE9 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTE|GPIO_PIN9)
|
||||
|
||||
/* Power supply control and monitoring GPIOs */
|
||||
@@ -339,15 +326,6 @@
|
||||
GPIO_VDD_3V3_SD_CARD_EN, \
|
||||
GPIO_nARMED_INIT, \
|
||||
SPI6_nRESET_EXTERNAL1, \
|
||||
GPIO_FMU_CH1, \
|
||||
GPIO_FMU_CH2, \
|
||||
GPIO_FMU_CH3, \
|
||||
GPIO_FMU_CH4, \
|
||||
GPIO_FMU_CH5, \
|
||||
GPIO_FMU_CH6, \
|
||||
GPIO_FMU_CH7, \
|
||||
GPIO_FMU_CH8, \
|
||||
GPIO_FMU_CH9, \
|
||||
GPIO_SPIX_SYNC \
|
||||
}
|
||||
|
||||
|
||||
@@ -206,15 +206,6 @@
|
||||
*/
|
||||
#define DIRECT_PWM_OUTPUT_CHANNELS 8
|
||||
|
||||
#define GPIO_FMU_CH1 /* PI0 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTI|GPIO_PIN0)
|
||||
#define GPIO_FMU_CH2 /* PH12 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN12)
|
||||
#define GPIO_FMU_CH3 /* PH11 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN11)
|
||||
#define GPIO_FMU_CH4 /* PH10 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN10)
|
||||
#define GPIO_FMU_CH5 /* PD13 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTD|GPIO_PIN13)
|
||||
#define GPIO_FMU_CH6 /* PD14 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTD|GPIO_PIN14)
|
||||
#define GPIO_FMU_CH7 /* PH6 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN6)
|
||||
#define GPIO_FMU_CH8 /* PH9 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTH|GPIO_PIN9)
|
||||
|
||||
#define GPIO_FMU_CAP /* PE11 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTE|GPIO_PIN11)
|
||||
#define GPIO_SPIX_SYNC /* PE9 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTE|GPIO_PIN9)
|
||||
|
||||
@@ -341,14 +332,6 @@
|
||||
GPIO_NFC_GPIO, \
|
||||
GPIO_TONE_ALARM_IDLE, \
|
||||
GPIO_nARMED_INIT, \
|
||||
GPIO_FMU_CH1, \
|
||||
GPIO_FMU_CH2, \
|
||||
GPIO_FMU_CH3, \
|
||||
GPIO_FMU_CH4, \
|
||||
GPIO_FMU_CH5, \
|
||||
GPIO_FMU_CH6, \
|
||||
GPIO_FMU_CH7, \
|
||||
GPIO_FMU_CH8, \
|
||||
GPIO_FMU_CAP, \
|
||||
GPIO_SPIX_SYNC \
|
||||
}
|
||||
|
||||
@@ -43,6 +43,8 @@
|
||||
#include <drivers/drv_hrt.h>
|
||||
#include <drivers/drv_io_heater.h>
|
||||
|
||||
ModuleBase::Descriptor Core_Heater::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
# ifndef GPIO_CORE_HEATER_OUTPUT
|
||||
# error "To use the heater driver, the board_config.h must define and initialize GPIO_CORE_HEATER_OUTPUT"
|
||||
# endif
|
||||
@@ -62,7 +64,7 @@ Core_Heater::~Core_Heater()
|
||||
int Core_Heater::custom_command(int argc, char *argv[])
|
||||
{
|
||||
// Check if the driver is running.
|
||||
if (!is_running()) {
|
||||
if (!is_running(desc)) {
|
||||
PX4_INFO("not running");
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -117,7 +119,7 @@ bool Core_Heater::initialize_topics()
|
||||
void Core_Heater::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -216,8 +218,8 @@ int Core_Heater::task_spawn(int argc, char *argv[])
|
||||
return PX4_ERROR;
|
||||
}
|
||||
|
||||
_object.store(core_heater);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(core_heater);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
core_heater->start();
|
||||
return 0;
|
||||
@@ -257,5 +259,5 @@ Background process running periodically on the LP work queue to regulate IMU tem
|
||||
|
||||
extern "C" __EXPORT int core_heater_main(int argc, char *argv[])
|
||||
{
|
||||
return Core_Heater::main(argc, argv);
|
||||
return ModuleBase::main(Core_Heater::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -56,9 +56,11 @@ using namespace time_literals;
|
||||
#define CONTROLLER_PERIOD_DEFAULT 10000
|
||||
#define TEMPERATURE_TARGET_THRESHOLD 2.5f
|
||||
|
||||
class Core_Heater : public ModuleBase<Core_Heater>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class Core_Heater : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
Core_Heater();
|
||||
|
||||
virtual ~Core_Heater();
|
||||
|
||||
@@ -33,6 +33,8 @@
|
||||
|
||||
#include "NavioRGBLed.hpp"
|
||||
|
||||
ModuleBase::Descriptor NavioRGBLed::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
NavioRGBLed::NavioRGBLed() :
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::lp_default)
|
||||
{
|
||||
@@ -130,8 +132,8 @@ int NavioRGBLed::task_spawn(int argc, char *argv[])
|
||||
NavioRGBLed *instance = new NavioRGBLed();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init() == PX4_OK) {
|
||||
return PX4_OK;
|
||||
@@ -142,8 +144,8 @@ int NavioRGBLed::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -170,5 +172,5 @@ Emlid Navio2 RGB LED driver.
|
||||
|
||||
extern "C" __EXPORT int navio_rgbled_main(int argc, char *argv[])
|
||||
{
|
||||
return NavioRGBLed::main(argc, argv);
|
||||
return ModuleBase::main(NavioRGBLed::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -40,9 +40,11 @@
|
||||
|
||||
#include <lib/led/led.h>
|
||||
|
||||
class NavioRGBLed : public ModuleBase<NavioRGBLed>, public px4::ScheduledWorkItem
|
||||
class NavioRGBLed : public ModuleBase, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
NavioRGBLed();
|
||||
~NavioRGBLed() override;
|
||||
|
||||
|
||||
@@ -49,6 +49,8 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
ModuleBase::Descriptor GhstRc::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
uint32_t GhstRc::baudrate = GHST_BAUDRATE;
|
||||
|
||||
GhstRc::GhstRc(const char *device) :
|
||||
@@ -114,8 +116,8 @@ int GhstRc::task_spawn(int argc, char *argv[])
|
||||
return PX4_ERROR;
|
||||
}
|
||||
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
instance->ScheduleNow();
|
||||
|
||||
@@ -174,7 +176,7 @@ void GhstRc::Run()
|
||||
if (should_exit()) {
|
||||
ScheduleClear();
|
||||
_rc_fd = -1;
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -308,5 +310,5 @@ This module parses the GHST RC uplink protocol and can generate GHST downlink te
|
||||
|
||||
extern "C" __EXPORT int ghst_rc_main(int argc, char *argv[])
|
||||
{
|
||||
return GhstRc::main(argc, argv);
|
||||
return ModuleBase::main(GhstRc::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -54,9 +54,11 @@
|
||||
|
||||
#define GHST_MAX_NUM_CHANNELS (16)
|
||||
|
||||
class GhstRc : public ModuleBase<GhstRc>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class GhstRc : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
GhstRc(const char *device);
|
||||
~GhstRc() override;
|
||||
|
||||
|
||||
@@ -59,6 +59,8 @@
|
||||
|
||||
#include "rc_controller.hpp"
|
||||
|
||||
ModuleBase::Descriptor RC_ControllerModule::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
int RC_ControllerModule::print_status()
|
||||
{
|
||||
PX4_INFO("Running");
|
||||
@@ -69,35 +71,35 @@ int RC_ControllerModule::print_status()
|
||||
|
||||
int RC_ControllerModule::custom_command(int argc, char *argv[])
|
||||
{
|
||||
if (!is_running()) {
|
||||
if (!is_running(desc)) {
|
||||
print_usage("not running");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!strcmp(argv[0], "throttle")) {
|
||||
uint16_t val = atoi(argv[1]);
|
||||
get_instance()->set_throttle(val);
|
||||
get_instance<RC_ControllerModule>(desc)->set_throttle(val);
|
||||
PX4_INFO("Setting throttle to %u", val);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(argv[0], "yaw")) {
|
||||
uint16_t val = atoi(argv[1]);
|
||||
get_instance()->set_yaw(val);
|
||||
get_instance<RC_ControllerModule>(desc)->set_yaw(val);
|
||||
PX4_INFO("Setting yaw to %u", val);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(argv[0], "pitch")) {
|
||||
uint16_t val = atoi(argv[1]);
|
||||
get_instance()->set_pitch(val);
|
||||
get_instance<RC_ControllerModule>(desc)->set_pitch(val);
|
||||
PX4_INFO("Setting pitch to %u", val);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(argv[0], "roll")) {
|
||||
uint16_t val = atoi(argv[1]);
|
||||
get_instance()->set_roll(val);
|
||||
get_instance<RC_ControllerModule>(desc)->set_roll(val);
|
||||
PX4_INFO("Setting roll to %u", val);
|
||||
return 0;
|
||||
}
|
||||
@@ -106,17 +108,24 @@ int RC_ControllerModule::custom_command(int argc, char *argv[])
|
||||
}
|
||||
|
||||
|
||||
int RC_ControllerModule::run_trampoline(int argc, char *argv[])
|
||||
{
|
||||
return ModuleBase::run_trampoline_impl(desc, [](int ac, char *av[]) -> ModuleBase * {
|
||||
return RC_ControllerModule::instantiate(ac, av);
|
||||
}, argc, argv);
|
||||
}
|
||||
|
||||
int RC_ControllerModule::task_spawn(int argc, char *argv[])
|
||||
{
|
||||
_task_id = px4_task_spawn_cmd("RC_ControllerModule",
|
||||
SCHED_DEFAULT,
|
||||
SCHED_PRIORITY_MAX,
|
||||
1024,
|
||||
(px4_main_t)&run_trampoline,
|
||||
(char *const *)argv);
|
||||
desc.task_id = px4_task_spawn_cmd("RC_ControllerModule",
|
||||
SCHED_DEFAULT,
|
||||
SCHED_PRIORITY_MAX,
|
||||
1024,
|
||||
(px4_main_t)&run_trampoline,
|
||||
(char *const *)argv);
|
||||
|
||||
if (_task_id < 0) {
|
||||
_task_id = -1;
|
||||
if (desc.task_id < 0) {
|
||||
desc.task_id = -1;
|
||||
return -errno;
|
||||
}
|
||||
|
||||
@@ -252,5 +261,5 @@ int RC_ControllerModule::print_usage(const char *reason)
|
||||
|
||||
int rc_controller_main(int argc, char *argv[])
|
||||
{
|
||||
return RC_ControllerModule::main(argc, argv);
|
||||
return ModuleBase::main(RC_ControllerModule::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -41,9 +41,11 @@
|
||||
|
||||
extern "C" __EXPORT int rc_controller_main(int argc, char *argv[]);
|
||||
|
||||
class RC_ControllerModule : public ModuleBase<RC_ControllerModule>, public ModuleParams
|
||||
class RC_ControllerModule : public ModuleBase, public ModuleParams
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
RC_ControllerModule();
|
||||
|
||||
virtual ~RC_ControllerModule() = default;
|
||||
@@ -51,6 +53,9 @@ public:
|
||||
/** @see ModuleBase */
|
||||
static int task_spawn(int argc, char *argv[]);
|
||||
|
||||
/** @see ModuleBase */
|
||||
static int run_trampoline(int argc, char *argv[]);
|
||||
|
||||
/** @see ModuleBase */
|
||||
static RC_ControllerModule *instantiate(int argc, char *argv[]);
|
||||
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
|
||||
using namespace std;
|
||||
|
||||
ModuleBase::Descriptor VoxlSaveCalParams::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
static bool debug = false;
|
||||
|
||||
VoxlSaveCalParams::VoxlSaveCalParams() :
|
||||
@@ -145,7 +147,7 @@ VoxlSaveCalParams::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
_parameter_primary_set_value_request_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -186,8 +188,8 @@ int VoxlSaveCalParams::task_spawn(int argc, char *argv[])
|
||||
VoxlSaveCalParams *instance = new VoxlSaveCalParams();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -198,8 +200,8 @@ int VoxlSaveCalParams::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -230,5 +232,5 @@ This implements autosaving of calibration parameters on VOXL2 platform.
|
||||
|
||||
extern "C" __EXPORT int voxl_save_cal_params_main(int argc, char *argv[])
|
||||
{
|
||||
return VoxlSaveCalParams::main(argc, argv);
|
||||
return ModuleBase::main(VoxlSaveCalParams::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -46,10 +46,12 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class VoxlSaveCalParams : public ModuleBase<VoxlSaveCalParams>, public ModuleParams,
|
||||
class VoxlSaveCalParams : public ModuleBase, public ModuleParams,
|
||||
public px4::WorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
VoxlSaveCalParams();
|
||||
~VoxlSaveCalParams() = default;
|
||||
|
||||
|
||||
@@ -269,7 +269,6 @@
|
||||
*(.text.udp_pollsetup)
|
||||
*(.text._ZL14timer_callbackPv)
|
||||
*(.text._ZN3Ekf4fuseERKN6matrix6VectorIfLj24EEEf)
|
||||
*(.text._ZN13land_detector23MulticopterLandDetector22_set_hysteresis_factorEi)
|
||||
*(.text.nxsem_wait_irq)
|
||||
*(.text._ZN20MavlinkCommandSender4lockEv)
|
||||
*(.text.MEM_LongCopyEnd)
|
||||
@@ -432,7 +431,7 @@
|
||||
*(.text._ZN23MavlinkStreamStatustext8get_sizeEv)
|
||||
*(.text._ZN11calibration13Accelerometer13set_device_idEm)
|
||||
*(.text._ZN3px46logger6Logger18start_stop_loggingEv)
|
||||
*(.text._ZN14FlightTaskAuto17_evaluateTripletsEv)
|
||||
*(.text._ZN14FlightTaskAuto32_evaluatePositionSetpointTripletEv)
|
||||
*(.text._ZN11calibration9Gyroscope23SensorCorrectionsUpdateEb)
|
||||
*(.text._ZN25MavlinkStreamMagCalReport4sendEv)
|
||||
*(.text.imxrt_config_gpio)
|
||||
@@ -573,7 +572,6 @@
|
||||
*(.text._ZN4uORB12SubscriptionaSEOS0_)
|
||||
*(.text._ZN15TakeoffHandling18updateTakeoffStateEbbbfbRKy)
|
||||
*(.text._ZN10ModeChecks14checkAndReportERK7ContextR6Report)
|
||||
*(.text._ZN14FlightTaskAuto24_updateInternalWaypointsEv)
|
||||
*(.text._ZN8Failsafe17updateArmingStateERKybRK16failsafe_flags_s)
|
||||
*(.text.imxrt_lpi2c_modifyreg)
|
||||
*(.text.up_flush_dcache)
|
||||
|
||||
@@ -269,7 +269,6 @@
|
||||
*(.text.udp_pollsetup)
|
||||
*(.text._ZL14timer_callbackPv)
|
||||
*(.text._ZN3Ekf4fuseERKN6matrix6VectorIfLj24EEEf)
|
||||
*(.text._ZN13land_detector23MulticopterLandDetector22_set_hysteresis_factorEi)
|
||||
*(.text.nxsem_wait_irq)
|
||||
*(.text._ZN20MavlinkCommandSender4lockEv)
|
||||
*(.text.MEM_LongCopyEnd)
|
||||
@@ -432,7 +431,7 @@
|
||||
*(.text._ZN23MavlinkStreamStatustext8get_sizeEv)
|
||||
*(.text._ZN11calibration13Accelerometer13set_device_idEm)
|
||||
*(.text._ZN3px46logger6Logger18start_stop_loggingEv)
|
||||
*(.text._ZN14FlightTaskAuto17_evaluateTripletsEv)
|
||||
*(.text._ZN14FlightTaskAuto32_evaluatePositionSetpointTripletEv)
|
||||
*(.text._ZN11calibration9Gyroscope23SensorCorrectionsUpdateEb)
|
||||
*(.text._ZN25MavlinkStreamMagCalReport4sendEv)
|
||||
*(.text.imxrt_config_gpio)
|
||||
@@ -573,7 +572,6 @@
|
||||
*(.text._ZN4uORB12SubscriptionaSEOS0_)
|
||||
*(.text._ZN15TakeoffHandling18updateTakeoffStateEbbbfbRKy)
|
||||
*(.text._ZN10ModeChecks14checkAndReportERK7ContextR6Report)
|
||||
*(.text._ZN14FlightTaskAuto24_updateInternalWaypointsEv)
|
||||
*(.text._ZN8Failsafe17updateArmingStateERKybRK16failsafe_flags_s)
|
||||
*(.text.imxrt_lpi2c_modifyreg)
|
||||
*(.text.up_flush_dcache)
|
||||
|
||||
@@ -273,7 +273,6 @@
|
||||
*(.text.udp_pollsetup)
|
||||
*(.text._ZL14timer_callbackPv)
|
||||
*(.text._ZN3Ekf4fuseERKN6matrix6VectorIfLj24EEEf)
|
||||
*(.text._ZN13land_detector23MulticopterLandDetector22_set_hysteresis_factorEi)
|
||||
*(.text.nxsem_wait_irq)
|
||||
*(.text._ZN20MavlinkCommandSender4lockEv)
|
||||
*(.text.MEM_LongCopyEnd)
|
||||
@@ -440,7 +439,7 @@
|
||||
*(.text._ZN23MavlinkStreamStatustext8get_sizeEv)
|
||||
*(.text._ZN11calibration13Accelerometer13set_device_idEm)
|
||||
*(.text._ZN3px46logger6Logger18start_stop_loggingEv)
|
||||
*(.text._ZN14FlightTaskAuto17_evaluateTripletsEv)
|
||||
*(.text._ZN14FlightTaskAuto32_evaluatePositionSetpointTripletEv)
|
||||
*(.text._ZN11calibration9Gyroscope23SensorCorrectionsUpdateEb)
|
||||
*(.text._ZN25MavlinkStreamMagCalReport4sendEv)
|
||||
*(.text.imxrt_config_gpio)
|
||||
@@ -586,7 +585,6 @@
|
||||
*(.text._ZN4uORB12SubscriptionaSEOS0_)
|
||||
*(.text._ZN15TakeoffHandling18updateTakeoffStateEbbbfbRKy)
|
||||
*(.text._ZN10ModeChecks14checkAndReportERK7ContextR6Report)
|
||||
*(.text._ZN14FlightTaskAuto24_updateInternalWaypointsEv)
|
||||
*(.text._ZN8Failsafe17updateArmingStateERKybRK16failsafe_flags_s)
|
||||
*(.text.imxrt_lpi2c_modifyreg)
|
||||
*(.text.up_flush_dcache)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Onboard parameters for Vehicle 1
|
||||
#
|
||||
# Stack: PX4 Pro
|
||||
# Vehicle: Multi-Rotor
|
||||
# Version: 1.15.4
|
||||
# Vehicle: Amovlab F410
|
||||
# Version: 1.15.4
|
||||
# Git Revision: 99c40407ff000000
|
||||
#
|
||||
# Vehicle-Id Component-Id Name Value Type
|
||||
@@ -546,7 +546,6 @@
|
||||
1 1 IMU_INTEG_RATE 200 6
|
||||
1 1 LNDMC_ALT_GND 2.000000000000000000 9
|
||||
1 1 LNDMC_ROT_MAX 20.000000000000000000 9
|
||||
1 1 LNDMC_TRIG_TIME 1.000000000000000000 9
|
||||
1 1 LNDMC_XY_VEL_MAX 1.500000000000000000 9
|
||||
1 1 LNDMC_Z_VEL_MAX 0.250000000000000000 9
|
||||
1 1 LND_FLIGHT_T_HI 5 6
|
||||
|
||||
@@ -418,6 +418,7 @@
|
||||
- [Standard Configuration](config/index.md)
|
||||
- [Advanced Configuration](advanced_config/index.md)
|
||||
- [Using PX4's Navigation Filter (EKF2)](advanced_config/tuning_the_ecl_ekf.md)
|
||||
- [GNSS-Denied & Degraded Flight](advanced_config/gnss_degraded_or_denied_flight.md)
|
||||
- [Finding/Updating Parameters](advanced_config/parameters.md)
|
||||
- [Full Parameter Reference](advanced_config/parameter_reference.md)
|
||||
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
# GNSS-Degraded & Denied Flight ("Dead-Reckoning" Mode)
|
||||
|
||||
<Badge type="tip" text="PX4 v1.17" /> <Badge type="warning" text="Experimental" />
|
||||
|
||||
::: warning Experimental
|
||||
This is a new feature with limited real-world testing.
|
||||
It is intended for GNSS dropout scenarios (not pure GNSS-denied from takeoff), and requires that alternative velocity/position sensors are available.
|
||||
|
||||
Please [share your related test logs](../getting_started/flight_reporting.md#sharing-the-log-files-for-review-by-px4-developers) to help us verify and harden it.
|
||||
:::
|
||||
|
||||
PX4 is default-configured for outdoor flight with a reliable GNSS signal, but it can also be set up in "dead-reckoning mode" to more gracefully handle environments where GNSS is intermittently degraded or denied during flight.
|
||||
|
||||
This section describes the differences between automatic and dead-reckoning modes, the circumstances in which each should be used, and how dead-reckoning is configured.
|
||||
|
||||
## Overview
|
||||
|
||||
PX4's EKF2 navigation has two modes for handling when GNSS data is determined to be unreliable:
|
||||
|
||||
- **Automatic mode** (the default): Used for flying outdoors in environments where a GNSS signal is expected to be largely reliable.
|
||||
- **Dead-reckoning mode**: Recommended when you want to fly missions or other position controlled modes when there is intermittent GNSS loss, such as when flying under a bridge, from outdoors into an indoor setting, or when there is GNSS jamming (it is not suitable for pure-indoor use, as a GNSS signal is required before arming).
|
||||
|
||||
::: info
|
||||
Dead-reckoning mode helps for both Fixed-Wing and Multicopter vehicles.
|
||||
MC vehicles benefit more because they can hover when transitioning between sensor regimes.
|
||||
FW needs continuous accurate velocity/position during the entire mission arc, making sensor transitions trickier.
|
||||
:::
|
||||
|
||||
## Mode Comparison
|
||||
|
||||
The following sections provide more detail about each of the modes and when they should be used.
|
||||
|
||||
### Automatic Mode
|
||||
|
||||
In Automatic mode the EKF2 resets if GNSS is lost and no other sources of position are available.
|
||||
This can result in a [position loss failsafe](../config/safety.md#position-loss-failsafe) and may trigger a shift into a mode that does not require global position, including stopping missions.
|
||||
|
||||
This is desirable if the GNSS signal is likely to be recovered quickly and there are no mechanisms to estimate position when GNSS is unavailable.
|
||||
|
||||
Use Automatic (default) when:
|
||||
|
||||
- Flying in open sky with reliable GNSS throughout the mission.
|
||||
- You want the EKF to reset to GNSS when it becomes available again.
|
||||
- Operating in environments where GNSS is either good or completely unavailable (binary state).
|
||||
|
||||
### Dead-Reckoning Mode
|
||||
|
||||
In dead-reckoning mode, EKF2 stops fusing GNSS data when it becomes unreliable and prevents EKF2 resets — provided there are other sources of position or velocity data that can be fused.
|
||||
This ensures that the vehicle can continue flying missions and other position controlled modes when GNSS is lost.
|
||||
|
||||
When GNSS is recovered it will be fused with other measurements when tests indicate it can be trusted.
|
||||
This may cause jerky movements in position controlled modes if the estimate has drifted.
|
||||
This mode relies on having additional position or velocity sensors and must also have a reliable GNSS signal at boot.
|
||||
|
||||
Use Dead-Reckoning when:
|
||||
|
||||
- **Transitioning between GNSS and non-GNSS environments** (flying into buildings, under bridges, through tree cover).
|
||||
- You have **redundant sensors** (optical flow, VIO, rangefinder, quality baro) that can maintain position estimation.
|
||||
- Flying **missions that cross GPS-denied areas** where you want continuous operation rather than failsafe.
|
||||
- **Urban environments** or other areas with intermittent GNSS quality.
|
||||
- You want to **avoid EKF resets and jumps** when GNSS recovers (smoother transitions).
|
||||
|
||||
## Configuration
|
||||
|
||||
To use dead-reckoning mode, the vehicle must have an alternative source of position or velocity information, such as an [Optical Flow](../sensor/optical_flow.md) sensor or [VIO](../computer_vision/visual_inertial_odometry.md) setup.
|
||||
|
||||
To enable the mode:
|
||||
|
||||
1. Set [EKF2_GPS_MODE](../advanced_config/parameter_reference.md#EKF2_GPS_MODE) to `1`.
|
||||
2. Ensure that GNSS arming checks are enabled (a reliable GNSS signal is required before arming):
|
||||
- [COM_ARM_WO_GPS](../advanced_config/parameter_reference.md#COM_ARM_WO_GPS) - set to `0`
|
||||
- [EKF2_GPS_CHECK](../advanced_config/parameter_reference.md#EKF2_GPS_CHECK) - set to default.
|
||||
|
||||
## See Also
|
||||
|
||||
- [GNSS Fault Detection](../advanced_config/tuning_the_ecl_ekf.md#gnss-fault-detection) in _Using PX4's Navigation Filter (EKF2)_
|
||||
- [Fuse, Reset, or Reject? Handling Various Data-sources in EKF2](https://www.youtube.com/watch?v=CMGQJNPiTJg) - _PX4 Developer Summit 2025_, Marco Hauswirth, Auterion AG
|
||||
@@ -10,6 +10,7 @@ This topic lists configuration topics that are not particularly vehicle specific
|
||||
## Feature configuration
|
||||
|
||||
- [Using PX4's Navigation Filter (EKF2)](../advanced_config/tuning_the_ecl_ekf.md)
|
||||
- [GNSS-Denied and Degraded Flight](../advanced_config/gnss_degraded_or_denied_flight.md)
|
||||
- [Flight Termination Configuration](../advanced_config/flight_termination.md)
|
||||
- [Land Detector Configuration](../advanced_config/land_detector.md)
|
||||
- [Prearm/Arm/Disarm Configuration](../advanced_config/prearm_arm_disarm.md)
|
||||
|
||||
@@ -38,7 +38,7 @@ In order to detect landing, the multicopter first has to go through three differ
|
||||
If a condition cannot be reached because of missing sensors, then the condition is true by default.
|
||||
For instance, in [Acro mode](../flight_modes_mc/acro.md) and no sensor is active except for the gyro sensor, then the detection solely relies on thrust output and time.
|
||||
|
||||
In order to proceed to the next state, each condition has to be true for a third of the configured total land detector trigger time [LNDMC_TRIG_TIME](../advanced_config/parameter_reference.md#LNDMC_TRIG_TIME).
|
||||
In order to proceed to the next state, each condition has to be true for 300ms.
|
||||
If the vehicle is equipped with a distance sensor, but the distance to ground is currently not measurable (usually because it is too large), the trigger time is increased by a factor of 3.
|
||||
|
||||
If one condition fails, the land detector drops out of the current state immediately.
|
||||
|
||||
@@ -266,6 +266,166 @@ This parameter defines the squawk code. Value should be between 0000 and 7777.
|
||||
|
||||
## Actuator Outputs
|
||||
|
||||
### PCA9685_CENT1 (`INT32`) {#PCA9685_CENT1}
|
||||
|
||||
PCA9685 Output Channel 1 Center Value.
|
||||
|
||||
Servo Center output value (when not disarmed).
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | -1 | 2200 | | -1 |
|
||||
|
||||
### PCA9685_CENT10 (`INT32`) {#PCA9685_CENT10}
|
||||
|
||||
PCA9685 Output Channel 10 Center Value.
|
||||
|
||||
Servo Center output value (when not disarmed).
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | -1 | 2200 | | -1 |
|
||||
|
||||
### PCA9685_CENT11 (`INT32`) {#PCA9685_CENT11}
|
||||
|
||||
PCA9685 Output Channel 11 Center Value.
|
||||
|
||||
Servo Center output value (when not disarmed).
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | -1 | 2200 | | -1 |
|
||||
|
||||
### PCA9685_CENT12 (`INT32`) {#PCA9685_CENT12}
|
||||
|
||||
PCA9685 Output Channel 12 Center Value.
|
||||
|
||||
Servo Center output value (when not disarmed).
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | -1 | 2200 | | -1 |
|
||||
|
||||
### PCA9685_CENT13 (`INT32`) {#PCA9685_CENT13}
|
||||
|
||||
PCA9685 Output Channel 13 Center Value.
|
||||
|
||||
Servo Center output value (when not disarmed).
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | -1 | 2200 | | -1 |
|
||||
|
||||
### PCA9685_CENT14 (`INT32`) {#PCA9685_CENT14}
|
||||
|
||||
PCA9685 Output Channel 14 Center Value.
|
||||
|
||||
Servo Center output value (when not disarmed).
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | -1 | 2200 | | -1 |
|
||||
|
||||
### PCA9685_CENT15 (`INT32`) {#PCA9685_CENT15}
|
||||
|
||||
PCA9685 Output Channel 15 Center Value.
|
||||
|
||||
Servo Center output value (when not disarmed).
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | -1 | 2200 | | -1 |
|
||||
|
||||
### PCA9685_CENT16 (`INT32`) {#PCA9685_CENT16}
|
||||
|
||||
PCA9685 Output Channel 16 Center Value.
|
||||
|
||||
Servo Center output value (when not disarmed).
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | -1 | 2200 | | -1 |
|
||||
|
||||
### PCA9685_CENT2 (`INT32`) {#PCA9685_CENT2}
|
||||
|
||||
PCA9685 Output Channel 2 Center Value.
|
||||
|
||||
Servo Center output value (when not disarmed).
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | -1 | 2200 | | -1 |
|
||||
|
||||
### PCA9685_CENT3 (`INT32`) {#PCA9685_CENT3}
|
||||
|
||||
PCA9685 Output Channel 3 Center Value.
|
||||
|
||||
Servo Center output value (when not disarmed).
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | -1 | 2200 | | -1 |
|
||||
|
||||
### PCA9685_CENT4 (`INT32`) {#PCA9685_CENT4}
|
||||
|
||||
PCA9685 Output Channel 4 Center Value.
|
||||
|
||||
Servo Center output value (when not disarmed).
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | -1 | 2200 | | -1 |
|
||||
|
||||
### PCA9685_CENT5 (`INT32`) {#PCA9685_CENT5}
|
||||
|
||||
PCA9685 Output Channel 5 Center Value.
|
||||
|
||||
Servo Center output value (when not disarmed).
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | -1 | 2200 | | -1 |
|
||||
|
||||
### PCA9685_CENT6 (`INT32`) {#PCA9685_CENT6}
|
||||
|
||||
PCA9685 Output Channel 6 Center Value.
|
||||
|
||||
Servo Center output value (when not disarmed).
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | -1 | 2200 | | -1 |
|
||||
|
||||
### PCA9685_CENT7 (`INT32`) {#PCA9685_CENT7}
|
||||
|
||||
PCA9685 Output Channel 7 Center Value.
|
||||
|
||||
Servo Center output value (when not disarmed).
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | -1 | 2200 | | -1 |
|
||||
|
||||
### PCA9685_CENT8 (`INT32`) {#PCA9685_CENT8}
|
||||
|
||||
PCA9685 Output Channel 8 Center Value.
|
||||
|
||||
Servo Center output value (when not disarmed).
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | -1 | 2200 | | -1 |
|
||||
|
||||
### PCA9685_CENT9 (`INT32`) {#PCA9685_CENT9}
|
||||
|
||||
PCA9685 Output Channel 9 Center Value.
|
||||
|
||||
Servo Center output value (when not disarmed).
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | -1 | 2200 | | -1 |
|
||||
|
||||
### PCA9685_DIS1 (`INT32`) {#PCA9685_DIS1}
|
||||
|
||||
PCA9685 Output Channel 1 Disarmed Value.
|
||||
@@ -15405,6 +15565,18 @@ A value of -1 means to use the board default.
|
||||
| ------- | -------- | -------- | --------- | ------- | ---- |
|
||||
| ✓ | | | | -1 |
|
||||
|
||||
### BAT1_I_FILT (`FLOAT`) {#BAT1_I_FILT}
|
||||
|
||||
Battery 1 current filter time constant.
|
||||
|
||||
Low-pass filter time constant for the battery current ADC reading (in seconds).
|
||||
A higher value results in more smoothing and less noise, but slower response.
|
||||
A value of 0 disables the filter.
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | 0.0 | 5.0 | | 0.0 | s |
|
||||
|
||||
### BAT1_I_OVERWRITE (`FLOAT`) {#BAT1_I_OVERWRITE}
|
||||
|
||||
Battery 1 idle current overwrite.
|
||||
@@ -15537,6 +15709,18 @@ it drops off to a voltage level damaging the cells.
|
||||
| ------- | -------- | -------- | --------- | ------- | ---- |
|
||||
| ✓ | | | 0.01 | 3.6 | V |
|
||||
|
||||
### BAT1_V_FILT (`FLOAT`) {#BAT1_V_FILT}
|
||||
|
||||
Battery 1 voltage filter time constant.
|
||||
|
||||
Low-pass filter time constant for the battery voltage ADC reading (in seconds).
|
||||
A higher value results in more smoothing and less noise, but slower response.
|
||||
A value of 0 disables the filter.
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | 0.0 | 5.0 | | 0.0 | s |
|
||||
|
||||
### BAT2_A_PER_V (`FLOAT`) {#BAT2_A_PER_V}
|
||||
|
||||
Battery 2 current per volt (A/V).
|
||||
@@ -15570,6 +15754,18 @@ A value of -1 means to use the board default.
|
||||
| ------- | -------- | -------- | --------- | ------- | ---- |
|
||||
| ✓ | | | | -1 |
|
||||
|
||||
### BAT2_I_FILT (`FLOAT`) {#BAT2_I_FILT}
|
||||
|
||||
Battery 2 current filter time constant.
|
||||
|
||||
Low-pass filter time constant for the battery current ADC reading (in seconds).
|
||||
A higher value results in more smoothing and less noise, but slower response.
|
||||
A value of 0 disables the filter.
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | 0.0 | 5.0 | | 0.0 | s |
|
||||
|
||||
### BAT2_I_OVERWRITE (`FLOAT`) {#BAT2_I_OVERWRITE}
|
||||
|
||||
Battery 2 idle current overwrite.
|
||||
@@ -15702,6 +15898,18 @@ it drops off to a voltage level damaging the cells.
|
||||
| ------- | -------- | -------- | --------- | ------- | ---- |
|
||||
| ✓ | | | 0.01 | 3.6 | V |
|
||||
|
||||
### BAT2_V_FILT (`FLOAT`) {#BAT2_V_FILT}
|
||||
|
||||
Battery 2 voltage filter time constant.
|
||||
|
||||
Low-pass filter time constant for the battery voltage ADC reading (in seconds).
|
||||
A higher value results in more smoothing and less noise, but slower response.
|
||||
A value of 0 disables the filter.
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | 0.0 | 5.0 | | 0.0 | s |
|
||||
|
||||
### BAT3_CAPACITY (`FLOAT`) {#BAT3_CAPACITY}
|
||||
|
||||
Battery 3 capacity.
|
||||
@@ -16365,6 +16573,25 @@ Arm switch is a momentary button.
|
||||
| ------ | -------- | -------- | --------- | ------------ | ---- |
|
||||
| | | | | Disabled (0) |
|
||||
|
||||
### COM_ARM_TRAFF (`INT32`) {#COM_ARM_TRAFF}
|
||||
|
||||
Enable Traffic Avoidance system detection check.
|
||||
|
||||
This check detects if a traffic avoidance system (ADSB/FLARM transponder)
|
||||
is missing. Depending on the value of the parameter, the check can be
|
||||
disabled, warn only, or deny arming.
|
||||
|
||||
**Values:**
|
||||
|
||||
- `0`: Disabled
|
||||
- `1`: Warning only
|
||||
- `2`: Enforce for all modes
|
||||
- `3`: Enforce for mission modes only
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | | | | 0 |
|
||||
|
||||
### COM_ARM_WO_GPS (`INT32`) {#COM_ARM_WO_GPS}
|
||||
|
||||
Arming without GNSS configuration.
|
||||
@@ -24563,18 +24790,6 @@ Maximum allowed norm of the angular velocity (roll, pitch) in the landed state.
|
||||
| ------ | -------- | -------- | --------- | ------- | ----- |
|
||||
| | | | | 20.0 | deg/s |
|
||||
|
||||
### LNDMC_TRIG_TIME (`FLOAT`) {#LNDMC_TRIG_TIME}
|
||||
|
||||
Multicopter land detection trigger time.
|
||||
|
||||
Total time it takes to go through all three land detection stages:
|
||||
ground contact, maybe landed, landed
|
||||
when all necessary conditions are constantly met.
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | 0.1 | 10.0 | | 1.0 | s |
|
||||
|
||||
### LNDMC_XY_VEL_MAX (`FLOAT`) {#LNDMC_XY_VEL_MAX}
|
||||
|
||||
Multicopter max horizontal velocity.
|
||||
@@ -26925,7 +27140,7 @@ With MPC_THR_HOVER 0.5 it's equivalent to No rescale.
|
||||
Vertical thrust required to hover.
|
||||
|
||||
Mapped to center throttle stick in Stabilized mode (see MPC_THR_CURVE).
|
||||
Used for initialization of the hover thrust estimator (see MPC_USE_HTE).
|
||||
Used for initialization of the hover thrust estimator.
|
||||
The estimated hover thrust is used as base for zero vertical acceleration in altitude control.
|
||||
The hover thrust is important for land detection to work correctly.
|
||||
|
||||
@@ -27007,17 +27222,6 @@ Takeoff climb rate.
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | 1 | 5 | | 1.5 | m/s |
|
||||
|
||||
### MPC_USE_HTE (`INT32`) {#MPC_USE_HTE}
|
||||
|
||||
Use hover thrust estimate for altitude control.
|
||||
|
||||
Disable to use the fixed parameter MPC_THR_HOVER instead of the hover thrust estimate in the position controller.
|
||||
This parameter does not influence Stabilized mode throttle curve (see MPC_THR_CURVE).
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ----------- | ---- |
|
||||
| | | | | Enabled (1) |
|
||||
|
||||
### MPC_VELD_LP (`FLOAT`) {#MPC_VELD_LP}
|
||||
|
||||
Velocity derivative low pass cutoff frequency.
|
||||
|
||||
@@ -361,6 +361,10 @@ The mode is set using the [EKF2_GPS_MODE](../advanced_config/parameter_reference
|
||||
EKF2 may reset if no other sources of position or velocity are available.
|
||||
If GNSS altitude OR horizontal position data drifts, the system disables fusion of both measurements simultaneously (even if one would still pass validation) and avoids performing resets.
|
||||
|
||||
::: tip
|
||||
See also [Fault Detection](https://youtu.be/CMGQJNPiTJg?si=sFtdf4AQbcOH8-u8) in "Fuse, Reset, or Reject? Handling Various Data-sources in EKF2" _PX4 Developer Summit 2025_, Marco Hauswirth, Auterion AG
|
||||
:::
|
||||
|
||||
##### Detection Logic
|
||||
|
||||
Horizontal Position:
|
||||
@@ -892,3 +896,4 @@ If no terrain estimate is available this parameter will have no effect and the s
|
||||
## Further Information
|
||||
|
||||
- [PX4 State Estimation Overview](https://youtu.be/HkYRJJoyBwQ), _PX4 Developer Summit 2019_, Dr. Paul Riseborough): Overview of the estimator, and major changes from 2018/19, and the expected improvements through 2019/20.
|
||||
- [Fuse, Reset, or Reject? Handling Various Data-sources in EKF2](https://www.youtube.com/watch?v=CMGQJNPiTJg) - _PX4 Developer Summit 2025_, Marco Hauswirth, Auterion AG
|
||||
|
||||
@@ -1,111 +1,119 @@
|
||||
# macOS Development Environment
|
||||
|
||||
The following instructions set up a PX4 development environment for macOS.
|
||||
The following instructions set up a PX4 development environment on macOS.
|
||||
This environment can be used to build PX4 for:
|
||||
|
||||
- Pixhawk and other NuttX-based hardware
|
||||
- [Gazebo Classic Simulation](../sim_gazebo_classic/index.md)
|
||||
- [Gazebo Simulation](../sim_gazebo_gz/index.md) (Gazebo Harmonic)
|
||||
|
||||
It works on both Intel and Apple Silicon Macs.
|
||||
|
||||
:::tip
|
||||
This setup is supported by the PX4 dev team.
|
||||
To build other targets you will need to use a [different OS](../dev_setup/dev_env.md#supported-targets) (or an [unsupported development environment](../advanced/community_supported_dev_env.md)).
|
||||
To build for [other targets](../dev_setup/dev_env.md#supported-targets) you will need to use a [different OS](../dev_setup/dev_env.md#supported-targets) or an [unsupported development environment](../advanced/community_supported_dev_env.md).
|
||||
:::
|
||||
|
||||
## Video Guide
|
||||
## Development Environment Setup
|
||||
|
||||
<lite-youtube videoid="tMbMGiMs1cQ" title="Setting up your PX4 development environment on macOS"/>
|
||||
### Prerequisites
|
||||
|
||||
## Base Setup
|
||||
|
||||
The "base" macOS setup installs the tools needed for building firmware, and includes the common tools that will be needed for installing/using the simulators.
|
||||
|
||||
### Environment Setup
|
||||
|
||||
:::details Apple Silicon MacBook users!
|
||||
If you have an Apple M1, M2 etc. MacBook, make sure to run the terminal as x86 by setting up an x86 terminal:
|
||||
|
||||
1. Locate the Terminal application within the Utilities folder (**Finder > Go menu > Utilities**)
|
||||
2. Select _Terminal.app_ and right-click on it, then choose **Duplicate**.
|
||||
3. Rename the duplicated Terminal app, e.g. to _x86 Terminal_
|
||||
4. Now select the renamed _x86 Terminal_ app and right-click and choose \*_Get Info_
|
||||
5. Check the box for **Open using Rosetta**, then close the window
|
||||
6. Run the _x86 Terminal_ as usual, which will fully support the current PX4 toolchain
|
||||
:::
|
||||
|
||||
First set up the environment
|
||||
|
||||
1. Enable more open files by appending the following line to the `~/.zshenv` file (creating it if necessary):
|
||||
1. **Install Xcode Command Line Tools** — provides `git`, `make`, and the Apple `clang` compiler:
|
||||
|
||||
```sh
|
||||
echo ulimit -S -n 2048 >> ~/.zshenv
|
||||
xcode-select --install
|
||||
```
|
||||
|
||||
2. **Install Homebrew** by following the [installation instructions](https://brew.sh).
|
||||
|
||||
3. **Increase the open-file limit.** The PX4 build opens many files simultaneously and the macOS default limit (256) is too low — you may see `"LD: too many open files"` errors without this.
|
||||
|
||||
Add the following line to your shell startup file so it applies to every new terminal session.
|
||||
macOS defaults to **zsh** since Catalina, so add it to `~/.zshrc` (use `~/.bashrc` if you use bash):
|
||||
|
||||
```sh
|
||||
echo "ulimit -S -n 2048" >> ~/.zshrc
|
||||
```
|
||||
|
||||
Then **open a new terminal** (or run `source ~/.zshrc`) for the change to take effect.
|
||||
|
||||
4. **Ensure Python 3 is available.** Some PX4 build scripts require `python3` and `pip3` to be in your `PATH`. The Xcode Command Line Tools include Python 3 by default.
|
||||
|
||||
:::tip
|
||||
If you need to install or manage a different Python version, we recommend [pyenv](https://github.com/pyenv/pyenv), which lets you set global and per-directory Python versions.
|
||||
:::
|
||||
|
||||
### Install Development Tools
|
||||
|
||||
1. **Download PX4 Source Code:**
|
||||
|
||||
```sh
|
||||
git clone https://github.com/PX4/PX4-Autopilot.git
|
||||
cd PX4-Autopilot
|
||||
git submodule update --init --recursive --force
|
||||
```
|
||||
|
||||
2. **Install development environment libraries** from the [macos.sh](https://github.com/PX4/PX4-Autopilot/blob/main/Tools/setup/macos.sh) helper script:
|
||||
|
||||
```sh
|
||||
./Tools/setup/macos.sh --sim-tools
|
||||
```
|
||||
|
||||
This installs:
|
||||
- **`px4-dev`** — ARM cross-compiler (`arm-gcc-bin@13`), `cmake`, `ninja`, `ccache`, and other build tools
|
||||
- **Python packages** from `requirements.txt`
|
||||
- **`px4-sim`** (via `--sim-tools`) — Gazebo Harmonic simulation (`gz-harmonic`) and related tools
|
||||
|
||||
::: info
|
||||
If you don't do this, the build toolchain may report the error: `"LD: too many open files"`
|
||||
Omit `--sim-tools` if you only need to build for NuttX hardware and don't need simulation.
|
||||
|
||||
Use `--reinstall` to force reinstallation of all Homebrew formulas (useful if something is broken).
|
||||
:::
|
||||
|
||||
1. Enforce Python 3 by appending the following lines to `~/.zshenv`
|
||||
### Gazebo Simulation
|
||||
|
||||
```sh
|
||||
# Point pip3 to macOS system python 3 pip
|
||||
alias pip3=/usr/bin/pip3
|
||||
```
|
||||
The `--sim-tools` flag installs the `px4-sim` Homebrew formula, which pulls in Gazebo Harmonic.
|
||||
|
||||
### Common Tools
|
||||
If you skipped `--sim-tools` during initial setup and want to add simulation later:
|
||||
|
||||
To setup the environment to be able to build for Pixhawk/NuttX hardware (and install the common tools for using simulators):
|
||||
```sh
|
||||
brew tap PX4/px4
|
||||
brew install px4-sim
|
||||
```
|
||||
|
||||
1. Install Homebrew by following these [installation instructions](https://brew.sh).
|
||||
1. Run these commands in your shell to install the common tools:
|
||||
::: info
|
||||
Gazebo requires **XQuartz** for display on macOS.
|
||||
If you don't already have it installed:
|
||||
|
||||
```sh
|
||||
brew tap PX4/px4
|
||||
brew install px4-dev
|
||||
```
|
||||
```sh
|
||||
brew install --cask xquartz
|
||||
```
|
||||
|
||||
1. Install the required Python packages:
|
||||
You may need to log out and back in after installing XQuartz.
|
||||
:::
|
||||
|
||||
```sh
|
||||
# install required packages using pip3
|
||||
python3 -m pip install --user pyserial empty toml numpy pandas jinja2 pyyaml pyros-genmsg packaging kconfiglib future jsonschema
|
||||
# if this fails with a permissions error, your Python install is in a system path - use this command instead:
|
||||
sudo -H python3 -m pip install --user pyserial empty toml numpy pandas jinja2 pyyaml pyros-genmsg packaging kconfiglib future jsonschema
|
||||
```
|
||||
### Verify Installation
|
||||
|
||||
## Gazebo Classic Simulation
|
||||
After installation, verify the key tools are available:
|
||||
|
||||
To setup the environment for [Gazebo Classic](../sim_gazebo_classic/index.md) simulation:
|
||||
```sh
|
||||
# NuttX cross-compiler (from arm-gcc-bin@13)
|
||||
arm-none-eabi-gcc --version
|
||||
|
||||
1. Run the following commands in your shell:
|
||||
# Build tools
|
||||
cmake --version
|
||||
ninja --version
|
||||
|
||||
```sh
|
||||
brew unlink tbb
|
||||
sed -i.bak '/disable! date:/s/^/ /; /disable! date:/s/./#/3' $(brew --prefix)/Library/Taps/homebrew/homebrew-core/Formula/tbb@2020.rb
|
||||
brew install tbb@2020
|
||||
brew link tbb@2020
|
||||
```
|
||||
# Gazebo (if --sim-tools was used)
|
||||
gz sim --versions
|
||||
```
|
||||
|
||||
::: info
|
||||
September 2021: The commands above are a workaround to this bug: [PX4-Autopilot#17644](https://github.com/PX4/PX4-Autopilot/issues/17644).
|
||||
They can be removed once it is fixed (along with this note).
|
||||
:::
|
||||
Quick smoke test — build and run a simulation target:
|
||||
|
||||
1. To install SITL simulation with Gazebo Classic:
|
||||
```sh
|
||||
make px4_sitl gz_x500
|
||||
```
|
||||
|
||||
```sh
|
||||
brew install --cask temurin
|
||||
brew install --cask xquartz
|
||||
brew install px4-sim-gazebo
|
||||
```
|
||||
|
||||
1. Run the macOS setup script: `PX4-Autopilot/Tools/setup/macos.sh`
|
||||
The easiest way to do this is to clone the PX4 source, and then run the script from the directory, as shown:
|
||||
|
||||
```sh
|
||||
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
|
||||
cd PX4-Autopilot/Tools/setup
|
||||
sh macos.sh
|
||||
```
|
||||
If everything is set up correctly, this will build PX4 SITL and launch a Gazebo simulation with the x500 quadcopter.
|
||||
|
||||
## Next Steps
|
||||
|
||||
@@ -114,7 +122,7 @@ Once you have finished setting up the command-line toolchain:
|
||||
- Install [VSCode](../dev_setup/vscode.md) (if you prefer using an IDE to the command line).
|
||||
- Install the [QGroundControl Daily Build](../dev_setup/qgc_daily_build.md)
|
||||
|
||||
:::tip
|
||||
::: tip
|
||||
The _daily build_ includes development tools that are hidden in release builds.
|
||||
It may also provide access to new PX4 features that are not yet supported in release builds.
|
||||
:::
|
||||
|
||||
@@ -126,7 +126,11 @@ The following parameters also affect preflight checks.
|
||||
|
||||
#### COM_ARM_WO_GPS
|
||||
|
||||
The [COM_ARM_WO_GPS](../advanced_config/parameter_reference.md#COM_ARM_WO_GPS) parameter controls whether or not arming is allowed without a global position estimate.
|
||||
The [COM_ARM_WO_GPS](../advanced_config/parameter_reference.md#COM_ARM_WO_GPS) parameter controls whether or not arming is allowed in modes that require a valid global position estimate when EKF2 GNSS quality checks are failing.
|
||||
|
||||
- `1` (default): Arming _is_ allowed without a position estimate for flight modes that do not require position information (only).
|
||||
- `0`: Arming is allowed only if EKF is providing a global position estimate and EFK GPS quality checks are passing
|
||||
The values are:
|
||||
|
||||
- `0`: Deny arming.
|
||||
- `1`: Arming allowed with warning (default).
|
||||
This might be used to provide a warning that the GNSS is unhealthy even when there is another source of valid position estimate, such as VIO or optical flow.
|
||||
- `2`: Arming allowed without warnings.
|
||||
|
||||
+185
-184
@@ -94,199 +94,200 @@ They are not build into the module, and hence are neither published or subscribe
|
||||
|
||||
::: details See messages
|
||||
|
||||
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
|
||||
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
|
||||
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
|
||||
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
|
||||
- [EventV0](../msg_docs/EventV0.md)
|
||||
- [EscStatus](../msg_docs/EscStatus.md)
|
||||
- [VehicleAirData](../msg_docs/VehicleAirData.md)
|
||||
- [GpsDump](../msg_docs/GpsDump.md)
|
||||
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
|
||||
- [DebugValue](../msg_docs/DebugValue.md)
|
||||
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
|
||||
- [CameraStatus](../msg_docs/CameraStatus.md)
|
||||
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
|
||||
- [CameraCapture](../msg_docs/CameraCapture.md)
|
||||
- [GimbalControls](../msg_docs/GimbalControls.md)
|
||||
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
|
||||
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
|
||||
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
|
||||
- [FollowTarget](../msg_docs/FollowTarget.md)
|
||||
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
|
||||
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
|
||||
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
|
||||
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
|
||||
- [CameraTrigger](../msg_docs/CameraTrigger.md)
|
||||
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
|
||||
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
|
||||
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
|
||||
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
|
||||
- [SensorUwb](../msg_docs/SensorUwb.md)
|
||||
- [MountOrientation](../msg_docs/MountOrientation.md)
|
||||
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
|
||||
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
|
||||
- [GpioOut](../msg_docs/GpioOut.md)
|
||||
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
|
||||
- [Airspeed](../msg_docs/Airspeed.md)
|
||||
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
|
||||
- [RaptorStatus](../msg_docs/RaptorStatus.md)
|
||||
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
|
||||
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
|
||||
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
|
||||
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
|
||||
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
|
||||
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
|
||||
- [OrbTest](../msg_docs/OrbTest.md)
|
||||
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
|
||||
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
|
||||
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
|
||||
- [MissionResult](../msg_docs/MissionResult.md)
|
||||
- [QshellRetval](../msg_docs/QshellRetval.md)
|
||||
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
|
||||
- [BatteryInfo](../msg_docs/BatteryInfo.md)
|
||||
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
|
||||
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
|
||||
- [PwmInput](../msg_docs/PwmInput.md)
|
||||
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
|
||||
- [DatamanRequest](../msg_docs/DatamanRequest.md)
|
||||
- [InputRc](../msg_docs/InputRc.md)
|
||||
- [DatamanResponse](../msg_docs/DatamanResponse.md)
|
||||
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
|
||||
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
|
||||
- [SensorGyro](../msg_docs/SensorGyro.md)
|
||||
- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
|
||||
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
|
||||
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
|
||||
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
|
||||
- [SensorBaro](../msg_docs/SensorBaro.md)
|
||||
- [CellularStatus](../msg_docs/CellularStatus.md)
|
||||
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
|
||||
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
|
||||
- [UlogStream](../msg_docs/UlogStream.md)
|
||||
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
|
||||
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
|
||||
- [RadioStatus](../msg_docs/RadioStatus.md)
|
||||
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
|
||||
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
|
||||
- [AdcReport](../msg_docs/AdcReport.md)
|
||||
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
|
||||
- [TuneControl](../msg_docs/TuneControl.md)
|
||||
- [PpsCapture](../msg_docs/PpsCapture.md)
|
||||
- [Cpuload](../msg_docs/Cpuload.md)
|
||||
- [GeofenceResult](../msg_docs/GeofenceResult.md)
|
||||
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
|
||||
- [NeuralControl](../msg_docs/NeuralControl.md)
|
||||
- [EstimatorStates](../msg_docs/EstimatorStates.md)
|
||||
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
|
||||
- [MagWorkerData](../msg_docs/MagWorkerData.md)
|
||||
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
|
||||
- [EstimatorBias](../msg_docs/EstimatorBias.md)
|
||||
- [DebugArray](../msg_docs/DebugArray.md)
|
||||
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
|
||||
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
|
||||
- [RtlStatus](../msg_docs/RtlStatus.md)
|
||||
- [SensorMag](../msg_docs/SensorMag.md)
|
||||
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
|
||||
- [HomePositionV0](../msg_docs/HomePositionV0.md)
|
||||
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
|
||||
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
|
||||
- [Rpm](../msg_docs/Rpm.md)
|
||||
- [GpioRequest](../msg_docs/GpioRequest.md)
|
||||
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
|
||||
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
|
||||
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
|
||||
- [IrlockReport](../msg_docs/IrlockReport.md)
|
||||
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
|
||||
- [QshellReq](../msg_docs/QshellReq.md)
|
||||
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
|
||||
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
|
||||
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
|
||||
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
|
||||
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
|
||||
- [PowerButtonState](../msg_docs/PowerButtonState.md)
|
||||
- [Mission](../msg_docs/Mission.md)
|
||||
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
|
||||
- [Ping](../msg_docs/Ping.md)
|
||||
- [LogMessage](../msg_docs/LogMessage.md)
|
||||
- [HealthReport](../msg_docs/HealthReport.md)
|
||||
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
|
||||
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
|
||||
- [ActuatorTest](../msg_docs/ActuatorTest.md)
|
||||
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
|
||||
- [Event](../msg_docs/Event.md)
|
||||
- [LedControl](../msg_docs/LedControl.md)
|
||||
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
|
||||
- [GpioIn](../msg_docs/GpioIn.md)
|
||||
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
|
||||
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
|
||||
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
|
||||
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
|
||||
- [PowerMonitor](../msg_docs/PowerMonitor.md)
|
||||
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
|
||||
- [TecsStatus](../msg_docs/TecsStatus.md)
|
||||
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
|
||||
- [LoggerStatus](../msg_docs/LoggerStatus.md)
|
||||
- [WheelEncoders](../msg_docs/WheelEncoders.md)
|
||||
- [RaptorInput](../msg_docs/RaptorInput.md)
|
||||
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
|
||||
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
|
||||
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
|
||||
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
|
||||
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
|
||||
- [SensorsStatus](../msg_docs/SensorsStatus.md)
|
||||
- [DebugVect](../msg_docs/DebugVect.md)
|
||||
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
|
||||
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
|
||||
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
|
||||
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
|
||||
- [VehicleRoi](../msg_docs/VehicleRoi.md)
|
||||
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
|
||||
- [ActionRequest](../msg_docs/ActionRequest.md)
|
||||
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
|
||||
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
|
||||
- [EscReport](../msg_docs/EscReport.md)
|
||||
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
|
||||
- [GpioConfig](../msg_docs/GpioConfig.md)
|
||||
- [RcParameterMap](../msg_docs/RcParameterMap.md)
|
||||
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
|
||||
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
|
||||
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
|
||||
- [PwmInput](../msg_docs/PwmInput.md)
|
||||
- [SensorTemp](../msg_docs/SensorTemp.md)
|
||||
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
|
||||
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
|
||||
- [RcChannels](../msg_docs/RcChannels.md)
|
||||
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
|
||||
- [MountOrientation](../msg_docs/MountOrientation.md)
|
||||
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
|
||||
- [SensorAccel](../msg_docs/SensorAccel.md)
|
||||
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
|
||||
- [GainCompression](../msg_docs/GainCompression.md)
|
||||
- [GpsInjectData](../msg_docs/GpsInjectData.md)
|
||||
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
|
||||
- [Gripper](../msg_docs/Gripper.md)
|
||||
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
|
||||
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
|
||||
- [DatamanRequest](../msg_docs/DatamanRequest.md)
|
||||
- [AirspeedWind](../msg_docs/AirspeedWind.md)
|
||||
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
|
||||
- [VelocityLimits](../msg_docs/VelocityLimits.md)
|
||||
- [Vtx](../msg_docs/Vtx.md)
|
||||
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
|
||||
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
|
||||
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
|
||||
- [VehicleImu](../msg_docs/VehicleImu.md)
|
||||
- [SensorAirflow](../msg_docs/SensorAirflow.md)
|
||||
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
|
||||
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
|
||||
- [PowerMonitor](../msg_docs/PowerMonitor.md)
|
||||
- [Mission](../msg_docs/Mission.md)
|
||||
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
|
||||
- [AdcReport](../msg_docs/AdcReport.md)
|
||||
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
|
||||
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
|
||||
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
|
||||
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
|
||||
- [MagWorkerData](../msg_docs/MagWorkerData.md)
|
||||
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
|
||||
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
|
||||
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
|
||||
- [BatteryInfo](../msg_docs/BatteryInfo.md)
|
||||
- [Event](../msg_docs/Event.md)
|
||||
- [DeviceInformation](../msg_docs/DeviceInformation.md)
|
||||
- [LoggerStatus](../msg_docs/LoggerStatus.md)
|
||||
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
|
||||
- [CameraTrigger](../msg_docs/CameraTrigger.md)
|
||||
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
|
||||
- [DebugValue](../msg_docs/DebugValue.md)
|
||||
- [GpioOut](../msg_docs/GpioOut.md)
|
||||
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
|
||||
- [SensorBaro](../msg_docs/SensorBaro.md)
|
||||
- [Rpm](../msg_docs/Rpm.md)
|
||||
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
|
||||
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
|
||||
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
|
||||
- [LogMessage](../msg_docs/LogMessage.md)
|
||||
- [EventV0](../msg_docs/EventV0.md)
|
||||
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
|
||||
- [FollowTarget](../msg_docs/FollowTarget.md)
|
||||
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
|
||||
- [OrbTest](../msg_docs/OrbTest.md)
|
||||
- [OrbitStatus](../msg_docs/OrbitStatus.md)
|
||||
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
|
||||
- [ButtonEvent](../msg_docs/ButtonEvent.md)
|
||||
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
|
||||
- [IrlockReport](../msg_docs/IrlockReport.md)
|
||||
- [Cpuload](../msg_docs/Cpuload.md)
|
||||
- [VehicleAirData](../msg_docs/VehicleAirData.md)
|
||||
- [NeuralControl](../msg_docs/NeuralControl.md)
|
||||
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
|
||||
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
|
||||
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
|
||||
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
|
||||
- [Ping](../msg_docs/Ping.md)
|
||||
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
|
||||
- [CameraCapture](../msg_docs/CameraCapture.md)
|
||||
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
|
||||
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
|
||||
- [QshellReq](../msg_docs/QshellReq.md)
|
||||
- [GainCompression](../msg_docs/GainCompression.md)
|
||||
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
|
||||
- [PowerButtonState](../msg_docs/PowerButtonState.md)
|
||||
- [RcParameterMap](../msg_docs/RcParameterMap.md)
|
||||
- [RadioStatus](../msg_docs/RadioStatus.md)
|
||||
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
|
||||
- [RtlStatus](../msg_docs/RtlStatus.md)
|
||||
- [GpsDump](../msg_docs/GpsDump.md)
|
||||
- [UlogStream](../msg_docs/UlogStream.md)
|
||||
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
|
||||
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
|
||||
- [SensorGyro](../msg_docs/SensorGyro.md)
|
||||
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
|
||||
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
|
||||
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
|
||||
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
|
||||
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
|
||||
- [MavlinkLog](../msg_docs/MavlinkLog.md)
|
||||
- [SensorTemp](../msg_docs/SensorTemp.md)
|
||||
- [HealthReport](../msg_docs/HealthReport.md)
|
||||
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
|
||||
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
|
||||
- [DeviceInformation](../msg_docs/DeviceInformation.md)
|
||||
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
|
||||
- [SensorCorrection](../msg_docs/SensorCorrection.md)
|
||||
- [SystemPower](../msg_docs/SystemPower.md)
|
||||
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
|
||||
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
|
||||
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
|
||||
- [RcChannels](../msg_docs/RcChannels.md)
|
||||
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
|
||||
- [VelocityLimits](../msg_docs/VelocityLimits.md)
|
||||
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
|
||||
- [SensorSelection](../msg_docs/SensorSelection.md)
|
||||
- [AirspeedWind](../msg_docs/AirspeedWind.md)
|
||||
- [ActionRequest](../msg_docs/ActionRequest.md)
|
||||
- [EscStatus](../msg_docs/EscStatus.md)
|
||||
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
|
||||
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
|
||||
- [EscReport](../msg_docs/EscReport.md)
|
||||
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
|
||||
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
|
||||
- [VehicleRoi](../msg_docs/VehicleRoi.md)
|
||||
- [EstimatorStates](../msg_docs/EstimatorStates.md)
|
||||
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
|
||||
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
|
||||
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
|
||||
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
|
||||
- [HomePositionV0](../msg_docs/HomePositionV0.md)
|
||||
- [Gripper](../msg_docs/Gripper.md)
|
||||
- [PpsCapture](../msg_docs/PpsCapture.md)
|
||||
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
|
||||
- [EstimatorBias](../msg_docs/EstimatorBias.md)
|
||||
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
|
||||
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
|
||||
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
|
||||
- [InputRc](../msg_docs/InputRc.md)
|
||||
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
|
||||
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
|
||||
- [HeaterStatus](../msg_docs/HeaterStatus.md)
|
||||
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
|
||||
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
|
||||
- [RaptorStatus](../msg_docs/RaptorStatus.md)
|
||||
- [TecsStatus](../msg_docs/TecsStatus.md)
|
||||
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
|
||||
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
|
||||
- [GpioIn](../msg_docs/GpioIn.md)
|
||||
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
|
||||
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
|
||||
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
|
||||
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
|
||||
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
|
||||
- [SensorMag](../msg_docs/SensorMag.md)
|
||||
- [DatamanResponse](../msg_docs/DatamanResponse.md)
|
||||
- [DebugVect](../msg_docs/DebugVect.md)
|
||||
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
|
||||
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
|
||||
- [MissionResult](../msg_docs/MissionResult.md)
|
||||
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
|
||||
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
|
||||
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
|
||||
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
|
||||
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
|
||||
- [SensorUwb](../msg_docs/SensorUwb.md)
|
||||
- [RaptorInput](../msg_docs/RaptorInput.md)
|
||||
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
|
||||
- [MavlinkLog](../msg_docs/MavlinkLog.md)
|
||||
- [GpioRequest](../msg_docs/GpioRequest.md)
|
||||
- [SensorSelection](../msg_docs/SensorSelection.md)
|
||||
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
|
||||
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
|
||||
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
|
||||
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
|
||||
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
|
||||
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
|
||||
- [ActuatorTest](../msg_docs/ActuatorTest.md)
|
||||
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
|
||||
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
|
||||
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
|
||||
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
|
||||
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
|
||||
- [QshellRetval](../msg_docs/QshellRetval.md)
|
||||
- [SensorAirflow](../msg_docs/SensorAirflow.md)
|
||||
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
|
||||
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
|
||||
- [ButtonEvent](../msg_docs/ButtonEvent.md)
|
||||
- [LedControl](../msg_docs/LedControl.md)
|
||||
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
|
||||
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
|
||||
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
|
||||
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
|
||||
- [VehicleImu](../msg_docs/VehicleImu.md)
|
||||
- [CellularStatus](../msg_docs/CellularStatus.md)
|
||||
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
|
||||
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
|
||||
- [WheelEncoders](../msg_docs/WheelEncoders.md)
|
||||
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
|
||||
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
|
||||
- [SystemPower](../msg_docs/SystemPower.md)
|
||||
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
|
||||
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
|
||||
- [SensorCorrection](../msg_docs/SensorCorrection.md)
|
||||
- [Airspeed](../msg_docs/Airspeed.md)
|
||||
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
|
||||
- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
|
||||
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
|
||||
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
|
||||
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
|
||||
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
|
||||
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
|
||||
- [TuneControl](../msg_docs/TuneControl.md)
|
||||
- [GeofenceResult](../msg_docs/GeofenceResult.md)
|
||||
- [GimbalControls](../msg_docs/GimbalControls.md)
|
||||
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
|
||||
- [SensorsStatus](../msg_docs/SensorsStatus.md)
|
||||
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
|
||||
- [GpsInjectData](../msg_docs/GpsInjectData.md)
|
||||
- [CameraStatus](../msg_docs/CameraStatus.md)
|
||||
- [DebugArray](../msg_docs/DebugArray.md)
|
||||
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
|
||||
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
|
||||
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
|
||||
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
|
||||
:::
|
||||
|
||||
@@ -17,8 +17,7 @@ as well as tracking of the used firmware versions on the devices.
|
||||
| ---------------- | ---------- | ------------ | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
|
||||
| timestamp | `uint64` | | | time since system start (microseconds) |
|
||||
| device_type | `uint8` | | [DEVICE_TYPE](#DEVICE_TYPE) | Type of the device. Matches MAVLink DEVICE_TYPE enum |
|
||||
| vendor_name | `char[32]` | | | Name of the device vendor |
|
||||
| model_name | `char[32]` | | | Name of the device model |
|
||||
| name | `char[80]` | | | Name of device e.g. DroneCAN node name |
|
||||
| `uint32` | | | Unique device ID for the sensor. Does not change between power cycles. (Invalid: 0 if not available) |
|
||||
| firmware_version | `char[24]` | | | Firmware version. (Invalid: empty if not available) |
|
||||
| hardware_version | `char[24]` | | | Hardware version. (Invalid: empty if not available) |
|
||||
@@ -62,7 +61,6 @@ as well as tracking of the used firmware versions on the devices.
|
||||
uint64 timestamp # time since system start (microseconds)
|
||||
|
||||
uint8 device_type # [@enum DEVICE_TYPE] Type of the device. Matches MAVLink DEVICE_TYPE enum
|
||||
|
||||
uint8 DEVICE_TYPE_GENERIC = 0 # Generic/unknown sensor
|
||||
uint8 DEVICE_TYPE_AIRSPEED = 1 # Airspeed sensor
|
||||
uint8 DEVICE_TYPE_ESC = 2 # ESC
|
||||
@@ -80,8 +78,7 @@ uint8 DEVICE_TYPE_DIFFERENTIAL_PRESSURE = 13 # Differential pressure
|
||||
uint8 DEVICE_TYPE_BATTERY = 14 # Battery
|
||||
uint8 DEVICE_TYPE_HYGROMETER = 15 # Hygrometer
|
||||
|
||||
char[32] vendor_name # Name of the device vendor
|
||||
char[32] model_name # Name of the device model
|
||||
char[80] name # Name of device e.g. DroneCAN node name
|
||||
|
||||
uint32 device_id # [-] [@invalid 0 if not available] Unique device ID for the sensor. Does not change between power cycles.
|
||||
char[24] firmware_version # [-] [@invalid empty if not available] Firmware version.
|
||||
|
||||
@@ -16,6 +16,7 @@ pageClass: is-wide-page
|
||||
| esc_voltage | `float32` | | | Voltage measured from current ESC [V] - if supported |
|
||||
| esc_current | `float32` | | | Current measured from current ESC [A] - if supported |
|
||||
| esc_temperature | `float32` | | | Temperature measured from current ESC [degC] - if supported |
|
||||
| motor_temperature | `int16` | | | Temperature measured from current motor [degC] - if supported |
|
||||
| esc_address | `uint8` | | | Address of current ESC (in most cases 1-8 / must be set by driver) |
|
||||
| esc_cmdcount | `uint8` | | | Counter of number of commands |
|
||||
| esc_state | `uint8` | | | State of ESC - depend on Vendor |
|
||||
@@ -64,6 +65,7 @@ int32 esc_rpm # Motor RPM, negative for reverse rotation [RPM] - if support
|
||||
float32 esc_voltage # Voltage measured from current ESC [V] - if supported
|
||||
float32 esc_current # Current measured from current ESC [A] - if supported
|
||||
float32 esc_temperature # Temperature measured from current ESC [degC] - if supported
|
||||
int16 motor_temperature # Temperature measured from current motor [degC] - if supported
|
||||
uint8 esc_address # Address of current ESC (in most cases 1-8 / must be set by driver)
|
||||
uint8 esc_cmdcount # Counter of number of commands
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ pageClass: is-wide-page
|
||||
| heartbeat_type_onboard_controller | `bool` | | | MAV_TYPE_ONBOARD_CONTROLLER |
|
||||
| heartbeat_type_gimbal | `bool` | | | MAV_TYPE_GIMBAL |
|
||||
| heartbeat_type_adsb | `bool` | | | MAV_TYPE_ADSB |
|
||||
| heartbeat_type_flarm | `bool` | | | MAV_TYPE_FLARM |
|
||||
| heartbeat_type_camera | `bool` | | | MAV_TYPE_CAMERA |
|
||||
| heartbeat_type_parachute | `bool` | | | MAV_TYPE_PARACHUTE |
|
||||
| heartbeat_type_open_drone_id | `bool` | | | MAV_TYPE_ODID |
|
||||
@@ -112,6 +113,7 @@ bool heartbeat_type_gcs # MAV_TYPE_GCS
|
||||
bool heartbeat_type_onboard_controller # MAV_TYPE_ONBOARD_CONTROLLER
|
||||
bool heartbeat_type_gimbal # MAV_TYPE_GIMBAL
|
||||
bool heartbeat_type_adsb # MAV_TYPE_ADSB
|
||||
bool heartbeat_type_flarm # MAV_TYPE_FLARM
|
||||
bool heartbeat_type_camera # MAV_TYPE_CAMERA
|
||||
bool heartbeat_type_parachute # MAV_TYPE_PARACHUTE
|
||||
bool heartbeat_type_open_drone_id # MAV_TYPE_ODID
|
||||
|
||||
@@ -10,53 +10,55 @@ Encodes the system state of the vehicle published by commander.
|
||||
|
||||
## Fields
|
||||
|
||||
| Name | Type | Unit [Frame] | Range/Enum | Description |
|
||||
| ---------------------------- | -------- | ------------ | ---------- | ----------------------------------------------------------------------------------------------- |
|
||||
| timestamp | `uint64` | | | time since system start (microseconds) |
|
||||
| armed_time | `uint64` | | | Arming timestamp (microseconds) |
|
||||
| takeoff_time | `uint64` | | | Takeoff timestamp (microseconds) |
|
||||
| arming_state | `uint8` | | |
|
||||
| latest_arming_reason | `uint8` | | |
|
||||
| latest_disarming_reason | `uint8` | | |
|
||||
| nav_state_timestamp | `uint64` | | | time when current nav_state activated |
|
||||
| nav_state_user_intention | `uint8` | | | Mode that the user selected (might be different from nav_state in a failsafe situation) |
|
||||
| nav_state | `uint8` | | | Currently active mode |
|
||||
| executor_in_charge | `uint8` | | | Current mode executor in charge (0=Autopilot) |
|
||||
| valid_nav_states_mask | `uint32` | | | Bitmask for all valid nav_state values |
|
||||
| can_set_nav_states_mask | `uint32` | | | Bitmask for all modes that a user can select |
|
||||
| failure_detector_status | `uint16` | | |
|
||||
| hil_state | `uint8` | | |
|
||||
| vehicle_type | `uint8` | | |
|
||||
| failsafe | `bool` | | | true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) |
|
||||
| failsafe_and_user_took_over | `bool` | | | true if system is in failsafe state but the user took over control |
|
||||
| failsafe_defer_state | `uint8` | | | one of FAILSAFE*DEFER_STATE*\* |
|
||||
| gcs_connection_lost | `bool` | | | datalink to GCS lost |
|
||||
| gcs_connection_lost_counter | `uint8` | | | counts unique GCS connection lost events |
|
||||
| high_latency_data_link_lost | `bool` | | | Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost |
|
||||
| is_vtol | `bool` | | | True if the system is VTOL capable |
|
||||
| is_vtol_tailsitter | `bool` | | | True if the system performs a 90° pitch down rotation during transition from MC to FW |
|
||||
| in_transition_mode | `bool` | | | True if VTOL is doing a transition |
|
||||
| in_transition_to_fw | `bool` | | | True if VTOL is doing a transition from MC to FW |
|
||||
| system_type | `uint8` | | | system type, contains mavlink MAV_TYPE |
|
||||
| system_id | `uint8` | | | system id, contains MAVLink's system ID field |
|
||||
| component_id | `uint8` | | | subsystem / component id, contains MAVLink's component ID field |
|
||||
| safety_button_available | `bool` | | | Set to true if a safety button is connected |
|
||||
| safety_off | `bool` | | | Set to true if safety is off |
|
||||
| power_input_valid | `bool` | | | set if input power is valid |
|
||||
| usb_connected | `bool` | | | set to true (never cleared) once telemetry received from usb link |
|
||||
| open_drone_id_system_present | `bool` | | |
|
||||
| open_drone_id_system_healthy | `bool` | | |
|
||||
| parachute_system_present | `bool` | | |
|
||||
| parachute_system_healthy | `bool` | | |
|
||||
| rc_calibration_in_progress | `bool` | | |
|
||||
| calibration_enabled | `bool` | | |
|
||||
| pre_flight_checks_pass | `bool` | | | true if all checks necessary to arm pass |
|
||||
| Name | Type | Unit [Frame] | Range/Enum | Description |
|
||||
| -------------------------------- | -------- | ------------ | ---------- | ----------------------------------------------------------------------------------------------- |
|
||||
| timestamp | `uint64` | | | time since system start (microseconds) |
|
||||
| armed_time | `uint64` | | | Arming timestamp (microseconds) |
|
||||
| takeoff_time | `uint64` | | | Takeoff timestamp (microseconds) |
|
||||
| arming_state | `uint8` | | |
|
||||
| latest_arming_reason | `uint8` | | |
|
||||
| latest_disarming_reason | `uint8` | | |
|
||||
| nav_state_timestamp | `uint64` | | | time when current nav_state activated |
|
||||
| nav_state_user_intention | `uint8` | | | Mode that the user selected (might be different from nav_state in a failsafe situation) |
|
||||
| nav_state | `uint8` | | | Currently active mode |
|
||||
| executor_in_charge | `uint8` | | | Current mode executor in charge (0=Autopilot) |
|
||||
| nav_state_display | `uint8` | | | User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state) |
|
||||
| valid_nav_states_mask | `uint32` | | | Bitmask for all valid nav_state values |
|
||||
| can_set_nav_states_mask | `uint32` | | | Bitmask for all modes that a user can select |
|
||||
| failure_detector_status | `uint16` | | |
|
||||
| hil_state | `uint8` | | |
|
||||
| vehicle_type | `uint8` | | |
|
||||
| failsafe | `bool` | | | true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) |
|
||||
| failsafe_and_user_took_over | `bool` | | | true if system is in failsafe state but the user took over control |
|
||||
| failsafe_defer_state | `uint8` | | | one of FAILSAFE*DEFER_STATE*\* |
|
||||
| gcs_connection_lost | `bool` | | | datalink to GCS lost |
|
||||
| gcs_connection_lost_counter | `uint8` | | | counts unique GCS connection lost events |
|
||||
| high_latency_data_link_lost | `bool` | | | Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost |
|
||||
| is_vtol | `bool` | | | True if the system is VTOL capable |
|
||||
| is_vtol_tailsitter | `bool` | | | True if the system performs a 90° pitch down rotation during transition from MC to FW |
|
||||
| in_transition_mode | `bool` | | | True if VTOL is doing a transition |
|
||||
| in_transition_to_fw | `bool` | | | True if VTOL is doing a transition from MC to FW |
|
||||
| system_type | `uint8` | | | system type, contains mavlink MAV_TYPE |
|
||||
| system_id | `uint8` | | | system id, contains MAVLink's system ID field |
|
||||
| component_id | `uint8` | | | subsystem / component id, contains MAVLink's component ID field |
|
||||
| safety_button_available | `bool` | | | Set to true if a safety button is connected |
|
||||
| safety_off | `bool` | | | Set to true if safety is off |
|
||||
| power_input_valid | `bool` | | | set if input power is valid |
|
||||
| usb_connected | `bool` | | | set to true (never cleared) once telemetry received from usb link |
|
||||
| open_drone_id_system_present | `bool` | | |
|
||||
| open_drone_id_system_healthy | `bool` | | |
|
||||
| parachute_system_present | `bool` | | |
|
||||
| parachute_system_healthy | `bool` | | |
|
||||
| traffic_avoidance_system_present | `bool` | | |
|
||||
| rc_calibration_in_progress | `bool` | | |
|
||||
| calibration_enabled | `bool` | | |
|
||||
| pre_flight_checks_pass | `bool` | | | true if all checks necessary to arm pass |
|
||||
|
||||
## Constants
|
||||
|
||||
| Name | Type | Value | Description |
|
||||
| ----------------------------------------------------------------------------------------- | -------- | ----- | ------------------------------------------------ |
|
||||
| <a href="#MESSAGE_VERSION"></a> MESSAGE_VERSION | `uint32` | 1 |
|
||||
| <a href="#MESSAGE_VERSION"></a> MESSAGE_VERSION | `uint32` | 2 |
|
||||
| <a href="#ARMING_STATE_DISARMED"></a> ARMING_STATE_DISARMED | `uint8` | 1 |
|
||||
| <a href="#ARMING_STATE_ARMED"></a> ARMING_STATE_ARMED | `uint8` | 2 |
|
||||
| <a href="#ARM_DISARM_REASON_STICK_GESTURE"></a> ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 |
|
||||
@@ -129,7 +131,7 @@ Encodes the system state of the vehicle published by commander.
|
||||
```c
|
||||
# Encodes the system state of the vehicle published by commander
|
||||
|
||||
uint32 MESSAGE_VERSION = 1
|
||||
uint32 MESSAGE_VERSION = 2
|
||||
|
||||
uint64 timestamp # time since system start (microseconds)
|
||||
|
||||
@@ -192,6 +194,7 @@ uint8 NAVIGATION_STATE_EXTERNAL8 = 30
|
||||
uint8 NAVIGATION_STATE_MAX = 31
|
||||
|
||||
uint8 executor_in_charge # Current mode executor in charge (0=Autopilot)
|
||||
uint8 nav_state_display # User-visible nav state sent via MAVLink (executor state if active, otherwise nav_state)
|
||||
|
||||
uint32 valid_nav_states_mask # Bitmask for all valid nav_state values
|
||||
uint32 can_set_nav_states_mask # Bitmask for all modes that a user can select
|
||||
@@ -255,6 +258,8 @@ bool open_drone_id_system_healthy
|
||||
bool parachute_system_present
|
||||
bool parachute_system_healthy
|
||||
|
||||
bool traffic_avoidance_system_present
|
||||
|
||||
bool rc_calibration_in_progress
|
||||
bool calibration_enabled
|
||||
|
||||
|
||||
@@ -0,0 +1,286 @@
|
||||
---
|
||||
pageClass: is-wide-page
|
||||
---
|
||||
|
||||
# VehicleStatusV1 (UORB message)
|
||||
|
||||
Encodes the system state of the vehicle published by commander.
|
||||
|
||||
**TOPICS:** vehicle_statusv1
|
||||
|
||||
## Fields
|
||||
|
||||
| Name | Type | Unit [Frame] | Range/Enum | Description |
|
||||
| ---------------------------- | -------- | -------------- | --------------------------------------------- | ----------------------------------------------------------------------------------------------- |
|
||||
| timestamp | `uint64` | us | | Time since system start |
|
||||
| armed_time | `uint64` | us | | Arming timestamp |
|
||||
| takeoff_time | `uint64` | us | | Takeoff timestamp |
|
||||
| arming_state | `uint8` | | |
|
||||
| latest_arming_reason | `uint8` | | |
|
||||
| latest_disarming_reason | `uint8` | | |
|
||||
| nav_state_timestamp | `uint64` | | | Time when current nav_state activated |
|
||||
| nav_state_user_intention | `uint8` | | | Mode that the user selected (might be different from nav_state in a failsafe situation) |
|
||||
| nav_state | `uint8` | | [NAVIGATION_STATE](#NAVIGATION_STATE) | Currently active mode |
|
||||
| executor_in_charge | `uint8` | | | Current mode executor in charge (0=Autopilot) |
|
||||
| valid_nav_states_mask | `uint32` | | | Bitmask for all valid nav_state values |
|
||||
| can_set_nav_states_mask | `uint32` | | | Bitmask for all modes that a user can select |
|
||||
| failure_detector_status | `uint16` | | [FAILURE](#FAILURE) |
|
||||
| hil_state | `uint8` | enum HIL_STATE | |
|
||||
| vehicle_type | `uint8` | | [VEHICLE_TYPE](#VEHICLE_TYPE) |
|
||||
| failsafe | `bool` | | | true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...) |
|
||||
| failsafe_and_user_took_over | `bool` | | | true if system is in failsafe state but the user took over control |
|
||||
| failsafe_defer_state | `uint8` | | [FAILSAFE_DEFER_STATE](#FAILSAFE_DEFER_STATE) |
|
||||
| gcs_connection_lost | `bool` | | | datalink to GCS lost |
|
||||
| gcs_connection_lost_counter | `uint8` | | | counts unique GCS connection lost events |
|
||||
| high_latency_data_link_lost | `bool` | | | Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost |
|
||||
| is_vtol | `bool` | | | True if the system is VTOL capable |
|
||||
| is_vtol_tailsitter | `bool` | | | True if the system performs a 90° pitch down rotation during transition from MC to FW |
|
||||
| in_transition_mode | `bool` | | | True if VTOL is doing a transition |
|
||||
| in_transition_to_fw | `bool` | | | True if VTOL is doing a transition from MC to FW |
|
||||
| system_type | `uint8` | | | system type, contains mavlink MAV_TYPE |
|
||||
| system_id | `uint8` | | | system id, contains MAVLink's system ID field |
|
||||
| component_id | `uint8` | | | subsystem / component id, contains MAVLink's component ID field |
|
||||
| safety_button_available | `bool` | | | Set to true if a safety button is connected |
|
||||
| safety_off | `bool` | | | Set to true if safety is off |
|
||||
| power_input_valid | `bool` | | | Set if input power is valid |
|
||||
| usb_connected | `bool` | | | Set to true (never cleared) once telemetry received from usb link |
|
||||
| open_drone_id_system_present | `bool` | | |
|
||||
| open_drone_id_system_healthy | `bool` | | |
|
||||
| parachute_system_present | `bool` | | |
|
||||
| parachute_system_healthy | `bool` | | |
|
||||
| rc_calibration_in_progress | `bool` | | |
|
||||
| calibration_enabled | `bool` | | |
|
||||
| pre_flight_checks_pass | `bool` | | | true if all checks necessary to arm pass |
|
||||
|
||||
## Enums
|
||||
|
||||
### NAVIGATION_STATE {#NAVIGATION_STATE}
|
||||
|
||||
| Name | Type | Value | Description |
|
||||
| --------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------- |
|
||||
| <a href="#NAVIGATION_STATE_MANUAL"></a> NAVIGATION_STATE_MANUAL | `uint8` | 0 | Manual mode |
|
||||
| <a href="#NAVIGATION_STATE_ALTCTL"></a> NAVIGATION_STATE_ALTCTL | `uint8` | 1 | Altitude control mode |
|
||||
| <a href="#NAVIGATION_STATE_POSCTL"></a> NAVIGATION_STATE_POSCTL | `uint8` | 2 | Position control mode |
|
||||
| <a href="#NAVIGATION_STATE_AUTO_MISSION"></a> NAVIGATION_STATE_AUTO_MISSION | `uint8` | 3 | Auto mission mode |
|
||||
| <a href="#NAVIGATION_STATE_AUTO_LOITER"></a> NAVIGATION_STATE_AUTO_LOITER | `uint8` | 4 | Auto loiter mode |
|
||||
| <a href="#NAVIGATION_STATE_AUTO_RTL"></a> NAVIGATION_STATE_AUTO_RTL | `uint8` | 5 | Auto return to launch mode |
|
||||
| <a href="#NAVIGATION_STATE_POSITION_SLOW"></a> NAVIGATION_STATE_POSITION_SLOW | `uint8` | 6 |
|
||||
| <a href="#NAVIGATION_STATE_FREE5"></a> NAVIGATION_STATE_FREE5 | `uint8` | 7 |
|
||||
| <a href="#NAVIGATION_STATE_ALTITUDE_CRUISE"></a> NAVIGATION_STATE_ALTITUDE_CRUISE | `uint8` | 8 | Altitude with Cruise mode |
|
||||
| <a href="#NAVIGATION_STATE_FREE3"></a> NAVIGATION_STATE_FREE3 | `uint8` | 9 |
|
||||
| <a href="#NAVIGATION_STATE_ACRO"></a> NAVIGATION_STATE_ACRO | `uint8` | 10 | Acro mode |
|
||||
| <a href="#NAVIGATION_STATE_FREE2"></a> NAVIGATION_STATE_FREE2 | `uint8` | 11 |
|
||||
| <a href="#NAVIGATION_STATE_DESCEND"></a> NAVIGATION_STATE_DESCEND | `uint8` | 12 | Descend mode (no position control) |
|
||||
| <a href="#NAVIGATION_STATE_TERMINATION"></a> NAVIGATION_STATE_TERMINATION | `uint8` | 13 | Termination mode |
|
||||
| <a href="#NAVIGATION_STATE_OFFBOARD"></a> NAVIGATION_STATE_OFFBOARD | `uint8` | 14 |
|
||||
| <a href="#NAVIGATION_STATE_STAB"></a> NAVIGATION_STATE_STAB | `uint8` | 15 | Stabilized mode |
|
||||
| <a href="#NAVIGATION_STATE_FREE1"></a> NAVIGATION_STATE_FREE1 | `uint8` | 16 |
|
||||
| <a href="#NAVIGATION_STATE_AUTO_TAKEOFF"></a> NAVIGATION_STATE_AUTO_TAKEOFF | `uint8` | 17 | Takeoff |
|
||||
| <a href="#NAVIGATION_STATE_AUTO_LAND"></a> NAVIGATION_STATE_AUTO_LAND | `uint8` | 18 | Land |
|
||||
| <a href="#NAVIGATION_STATE_AUTO_FOLLOW_TARGET"></a> NAVIGATION_STATE_AUTO_FOLLOW_TARGET | `uint8` | 19 | Auto Follow |
|
||||
| <a href="#NAVIGATION_STATE_AUTO_PRECLAND"></a> NAVIGATION_STATE_AUTO_PRECLAND | `uint8` | 20 | Precision land with landing target |
|
||||
| <a href="#NAVIGATION_STATE_ORBIT"></a> NAVIGATION_STATE_ORBIT | `uint8` | 21 | Orbit in a circle |
|
||||
| <a href="#NAVIGATION_STATE_AUTO_VTOL_TAKEOFF"></a> NAVIGATION_STATE_AUTO_VTOL_TAKEOFF | `uint8` | 22 | Takeoff, transition, establish loiter |
|
||||
| <a href="#NAVIGATION_STATE_EXTERNAL1"></a> NAVIGATION_STATE_EXTERNAL1 | `uint8` | 23 |
|
||||
| <a href="#NAVIGATION_STATE_EXTERNAL2"></a> NAVIGATION_STATE_EXTERNAL2 | `uint8` | 24 |
|
||||
| <a href="#NAVIGATION_STATE_EXTERNAL3"></a> NAVIGATION_STATE_EXTERNAL3 | `uint8` | 25 |
|
||||
| <a href="#NAVIGATION_STATE_EXTERNAL4"></a> NAVIGATION_STATE_EXTERNAL4 | `uint8` | 26 |
|
||||
| <a href="#NAVIGATION_STATE_EXTERNAL5"></a> NAVIGATION_STATE_EXTERNAL5 | `uint8` | 27 |
|
||||
| <a href="#NAVIGATION_STATE_EXTERNAL6"></a> NAVIGATION_STATE_EXTERNAL6 | `uint8` | 28 |
|
||||
| <a href="#NAVIGATION_STATE_EXTERNAL7"></a> NAVIGATION_STATE_EXTERNAL7 | `uint8` | 29 |
|
||||
| <a href="#NAVIGATION_STATE_EXTERNAL8"></a> NAVIGATION_STATE_EXTERNAL8 | `uint8` | 30 |
|
||||
| <a href="#NAVIGATION_STATE_MAX"></a> NAVIGATION_STATE_MAX | `uint8` | 31 |
|
||||
|
||||
### FAILURE {#FAILURE}
|
||||
|
||||
| Name | Type | Value | Description |
|
||||
| --------------------------------------------------------------- | -------- | ----- | ----------- |
|
||||
| <a href="#FAILURE_NONE"></a> FAILURE_NONE | `uint16` | 0 |
|
||||
| <a href="#FAILURE_ROLL"></a> FAILURE_ROLL | `uint16` | 1 | (1 << 0) |
|
||||
| <a href="#FAILURE_PITCH"></a> FAILURE_PITCH | `uint16` | 2 | (1 << 1) |
|
||||
| <a href="#FAILURE_ALT"></a> FAILURE_ALT | `uint16` | 4 | (1 << 2) |
|
||||
| <a href="#FAILURE_EXT"></a> FAILURE_EXT | `uint16` | 8 | (1 << 3) |
|
||||
| <a href="#FAILURE_ARM_ESC"></a> FAILURE_ARM_ESC | `uint16` | 16 | (1 << 4) |
|
||||
| <a href="#FAILURE_BATTERY"></a> FAILURE_BATTERY | `uint16` | 32 | (1 << 5) |
|
||||
| <a href="#FAILURE_IMBALANCED_PROP"></a> FAILURE_IMBALANCED_PROP | `uint16` | 64 | (1 << 6) |
|
||||
| <a href="#FAILURE_MOTOR"></a> FAILURE_MOTOR | `uint16` | 128 | (1 << 7) |
|
||||
|
||||
### VEHICLE_TYPE {#VEHICLE_TYPE}
|
||||
|
||||
| Name | Type | Value | Description |
|
||||
| ----------------------------------------------------------------- | ------- | ----- | ----------- |
|
||||
| <a href="#VEHICLE_TYPE_UNSPECIFIED"></a> VEHICLE_TYPE_UNSPECIFIED | `uint8` | 0 |
|
||||
| <a href="#VEHICLE_TYPE_ROTARY_WING"></a> VEHICLE_TYPE_ROTARY_WING | `uint8` | 1 |
|
||||
| <a href="#VEHICLE_TYPE_FIXED_WING"></a> VEHICLE_TYPE_FIXED_WING | `uint8` | 2 |
|
||||
| <a href="#VEHICLE_TYPE_ROVER"></a> VEHICLE_TYPE_ROVER | `uint8` | 3 |
|
||||
|
||||
### FAILSAFE_DEFER_STATE {#FAILSAFE_DEFER_STATE}
|
||||
|
||||
| Name | Type | Value | Description |
|
||||
| --------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------ |
|
||||
| <a href="#FAILSAFE_DEFER_STATE_DISABLED"></a> FAILSAFE_DEFER_STATE_DISABLED | `uint8` | 0 |
|
||||
| <a href="#FAILSAFE_DEFER_STATE_ENABLED"></a> FAILSAFE_DEFER_STATE_ENABLED | `uint8` | 1 |
|
||||
| <a href="#FAILSAFE_DEFER_STATE_WOULD_FAILSAFE"></a> FAILSAFE_DEFER_STATE_WOULD_FAILSAFE | `uint8` | 2 | Failsafes deferred, but would trigger a failsafe |
|
||||
|
||||
## Constants
|
||||
|
||||
| Name | Type | Value | Description |
|
||||
| ----------------------------------------------------------------------------------------- | -------- | ----- | ----------- |
|
||||
| <a href="#MESSAGE_VERSION"></a> MESSAGE_VERSION | `uint32` | 1 |
|
||||
| <a href="#ARMING_STATE_DISARMED"></a> ARMING_STATE_DISARMED | `uint8` | 1 |
|
||||
| <a href="#ARMING_STATE_ARMED"></a> ARMING_STATE_ARMED | `uint8` | 2 |
|
||||
| <a href="#ARM_DISARM_REASON_STICK_GESTURE"></a> ARM_DISARM_REASON_STICK_GESTURE | `uint8` | 1 |
|
||||
| <a href="#ARM_DISARM_REASON_RC_SWITCH"></a> ARM_DISARM_REASON_RC_SWITCH | `uint8` | 2 |
|
||||
| <a href="#ARM_DISARM_REASON_COMMAND_INTERNAL"></a> ARM_DISARM_REASON_COMMAND_INTERNAL | `uint8` | 3 |
|
||||
| <a href="#ARM_DISARM_REASON_COMMAND_EXTERNAL"></a> ARM_DISARM_REASON_COMMAND_EXTERNAL | `uint8` | 4 |
|
||||
| <a href="#ARM_DISARM_REASON_MISSION_START"></a> ARM_DISARM_REASON_MISSION_START | `uint8` | 5 |
|
||||
| <a href="#ARM_DISARM_REASON_LANDING"></a> ARM_DISARM_REASON_LANDING | `uint8` | 6 |
|
||||
| <a href="#ARM_DISARM_REASON_PREFLIGHT_INACTION"></a> ARM_DISARM_REASON_PREFLIGHT_INACTION | `uint8` | 7 |
|
||||
| <a href="#ARM_DISARM_REASON_KILL_SWITCH"></a> ARM_DISARM_REASON_KILL_SWITCH | `uint8` | 8 |
|
||||
| <a href="#ARM_DISARM_REASON_RC_BUTTON"></a> ARM_DISARM_REASON_RC_BUTTON | `uint8` | 13 |
|
||||
| <a href="#ARM_DISARM_REASON_FAILSAFE"></a> ARM_DISARM_REASON_FAILSAFE | `uint8` | 14 |
|
||||
| <a href="#HIL_STATE_OFF"></a> HIL_STATE_OFF | `uint8` | 0 |
|
||||
| <a href="#HIL_STATE_ON"></a> HIL_STATE_ON | `uint8` | 1 |
|
||||
|
||||
## Source Message
|
||||
|
||||
[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/px4_msgs_old/msg/VehicleStatusV1.msg)
|
||||
|
||||
::: details Click here to see original file
|
||||
|
||||
```c
|
||||
# Encodes the system state of the vehicle published by commander
|
||||
|
||||
uint32 MESSAGE_VERSION = 1
|
||||
|
||||
uint64 timestamp # [us] Time since system start
|
||||
|
||||
uint64 armed_time # [us] Arming timestamp
|
||||
uint64 takeoff_time # [us] Takeoff timestamp
|
||||
|
||||
uint8 arming_state
|
||||
uint8 ARMING_STATE_DISARMED = 1
|
||||
uint8 ARMING_STATE_ARMED = 2
|
||||
|
||||
uint8 latest_arming_reason
|
||||
uint8 latest_disarming_reason
|
||||
uint8 ARM_DISARM_REASON_STICK_GESTURE = 1
|
||||
uint8 ARM_DISARM_REASON_RC_SWITCH = 2
|
||||
uint8 ARM_DISARM_REASON_COMMAND_INTERNAL = 3
|
||||
uint8 ARM_DISARM_REASON_COMMAND_EXTERNAL = 4
|
||||
uint8 ARM_DISARM_REASON_MISSION_START = 5
|
||||
uint8 ARM_DISARM_REASON_LANDING = 6
|
||||
uint8 ARM_DISARM_REASON_PREFLIGHT_INACTION = 7
|
||||
uint8 ARM_DISARM_REASON_KILL_SWITCH = 8
|
||||
uint8 ARM_DISARM_REASON_RC_BUTTON = 13
|
||||
uint8 ARM_DISARM_REASON_FAILSAFE = 14
|
||||
|
||||
uint64 nav_state_timestamp # Time when current nav_state activated
|
||||
|
||||
uint8 nav_state_user_intention # Mode that the user selected (might be different from nav_state in a failsafe situation)
|
||||
|
||||
uint8 nav_state # [@enum NAVIGATION_STATE] Currently active mode
|
||||
uint8 NAVIGATION_STATE_MANUAL = 0 # Manual mode
|
||||
uint8 NAVIGATION_STATE_ALTCTL = 1 # Altitude control mode
|
||||
uint8 NAVIGATION_STATE_POSCTL = 2 # Position control mode
|
||||
uint8 NAVIGATION_STATE_AUTO_MISSION = 3 # Auto mission mode
|
||||
uint8 NAVIGATION_STATE_AUTO_LOITER = 4 # Auto loiter mode
|
||||
uint8 NAVIGATION_STATE_AUTO_RTL = 5 # Auto return to launch mode
|
||||
uint8 NAVIGATION_STATE_POSITION_SLOW = 6
|
||||
uint8 NAVIGATION_STATE_FREE5 = 7
|
||||
uint8 NAVIGATION_STATE_ALTITUDE_CRUISE = 8 # Altitude with Cruise mode
|
||||
uint8 NAVIGATION_STATE_FREE3 = 9
|
||||
uint8 NAVIGATION_STATE_ACRO = 10 # Acro mode
|
||||
uint8 NAVIGATION_STATE_FREE2 = 11
|
||||
uint8 NAVIGATION_STATE_DESCEND = 12 # Descend mode (no position control)
|
||||
uint8 NAVIGATION_STATE_TERMINATION = 13 # Termination mode
|
||||
uint8 NAVIGATION_STATE_OFFBOARD = 14
|
||||
uint8 NAVIGATION_STATE_STAB = 15 # Stabilized mode
|
||||
uint8 NAVIGATION_STATE_FREE1 = 16
|
||||
uint8 NAVIGATION_STATE_AUTO_TAKEOFF = 17 # Takeoff
|
||||
uint8 NAVIGATION_STATE_AUTO_LAND = 18 # Land
|
||||
uint8 NAVIGATION_STATE_AUTO_FOLLOW_TARGET = 19 # Auto Follow
|
||||
uint8 NAVIGATION_STATE_AUTO_PRECLAND = 20 # Precision land with landing target
|
||||
uint8 NAVIGATION_STATE_ORBIT = 21 # Orbit in a circle
|
||||
uint8 NAVIGATION_STATE_AUTO_VTOL_TAKEOFF = 22 # Takeoff, transition, establish loiter
|
||||
uint8 NAVIGATION_STATE_EXTERNAL1 = 23
|
||||
uint8 NAVIGATION_STATE_EXTERNAL2 = 24
|
||||
uint8 NAVIGATION_STATE_EXTERNAL3 = 25
|
||||
uint8 NAVIGATION_STATE_EXTERNAL4 = 26
|
||||
uint8 NAVIGATION_STATE_EXTERNAL5 = 27
|
||||
uint8 NAVIGATION_STATE_EXTERNAL6 = 28
|
||||
uint8 NAVIGATION_STATE_EXTERNAL7 = 29
|
||||
uint8 NAVIGATION_STATE_EXTERNAL8 = 30
|
||||
uint8 NAVIGATION_STATE_MAX = 31
|
||||
|
||||
uint8 executor_in_charge # [-] Current mode executor in charge (0=Autopilot)
|
||||
|
||||
uint32 valid_nav_states_mask # [-] Bitmask for all valid nav_state values
|
||||
uint32 can_set_nav_states_mask # [-] Bitmask for all modes that a user can select
|
||||
|
||||
# Bitmask of detected failures
|
||||
uint16 failure_detector_status # [@enum FAILURE]
|
||||
uint16 FAILURE_NONE = 0
|
||||
uint16 FAILURE_ROLL = 1 # (1 << 0)
|
||||
uint16 FAILURE_PITCH = 2 # (1 << 1)
|
||||
uint16 FAILURE_ALT = 4 # (1 << 2)
|
||||
uint16 FAILURE_EXT = 8 # (1 << 3)
|
||||
uint16 FAILURE_ARM_ESC = 16 # (1 << 4)
|
||||
uint16 FAILURE_BATTERY = 32 # (1 << 5)
|
||||
uint16 FAILURE_IMBALANCED_PROP = 64 # (1 << 6)
|
||||
uint16 FAILURE_MOTOR = 128 # (1 << 7)
|
||||
|
||||
uint8 hil_state # [enum HIL_STATE]
|
||||
uint8 HIL_STATE_OFF = 0
|
||||
uint8 HIL_STATE_ON = 1
|
||||
|
||||
# Current vehicle locomotion method. A vehicle can have different methods (e.g. VTOL transitions from RW to FW method)
|
||||
uint8 vehicle_type # [@enum VEHICLE_TYPE]
|
||||
uint8 VEHICLE_TYPE_UNSPECIFIED = 0
|
||||
uint8 VEHICLE_TYPE_ROTARY_WING = 1
|
||||
uint8 VEHICLE_TYPE_FIXED_WING = 2
|
||||
uint8 VEHICLE_TYPE_ROVER = 3
|
||||
|
||||
uint8 FAILSAFE_DEFER_STATE_DISABLED = 0
|
||||
uint8 FAILSAFE_DEFER_STATE_ENABLED = 1
|
||||
uint8 FAILSAFE_DEFER_STATE_WOULD_FAILSAFE = 2 # Failsafes deferred, but would trigger a failsafe
|
||||
|
||||
bool failsafe # true if system is in failsafe state (e.g.:RTL, Hover, Terminate, ...)
|
||||
bool failsafe_and_user_took_over # true if system is in failsafe state but the user took over control
|
||||
uint8 failsafe_defer_state # [@enum FAILSAFE_DEFER_STATE]
|
||||
|
||||
# Link loss
|
||||
bool gcs_connection_lost # datalink to GCS lost
|
||||
uint8 gcs_connection_lost_counter # counts unique GCS connection lost events
|
||||
bool high_latency_data_link_lost # Set to true if the high latency data link (eg. RockBlock Iridium 9603 telemetry module) is lost
|
||||
|
||||
# VTOL flags
|
||||
bool is_vtol # True if the system is VTOL capable
|
||||
bool is_vtol_tailsitter # True if the system performs a 90° pitch down rotation during transition from MC to FW
|
||||
bool in_transition_mode # True if VTOL is doing a transition
|
||||
bool in_transition_to_fw # True if VTOL is doing a transition from MC to FW
|
||||
|
||||
# MAVLink identification
|
||||
uint8 system_type # system type, contains mavlink MAV_TYPE
|
||||
uint8 system_id # system id, contains MAVLink's system ID field
|
||||
uint8 component_id # subsystem / component id, contains MAVLink's component ID field
|
||||
|
||||
bool safety_button_available # Set to true if a safety button is connected
|
||||
bool safety_off # Set to true if safety is off
|
||||
|
||||
bool power_input_valid # Set if input power is valid
|
||||
bool usb_connected # Set to true (never cleared) once telemetry received from usb link
|
||||
|
||||
bool open_drone_id_system_present
|
||||
bool open_drone_id_system_healthy
|
||||
|
||||
bool parachute_system_present
|
||||
bool parachute_system_healthy
|
||||
|
||||
bool rc_calibration_in_progress
|
||||
bool calibration_enabled
|
||||
|
||||
bool pre_flight_checks_pass # true if all checks necessary to arm pass
|
||||
```
|
||||
|
||||
:::
|
||||
@@ -269,3 +269,4 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m
|
||||
- [VehicleAttitudeSetpointV0](VehicleAttitudeSetpointV0.md)
|
||||
- [VehicleLocalPositionV0](VehicleLocalPositionV0.md) — Fused local position in NED. The coordinate system origin is the vehicle position at the time when the EKF2-module was started.
|
||||
- [VehicleStatusV0](VehicleStatusV0.md) — Encodes the system state of the vehicle published by commander.
|
||||
- [VehicleStatusV1](VehicleStatusV1.md) — Encodes the system state of the vehicle published by commander.
|
||||
|
||||
@@ -78,6 +78,23 @@ Configure the action when there is a potential collision using the parameter bel
|
||||
| <a id="NAV_TRAFF_A_VER"></a>[NAV_TRAFF_A_VER](../advanced_config/parameter_reference.md#NAV_TRAFF_A_VER) | Vertical height above and below vehicle of the cylinder that defines its airspace (also see [NAV_TRAFF_A_HOR](#NAV_TRAFF_A_HOR)). |
|
||||
| <a id="NAV_TRAFF_COLL_T"></a>[NAV_TRAFF_COLL_T](../advanced_config/parameter_reference.md#NAV_TRAFF_COLL_T) | Collision time threshold. Avoidance will trigger if the estimated time until collision drops below this value (the estimated time is based on relative speed of traffic and UAV). |
|
||||
|
||||
### Arming Check
|
||||
|
||||
PX4 can be configured to check for the presence of a traffic avoidance system (ADSB or FLARM transponder) before arming.
|
||||
This ensures that a traffic avoidance system is connected and functioning before flight.
|
||||
|
||||
The check is configured using the [COM_ARM_TRAFF](../advanced_config/parameter_reference.md#COM_ARM_TRAFF) parameter:
|
||||
|
||||
| Value | Description |
|
||||
| ----- | -------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 0 | Disabled (default). No check is performed. |
|
||||
| 1 | Warning only. A warning is issued if no traffic avoidance system is detected, but arming is allowed. |
|
||||
| 2 | Enforce for all modes. Arming is denied if no traffic avoidance system is detected, regardless of flight mode. |
|
||||
| 3 | Enforce for mission modes only. Arming is denied if no traffic avoidance system is detected and a mission mode is planned. |
|
||||
|
||||
When a traffic avoidance system is detected, the system tracks its presence with a 3-second timeout.
|
||||
If the system is lost or regained, corresponding events are logged ("Traffic avoidance system lost" / "Traffic avoidance system regained").
|
||||
|
||||
## Implementation
|
||||
|
||||
### ADSB/FLARM
|
||||
|
||||
@@ -2,6 +2,512 @@
|
||||
|
||||
PX4 uses GitHub Actions for continuous integration, with different workflows handling code builds, testing, and documentation.
|
||||
|
||||
## Code CI
|
||||
|
||||
PX4 builds and testing are performed using GitHub Actions with a waterfall/staged pipeline architecture to optimize costs and provide fast developer feedback.
|
||||
|
||||
### CI Architecture Overview
|
||||
|
||||
PX4 uses a **4-tier waterfall pipeline** that ensures expensive AWS-hosted integration tests only run after basic checks pass. This architecture prevents costly runs when simple issues like formatting errors are present.
|
||||
|
||||
#### Pipeline Structure
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ TIER 1: Gate Checks (2-5 min) │
|
||||
│ • Format checks, shellcheck, Python linting │
|
||||
│ • GitHub-hosted runners (free/cheap) │
|
||||
│ • fail-fast: stops on first failure │
|
||||
└─────────────────┬───────────────────────────┘
|
||||
│ ALL PASS
|
||||
▼
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ TIER 2: Builds, Analysis & Platform Checks │
|
||||
│ (10-30 min) │
|
||||
│ • SITL build + cache seed (PX4 + Gazebo) │
|
||||
│ • Unit tests, static analysis, EKF checks │
|
||||
│ • Ubuntu/macOS builds, ITCM, flash analysis │
|
||||
│ • Failsafe web simulator (Emscripten) │
|
||||
│ • Mixed runners (AWS 4cpu + GitHub) │
|
||||
└─────────────────┬───────────────────────────┘
|
||||
│ ALL PASS
|
||||
▼
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ TIER 3: Integration Tests (30-45 min) │
|
||||
│ • SITL tests (Gazebo + MAVSDK, 20x speed) │
|
||||
│ • ROS2 integration, MAVROS tests │
|
||||
│ • ROS translation node (humble + jazzy) │
|
||||
│ • AWS Self-hosted 8cpu runners │
|
||||
└─────────────────┬───────────────────────────┘
|
||||
│ ALL PASS
|
||||
▼
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ TIER 4: Full Build Matrix (30-60 min) │
|
||||
│ • Build all board targets │
|
||||
│ • AWS 8cpu runners (most expensive) │
|
||||
│ • Only on main/stable/beta/release/tags │
|
||||
└─────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Active Workflows
|
||||
|
||||
#### Core CI
|
||||
|
||||
**[ci-orchestrator.yml](https://github.com/PX4/PX4-Autopilot/blob/main/.github/workflows/ci-orchestrator.yml)** - Main CI Pipeline
|
||||
- Runs on all PRs and pushes
|
||||
- Implements Tiers 1-4 with cascading dependencies
|
||||
- Fails fast to save costs and provide quick feedback
|
||||
- Uses concurrency control to cancel outdated runs
|
||||
|
||||
**[build_all_targets.yml](https://github.com/PX4/PX4-Autopilot/blob/main/.github/workflows/build_all_targets.yml)** - Full Board Build Matrix
|
||||
- Triggered by orchestrator completion on PRs
|
||||
- Runs independently on tagged releases
|
||||
- Builds all board configurations
|
||||
- Uploads artifacts to S3 and GitHub Releases
|
||||
|
||||
#### Infrastructure Workflows
|
||||
|
||||
- **dev_container.yml** - Docker container builds for development environment
|
||||
- **fuzzing.yml** - Daily fuzzing tests for security
|
||||
|
||||
#### Maintenance Workflows
|
||||
|
||||
- **ekf_update_change_indicator.yml** - Track EKF functional changes
|
||||
- **label.yml** - Auto-label PRs based on modified files
|
||||
- **stale.yml** - Mark and close stale issues/PRs
|
||||
- **sync_to_px4_msgs.yml** - Sync ROS message definitions to px4_msgs repo
|
||||
|
||||
### CI Tier Details
|
||||
|
||||
#### Tier 1: Gate Checks (2-5 minutes)
|
||||
|
||||
**Purpose:** Catch common errors quickly before spinning up expensive resources.
|
||||
|
||||
**Jobs:**
|
||||
- Format checks (`check_format`)
|
||||
- Newline checks (`check_newlines`)
|
||||
- Shellcheck for bash scripts
|
||||
- Python linting (mypy, flake8) for MAVSDK tests
|
||||
|
||||
**Runner:** GitHub-hosted `ubuntu-latest`
|
||||
|
||||
**Behavior:** `fail-fast: true` - stops all jobs immediately on first failure
|
||||
|
||||
#### Tier 2: Builds, Analysis & Platform Checks (10-30 minutes)
|
||||
|
||||
**Purpose:** Validate code compiles, passes unit tests, and builds on all platforms. This tier runs all build and analysis jobs in parallel to minimize wall-clock time.
|
||||
|
||||
**Jobs:**
|
||||
- **Build SITL Cache Seed** - Builds `px4_sitl_default` and Gazebo Classic plugins, seeds the ccache for downstream SITL test jobs
|
||||
- **Basic Tests** - Unit tests, module configuration validation, module documentation checks, and EKF functional change detection (PRs only — checks `src/modules/ekf2/test/change_indication` for uncommitted diff after running EKF tests)
|
||||
- **Clang-tidy** static analysis (16cpu runner); incremental on PRs (changed files only), full scan on push to main/stable/beta/release
|
||||
- **Clang-tidy PR Annotations** - Posts inline line-level review comments with one-click fix suggestions via `platisd/clang-tidy-pr-comments`; same-repo PRs only, informational (does not block merge)
|
||||
- **Ubuntu builds** (22.04, 24.04) on AWS 4cpu runners
|
||||
- **macOS build** on GitHub macOS runners
|
||||
- **ITCM memory checks** for 4 NuttX targets (fmu-v5x, fmu-v6xrt, tropic variants)
|
||||
- **Flash analysis** using bloaty for 2 targets (fmu-v5x, fmu-v6x), with PR comment
|
||||
- **Failsafe web simulator** build (Emscripten, cached SDK)
|
||||
|
||||
**Runners:** Mixed (AWS 4cpu-linux-x64, 16cpu for clang-tidy, 2cpu for clang-tidy annotations, GitHub macos-latest)
|
||||
|
||||
**Behavior:** Only runs if Tier 1 passes completely; `fail-fast: false` to let all jobs attempt
|
||||
|
||||
#### Tier 3: Integration Tests (30-45 minutes)
|
||||
|
||||
**Purpose:** Run expensive simulation and integration tests.
|
||||
|
||||
**Jobs:**
|
||||
- **SITL Tests** - Gazebo Classic simulation with MAVSDK test suite at 20x speed factor (iris, tailsitter, standard_vtol models)
|
||||
- **ROS2 Integration** - Build and test ROS2 interface library
|
||||
- **MAVROS Mission Tests** - Mission execution tests
|
||||
- **MAVROS Offboard Tests** - Offboard control tests
|
||||
- **ROS Translation Node** - Tests for humble and jazzy distributions
|
||||
|
||||
**Runners:** AWS Self-hosted 8cpu-linux-x64
|
||||
|
||||
**Behavior:** Only runs if all Tier 2 jobs pass; `fail-fast: false` to collect all test results
|
||||
|
||||
**Timeout:** 45 minutes per job
|
||||
|
||||
#### Tier 4: Full Build Matrix (30-60 minutes)
|
||||
|
||||
**Purpose:** Build all board targets for firmware distribution.
|
||||
|
||||
**Trigger:**
|
||||
- Automatically after orchestrator succeeds (for PRs)
|
||||
- Independently on main/stable/beta/release branches
|
||||
- Independently on version tags (v*)
|
||||
|
||||
**Process:**
|
||||
1. Scan and group board targets by architecture
|
||||
2. Build targets in parallel on AWS 8cpu runners
|
||||
3. Package and upload artifacts
|
||||
|
||||
**Artifacts:**
|
||||
- Uploaded to S3 bucket (px4-travis) for QGroundControl
|
||||
- Uploaded to GitHub Releases for version tags
|
||||
- Draft releases created for manual review before publishing
|
||||
|
||||
**Runners:** AWS Self-hosted 8cpu-linux-x64 (most expensive)
|
||||
|
||||
### Runner Types
|
||||
|
||||
#### GitHub-Hosted Runners
|
||||
|
||||
Used for Tier 1 gate checks and macOS builds.
|
||||
|
||||
**Benefits:**
|
||||
- Fast startup (5-10 seconds)
|
||||
- Free for public repos (2,000 minutes/month)
|
||||
- Low cost when paying (~$0.008/min for Linux)
|
||||
- Reliable provisioning
|
||||
|
||||
**Used For:**
|
||||
- Format/lint checks
|
||||
- Python linting
|
||||
- Shellcheck
|
||||
- macOS builds
|
||||
|
||||
#### AWS Self-Hosted Runners (RunsOn)
|
||||
|
||||
Used for Tiers 2-4 builds and tests.
|
||||
|
||||
**Configuration:**
|
||||
- `1cpu-linux-x64` - Utility jobs (flash analysis comment publishing)
|
||||
- `2cpu-linux-x64` - Clang-tidy PR annotation posting
|
||||
- `4cpu-linux-x64` - SITL cache seed, basic tests, EKF checks, platform builds, flash analysis, ITCM checks, failsafe sim
|
||||
- `8cpu-linux-x64` - SITL integration tests, ROS integration tests, full build matrix
|
||||
- `16cpu-linux-x64` - Clang-tidy static analysis
|
||||
- `spot=false` - On-demand instances (can be changed to spot for 60-70% savings)
|
||||
|
||||
**Used For:**
|
||||
- SITL simulation tests (8cpu for Gazebo physics at 20x speed)
|
||||
- ROS integration tests (8cpu for parallel compilation of xrce-dds and ROS2 libraries)
|
||||
- Full board compilation (8cpu)
|
||||
- Platform builds and analysis (4cpu)
|
||||
|
||||
### Fork CI Configuration
|
||||
|
||||
Forks can run CI without AWS self-hosted runners. There are two paths depending on how much of the pipeline you need.
|
||||
|
||||
#### Option 1: Configure the Orchestrator
|
||||
|
||||
Use the full orchestrator with settings tuned for your fork's infrastructure. This gives you access to all tiers, job toggles, and cache tuning.
|
||||
|
||||
1. Copy the example config:
|
||||
|
||||
```bash
|
||||
cp .github/ci-config.yml.example .github/ci-config.yml
|
||||
```
|
||||
|
||||
2. Edit `.github/ci-config.yml` to match your setup:
|
||||
- **Runner labels** -- point all tiers to `ubuntu-latest` (or your own self-hosted labels)
|
||||
- **Job toggles** -- disable hardware-specific jobs (ITCM, flash analysis, platform builds) that don't apply to your fork
|
||||
- **Cache sizes** -- GitHub provides 10 GB per repo; the example config uses roughly 15-20% of that with most upstream-specific jobs disabled
|
||||
- **`is_gha` flag** -- set to `true` when running on GitHub-hosted runners (wired for future infrastructure-aware behavior)
|
||||
|
||||
3. Commit the file and push. The orchestrator reads it at runtime and applies your overrides.
|
||||
|
||||
This configuration has been validated end-to-end on GitHub-hosted `ubuntu-latest` runners: [successful run](https://github.com/PX4/PX4-Autopilot/actions/runs/22746668606).
|
||||
|
||||
#### Option 2: Use the Simple CI Workflow
|
||||
|
||||
If you only need basic validation (SITL build, one hardware target, unit tests, format checks), use the single-job workflow instead of the full orchestrator.
|
||||
|
||||
1. Rename the example file:
|
||||
|
||||
```bash
|
||||
mv .github/workflows/ci-simple.yml.example .github/workflows/ci-simple.yml
|
||||
```
|
||||
|
||||
2. Optionally delete `ci-orchestrator.yml` to avoid running both workflows.
|
||||
|
||||
3. Enable GitHub Actions in your fork settings if not already enabled.
|
||||
|
||||
The simple workflow runs a single `quick-check` job on `ubuntu-latest` that builds PX4 SITL, FMU-v5, runs unit tests, and checks formatting. It typically completes in under 15 minutes and has no AWS or self-hosted runner dependencies.
|
||||
|
||||
### Cost Optimization Features
|
||||
|
||||
#### 1. Cascading Dependencies
|
||||
|
||||
Each tier only executes if the previous tier passes completely. This prevents expensive AWS runners from spinning up when basic checks fail.
|
||||
|
||||
**Example:**
|
||||
- Format error detected in 2 minutes (Tier 1)
|
||||
- Pipeline stops immediately
|
||||
- AWS runners never start
|
||||
- Cost: ~$0.01 vs ~$5 for full run
|
||||
|
||||
#### 2. Fail-Fast Strategy
|
||||
|
||||
Tier 1 uses `fail-fast: true` to stop all parallel jobs on the first failure, providing immediate feedback to developers.
|
||||
|
||||
#### 3. Concurrency Control
|
||||
|
||||
All workflows use `cancel-in-progress: true` to automatically stop outdated runs when developers push new commits.
|
||||
|
||||
#### 4. Branch-Aware Execution
|
||||
|
||||
The full build matrix (Tier 4) only runs on important branches:
|
||||
- main, stable, beta
|
||||
- release/* branches
|
||||
- Version tags (v*)
|
||||
|
||||
Feature branch PRs skip the expensive full build after validation in Tiers 1-3.
|
||||
|
||||
#### 5. Path-Based Filtering
|
||||
|
||||
Most CI workflows ignore changes to `docs/**` paths to avoid unnecessary builds when only documentation is modified.
|
||||
|
||||
### Developer Experience
|
||||
|
||||
#### Quick Feedback Loop
|
||||
|
||||
The waterfall architecture provides progressively detailed feedback:
|
||||
|
||||
| Issue Type | Detection Time | Tier | Cost Impact |
|
||||
|------------|---------------|------|-------------|
|
||||
| Format error | 2 minutes | Tier 1 | ~$0.01 |
|
||||
| Unit test / build failure | 15 minutes | Tier 2 | ~$0.50 |
|
||||
| Integration test failure | 45 minutes | Tier 3 | ~$2.00 |
|
||||
| Board target failure | 90 minutes | Tier 4 | ~$5.00 |
|
||||
|
||||
#### Before/After Comparison
|
||||
|
||||
**Before (28 separate workflows):**
|
||||
- All workflows start simultaneously on every PR
|
||||
- Format error detected at 2 min, but expensive tests run for 45+ min anyway
|
||||
- Total wasted compute: ~43 minutes of AWS 4cpu + 8cpu runners
|
||||
- Cost per failed PR: ~$5-10
|
||||
|
||||
**After (Orchestrator + Build All Targets):**
|
||||
- Format error detected at 2 min
|
||||
- Pipeline stops immediately after Tier 1
|
||||
- Total wasted compute: ~2 minutes of GitHub-hosted runners
|
||||
- Cost per failed PR: ~$0.01
|
||||
- **Savings: ~99% on early failures, ~40-60% overall**
|
||||
|
||||
### Caching Strategy
|
||||
|
||||
The CI orchestrator uses several caching mechanisms to avoid redundant work across jobs and runs.
|
||||
|
||||
#### ccache (C++ compilation cache)
|
||||
|
||||
ccache caches compiled object files so unchanged source files skip recompilation on subsequent runs.
|
||||
|
||||
**Cache keys follow this fallback pattern:**
|
||||
|
||||
```
|
||||
ccache-{scope}-{branch}-{sha} # exact match (never hits, since sha is unique)
|
||||
ccache-{scope}-{branch}- # same branch, most recent commit
|
||||
ccache-{scope}-{base_branch}- # base branch (e.g. main), for PR first runs
|
||||
ccache-{scope}- # any branch, last resort
|
||||
```
|
||||
|
||||
The exact-match key (`{sha}`) is used as the **save** key. Since GitHub Actions cache is immutable (write-once), each commit saves a new cache entry. The restore step falls through to the most recent cache from the same branch, or the base branch.
|
||||
|
||||
**Cache scopes and sizes:**
|
||||
|
||||
| Scope | Key prefix | Max size | Contents | Saved by |
|
||||
|-------|-----------|----------|----------|----------|
|
||||
| `ccache-sitl` | `ccache-sitl-` | 400M | PX4 SITL firmware + Gazebo Classic plugins | `build-sitl` (cache seed job) |
|
||||
| `ccache-clang-tidy` | `ccache-clang-tidy-` | 250M | Clang-tidy analysis objects | `clang-tidy` |
|
||||
| `ccache-ubuntu` | `ccache-ubuntu-{container}-` | 250M | Ubuntu build objects (per container version) | `ubuntu-builds` |
|
||||
| `ccache-macos` | `ccache-macos-` | 400M | macOS build objects | `macos-build` |
|
||||
| `ccache-ros-integration` | `ccache-ros-integration-` | 500M | PX4 + xrce-dds + Gazebo + ROS2 libraries | `ros-integration-tests` |
|
||||
| `ccache-ros-translation-{ros}` | `ccache-ros-translation-{ros_version}-` | 250M | ROS translation node build objects (per ROS distro) | `ros-translation-node` |
|
||||
| `ccache-flash-{target}-current` | `ccache-flash-{target}-current-` | 250M | Flash analysis objects for PR HEAD (per board target) | `flash-analysis` |
|
||||
| `ccache-flash-{target}-baseline` | `ccache-flash-{target}-baseline-` | 250M | Flash analysis objects for baseline commit (per board target) | `flash-analysis` |
|
||||
| `px4-ros2-ws` | `px4-ros2-ws-v1-galactic-{image}-{msg-hash}` | — | PX4 ROS 2 Interface Library workspace at `/opt/px4_ws` (keyed on msg hash) | `ros-integration-tests` |
|
||||
|
||||
**Cache seed pattern:** The `build-sitl` job acts as a cache seed for all downstream SITL-related jobs. It builds both `px4_sitl_default` and `sitl_gazebo-classic`, then saves the combined ccache. Downstream jobs (`basic-tests`, `ekf-functional-check`, `sitl-tests`) restore this cache using `actions/cache/restore` (read-only) and get near-100% hit rates without needing to save their own caches.
|
||||
|
||||
**ccache configuration (all jobs):**
|
||||
|
||||
| Setting | Value | Purpose |
|
||||
|---------|-------|---------|
|
||||
| `base_dir` | `${GITHUB_WORKSPACE}` | Normalize paths for cache portability |
|
||||
| `compression` | `true` | Reduce cache storage size |
|
||||
| `compression_level` | `6` | Balance compression ratio vs speed |
|
||||
| `hash_dir` | `false` | Ignore directory paths in hash (portability) |
|
||||
| `compiler_check` | `content` | Hash compiler binary content, not path/mtime |
|
||||
|
||||
#### Emscripten SDK cache
|
||||
|
||||
The failsafe web simulator job caches the Emscripten SDK directory to avoid re-cloning and installing it on every run.
|
||||
|
||||
| Key | Path | Contents |
|
||||
|-----|------|----------|
|
||||
| `emsdk-4.0.15` | `_emscripten_sdk` | Full emsdk installation (pinned to version 4.0.15) |
|
||||
|
||||
This is a simple version-pinned key. Updating the emsdk version in the workflow automatically invalidates the cache.
|
||||
|
||||
#### macOS Homebrew and pip caches
|
||||
|
||||
The macOS build job caches Homebrew packages and pip installations to avoid re-downloading dependencies.
|
||||
|
||||
#### Why separate cache scopes?
|
||||
|
||||
Different jobs use different compilers, flags, and build targets. Sharing a single ccache across all jobs would cause constant eviction as incompatible objects compete for space. Separate scopes ensure each job's cache stays warm with relevant objects.
|
||||
|
||||
#### CI Status
|
||||
|
||||
Check which tier failed by looking at the job names in the GitHub Actions UI:
|
||||
|
||||
- Tier 1 failure (T1 prefix) - Gate checks (format, lint) - Fix formatting/style issues
|
||||
- Tier 2 failure (T2 prefix) - Builds/analysis (tests, static analysis, platform builds) - Fix compilation or test failures
|
||||
- Tier 3 failure (T3 prefix) - Integration tests - Fix SITL/ROS test failures
|
||||
- All tiers passed - Ready for merge (after approvals)
|
||||
|
||||
### Manual Workflow Triggers
|
||||
|
||||
All workflows support manual execution via GitHub Actions UI or CLI:
|
||||
|
||||
**Via GitHub UI:**
|
||||
1. Go to Actions tab
|
||||
2. Select the workflow
|
||||
3. Click "Run workflow"
|
||||
4. Choose branch and click "Run"
|
||||
|
||||
**Via GitHub CLI:**
|
||||
```bash
|
||||
gh workflow run ci-orchestrator.yml
|
||||
gh workflow run build_all_targets.yml
|
||||
```
|
||||
|
||||
This is useful for:
|
||||
- Re-running specific workflows for debugging
|
||||
- Testing workflow changes
|
||||
- Manually triggering builds on branches
|
||||
|
||||
### Troubleshooting
|
||||
|
||||
#### Workflow Not Triggering
|
||||
|
||||
**Possible causes:**
|
||||
- PR only modifies `docs/**` paths (ignored by most workflows)
|
||||
- Orchestrator must complete successfully for `build_all_targets` to trigger (Tier 4)
|
||||
- Workflow was canceled by a newer commit (concurrency control)
|
||||
|
||||
**Solution:**
|
||||
- Check the Actions tab for workflow status
|
||||
- Verify files modified are not in ignored paths
|
||||
- Wait for orchestrator to complete before expecting Tier 4
|
||||
|
||||
#### Unexpected CI Failures
|
||||
|
||||
**Debugging steps:**
|
||||
1. Check which tier failed by looking at job name prefixes (T1, T2, T3)
|
||||
2. Review the specific failed job logs in that tier
|
||||
3. Ensure your branch is rebased on latest main
|
||||
4. Look for infrastructure issues (runner availability, network problems)
|
||||
5. Try re-running failed jobs using "Re-run failed jobs" button
|
||||
|
||||
#### Common Issues
|
||||
|
||||
**Clang-tidy failures:**
|
||||
- On PRs, only changed files are analyzed. Run `python3 Tools/ci/run-clang-tidy-pr.py origin/main` locally to reproduce the incremental check
|
||||
- For a full scan (matches push-to-main behavior): `make clang-tidy`
|
||||
- Fix any warnings or use `// NOLINT` comments for false positives
|
||||
- Inline fix suggestions are posted as PR review comments by the `post-clang-tidy-comments` job (same-repo PRs only)
|
||||
|
||||
**SITL test timeouts:**
|
||||
- Tests have a 45-minute timeout
|
||||
- Check for deadlocks or infinite loops in simulation code
|
||||
- Review MAVSDK test logs in failed artifacts
|
||||
|
||||
**AWS runner unavailable:**
|
||||
- RunsOn provisions runners on-demand
|
||||
- Rarely, provisioning can fail due to AWS capacity
|
||||
- Re-run the workflow or wait a few minutes and try again
|
||||
|
||||
**Checkout errors in workflow_run:**
|
||||
- The `build_all_targets` workflow (Tier 4) uses `workflow_run` trigger
|
||||
- It automatically checks out the correct commit SHA
|
||||
- If issues persist, check GitHub Actions permissions
|
||||
|
||||
### CI Best Practices for Contributors
|
||||
|
||||
#### Before Pushing
|
||||
|
||||
1. **Run format checks locally:**
|
||||
```bash
|
||||
make check_format
|
||||
make shellcheck_all
|
||||
```
|
||||
|
||||
2. **Run unit tests:**
|
||||
```bash
|
||||
make tests
|
||||
```
|
||||
|
||||
3. **Build your target configuration:**
|
||||
```bash
|
||||
make px4_fmu-v5_default # or your target
|
||||
```
|
||||
|
||||
#### During PR Review
|
||||
|
||||
- Monitor CI status in the GitHub UI
|
||||
- Address failures starting from the earliest tier
|
||||
- Don't push new commits while CI is running if possible (cancels previous run)
|
||||
- Use draft PRs to prevent expensive builds until ready
|
||||
|
||||
#### When CI Fails
|
||||
|
||||
1. Check which tier failed by looking at job name prefixes (T1, T2, T3)
|
||||
2. Read the failed job logs carefully
|
||||
3. Reproduce the issue locally if possible
|
||||
4. Fix the root cause, not just the symptom
|
||||
5. Consider if your changes affect other platforms/configurations
|
||||
|
||||
### Future Optimization Opportunities
|
||||
|
||||
#### 1. Enable Spot Instances
|
||||
|
||||
Change `spot=false` to `spot=true` for PR testing to reduce costs by 60-70%. This requires accepting occasional (~5%) provisioning failures.
|
||||
|
||||
#### 2. Path-Based Test Selection
|
||||
|
||||
Only run ROS tests if ROS-related files (`msg/**`, `src/modules/uxrce_dds_client/**`) are modified.
|
||||
|
||||
#### 3. Skip Tests on Draft PRs
|
||||
|
||||
Add `if: github.event.pull_request.draft == false` to expensive jobs, allowing draft PRs to skip CI entirely.
|
||||
|
||||
#### 4. Pre-built Container Images for ROS
|
||||
|
||||
Bake xrce-dds, ROS2 libraries, and Gazebo into updated container images to eliminate build-from-source overhead in integration test jobs (currently ~5-8 minutes per job).
|
||||
|
||||
### Migration History
|
||||
|
||||
This waterfall architecture was introduced to replace 28 independent workflows that all ran simultaneously. The migration:
|
||||
|
||||
- Reduced workflow files from 28 to 14
|
||||
- Eliminated 1,057 lines of redundant YAML
|
||||
- Decreased CI costs by an estimated 40-60%
|
||||
- Improved developer feedback time for common errors
|
||||
- Maintained full test coverage with smarter execution
|
||||
|
||||
The previous workflows that were consolidated:
|
||||
- `checks.yml` -> Tiers 1 & 2
|
||||
- `python_checks.yml` -> Tier 1
|
||||
- `clang-tidy.yml` -> Tier 2
|
||||
- `compile_macos.yml` -> Tier 2
|
||||
- `compile_ubuntu.yml` -> Tier 2
|
||||
- `sitl_tests.yml` -> Tier 3
|
||||
- `ros_integration_tests.yml` -> Tier 3
|
||||
- `mavros_mission_tests.yml` -> Tier 3
|
||||
- `mavros_offboard_tests.yml` -> Tier 3
|
||||
- `ros_translation_node.yml` -> Tier 3
|
||||
- `itcm_check.yml` -> Tier 2
|
||||
- `flash_analysis.yml` -> Tier 2
|
||||
- `failsafe_sim.yml` -> Tier 2
|
||||
- `nuttx_env_config.yml` -> Tier 2
|
||||
- `ekf_functional_change_indicator.yml` -> Tier 2
|
||||
|
||||
The original 5-tier design was subsequently optimized to 4 tiers by merging platform builds (old Tier 3) into Tier 2, since they had no data dependency on basic test results and could run in parallel. This reduced wall-clock time by ~20 minutes on successful runs.
|
||||
|
||||
## Documentation CI
|
||||
|
||||
The documentation pipeline handles building, deploying, and translating the PX4 User Guide.
|
||||
@@ -18,12 +524,12 @@ Jobs are organized in tiers, where each tier depends on the previous one complet
|
||||
|
||||
| Tier | Job | PR | Push / Dispatch | Description |
|
||||
| ---- | -------------- | ---------------------------- | --------------- | ------------------------------------------------------------- |
|
||||
| T1 | Detect Changes | Yes | — | Checks if source code files changed (triggers metadata regen) |
|
||||
| T2 | PR Metadata | Yes (conditional) | — | Builds PX4 SITL and regenerates all auto-generated docs |
|
||||
| T2 | Metadata Sync | — | Yes | Builds PX4 SITL, regenerates metadata, auto-commits |
|
||||
| T2 | Link Check | Yes | — | Checks for broken links in changed files, posts PR comment |
|
||||
| T1 | Detect Changes | Yes | - | Checks if source code files changed (triggers metadata regen) |
|
||||
| T2 | PR Metadata | Yes (conditional) | - | Builds PX4 SITL and regenerates all auto-generated docs |
|
||||
| T2 | Metadata Sync | - | Yes | Builds PX4 SITL, regenerates metadata, auto-commits |
|
||||
| T2 | Link Check | Yes | - | Checks for broken links in changed files, posts PR comment |
|
||||
| T3 | Build Site | Yes (if docs/source changed) | Yes (after T2) | Builds the VitePress documentation site |
|
||||
| T4 | Deploy | — | Yes | Deploys to AWS S3 |
|
||||
| T4 | Deploy | - | Yes | Deploys to AWS S3 |
|
||||
|
||||
#### Pull Request Flow
|
||||
|
||||
@@ -31,15 +537,15 @@ When a PR modifies files in `docs/**` or the orchestrator workflow file itself,
|
||||
|
||||
```txt
|
||||
PR Event
|
||||
│
|
||||
▼
|
||||
|
|
||||
v
|
||||
┌─────────────────────────────────────┐
|
||||
│ T1: Detect Changes │
|
||||
│ • Checks if src/msg/ROMFS changed │
|
||||
└─────────────────┬───────────────────┘
|
||||
│
|
||||
┌───────┴───────┐
|
||||
▼ ▼
|
||||
v v
|
||||
┌──────────────────┐ ┌─────────────────────────┐
|
||||
│ T2: PR Metadata │ │ T2: Link Check (~30s) │
|
||||
│ (conditional) │ │ • Detects changed .md │
|
||||
@@ -50,16 +556,16 @@ PR Event
|
||||
│ failsafe web │ │
|
||||
└────────┬─────────┘ │
|
||||
└───────────┬────────────┘
|
||||
▼
|
||||
v
|
||||
┌─────────────────────────────────────┐
|
||||
│ T3: Build Site (~7-10 min) │
|
||||
│ (skipped if only workflow YAML │
|
||||
│ changed — no docs/source changes) │
|
||||
│ changed - no docs/source changes) │
|
||||
│ • Builds VitePress site │
|
||||
│ • Verifies no build errors │
|
||||
└─────────────────┬───────────────────┘
|
||||
│
|
||||
▼
|
||||
v
|
||||
DONE
|
||||
```
|
||||
|
||||
@@ -73,12 +579,12 @@ PR Event
|
||||
#### Push / Dispatch Flow (main/release branches)
|
||||
|
||||
When changes are pushed to `main` or `release/**` branches (or a `workflow_dispatch` is triggered), the workflow regenerates metadata, builds, and deploys.
|
||||
Only `main` and `release/*` branches are accepted for deploy — other branches will fail with a clear error.
|
||||
Only `main` and `release/*` branches are accepted for deploy -- other branches will fail with a clear error.
|
||||
|
||||
```txt
|
||||
Push / Dispatch Event
|
||||
│
|
||||
▼
|
||||
|
|
||||
v
|
||||
┌─────────────────────────────────────┐
|
||||
│ T2: Metadata Sync (~10-15 min) │
|
||||
│ • Builds px4_sitl_default │
|
||||
@@ -90,14 +596,14 @@ Push / Dispatch Event
|
||||
│ (with [skip ci]) │
|
||||
└─────────────────┬───────────────────┘
|
||||
│
|
||||
▼
|
||||
v
|
||||
┌─────────────────────────────────────┐
|
||||
│ T3: Build Site (~7-10 min) │
|
||||
│ • Builds VitePress site │
|
||||
│ • Uploads build artifact │
|
||||
└─────────────────┬───────────────────┘
|
||||
│
|
||||
▼
|
||||
v
|
||||
┌─────────────────────────────────────┐
|
||||
│ T4: Deploy (~3 min) │
|
||||
│ • Syncs to AWS S3 │
|
||||
@@ -192,3 +698,12 @@ Jobs run on [runs-on](https://runs-on.com/) self-hosted runners with S3 cache:
|
||||
| T2: Link Check | ubuntu-latest |
|
||||
| T3: Build Site | 4 CPU |
|
||||
| T4: Deploy | ubuntu-latest |
|
||||
|
||||
## Contact
|
||||
|
||||
For CI-related questions or issues:
|
||||
- GitHub Issues: Tag the CI maintainer
|
||||
- Slack: #infrastructure channel
|
||||
- Dev Call: Bring up during weekly meeting
|
||||
|
||||
All workflows can be found in [.github/workflows/](https://github.com/PX4/PX4-Autopilot/tree/main/.github/workflows).
|
||||
|
||||
+3
-1
@@ -179,6 +179,7 @@
|
||||
- [CubePilot Cube Orange (CubePilot)](flight_controller/cubepilot_cube_orange.md)
|
||||
- [CubePilot Cube Yellow (CubePilot)](flight_controller/cubepilot_cube_yellow.md)
|
||||
- [Cube 배선 퀵 스타트](assembly/quick_start_cube.md)
|
||||
- [Gear Up AirBrainH743](flight_controller/gearup_airbrainh743.md)
|
||||
- [Holybro Kakute H7v2](flight_controller/kakuteh7v2.md)
|
||||
- [Holybro Kakute H7mini](flight_controller/kakuteh7mini.md)
|
||||
- [Holybro Kakute H7](flight_controller/kakuteh7.md)
|
||||
@@ -255,7 +256,7 @@
|
||||
- [Benewake TFmini 라이다](sensor/tfmini.md)
|
||||
- [LeddarOne 라이다](sensor/leddar_one.md)
|
||||
- [Lidar-Lite](sensor/lidar_lite.md)
|
||||
- [Lightware Lidars (SF/LW)](sensor/sfxx_lidar.md)
|
||||
- [Lightware Lidars (SF/LW/GRF)](sensor/sfxx_lidar.md)
|
||||
- [Lightware SF45 Rotary Lidar](sensor/sf45_rotating_lidar.md)
|
||||
- [TeraRanger ](sensor/teraranger.md)
|
||||
- [✘ Lanbao PSK-CM8JL65-CC5](sensor/cm8jl65_ir_distance_sensor.md)
|
||||
@@ -932,6 +933,7 @@
|
||||
- [라이센스](contribute/licenses.md)
|
||||
|
||||
- [출시](releases/index.md)
|
||||
- [Release Process](releases/release_process.md)
|
||||
- [main (alpha)](releases/main.md)
|
||||
- [1.17 (alpha)](releases/1.17.md)
|
||||
- [1.16 (stable)](releases/1.16.md)
|
||||
|
||||
@@ -12,19 +12,16 @@ The [ARK Jetson Pixhawk Autopilot Bus (PAB) Carrier](https://arkelectron.gitbook
|
||||
## 사양
|
||||
|
||||
- **Power Requirements**
|
||||
|
||||
- 5V
|
||||
- 4A minimum (dependent on usage and peripherals)
|
||||
|
||||
- **Additional Features**
|
||||
|
||||
- Pixhawk Autopilot Bus (PAB) Form Factor ([PAB Standard](https://github.com/pixhawk/Pixhawk-Standards/blob/master/DS-010%20Pixhawk%20Autopilot%20Bus%20Standard.pdf))
|
||||
- MicroSD Slot
|
||||
- USA-built, NDAA compliant
|
||||
- Integrated 1W heater for sensor stability in extreme conditions
|
||||
|
||||
- **Physical Details**
|
||||
|
||||
- Weight:
|
||||
- Without Jetson and Flight Controller – 80g
|
||||
- With Jetson, no heatsink or Flight Controller – 108g
|
||||
|
||||
@@ -170,7 +170,6 @@ To enable this MAVLink instance on the FC:
|
||||

|
||||
|
||||
2. [Set the parameters](../advanced_config/parameters.md):
|
||||
|
||||
- `MAV_1_CONFIG` = `102`
|
||||
- `MAV_1_MODE = 2`
|
||||
- `SER_TEL2_BAUD` = `921600`
|
||||
@@ -184,7 +183,6 @@ On the RPi side:
|
||||
1. Connect to the RPi (using WiFi, a router, or a WiFi Dongle).
|
||||
|
||||
2. Enable the RPi serial port by running `RPi-config`
|
||||
|
||||
- Go to `3 Interface Options`, then `I6 Serial Port`.
|
||||
Then choose:
|
||||
- `login shell accessible over serial → No`
|
||||
|
||||
@@ -145,7 +145,6 @@ Enter the following commands (in sequence) a terminal to configure Ubuntu for RP
|
||||
```
|
||||
|
||||
3. Go to the **Interface Option** and then click **Serial Port**.
|
||||
|
||||
- Select **No** to disable serial login shell.
|
||||
- Select **Yes** to enable the serial interface.
|
||||
- Click **Finish** and restart the RPi.
|
||||
@@ -164,7 +163,6 @@ Enter the following commands (in sequence) a terminal to configure Ubuntu for RP
|
||||
```
|
||||
|
||||
6. Then save the file and restart the RPi.
|
||||
|
||||
- In `nano` you can save the file using the following sequence of keyboard shortcuts: **ctrl+x**, **ctrl+y**, **Enter**.
|
||||
|
||||
7. Check that the serial port is available.
|
||||
|
||||
@@ -214,7 +214,6 @@ The Lua script works by extracting the `obstacle_distance_fused` data at each ti
|
||||
|
||||
3. Open PlotJuggler and navigate to the **Tools > Reactive Script Editor** section.
|
||||
In the **Script Editor** tab, add following scripts in the appropriate sections:
|
||||
|
||||
- **Global code, executed once:**
|
||||
|
||||
```lua
|
||||
|
||||
@@ -33,7 +33,6 @@ The instructions below might be used to create a task named _MyTask_:
|
||||
- FlightTaskMyTask.cpp
|
||||
|
||||
3. Update **CMakeLists.txt** for the new task
|
||||
|
||||
- Copy the contents of the **CMakeLists.txt** for another task - e.g. [Orbit/CMakeLists.txt](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/flight_mode_manager/tasks/Orbit/CMakeLists.txt)
|
||||
|
||||
- Update the copyright to the current year
|
||||
|
||||
@@ -84,16 +84,9 @@ The test steps are:
|
||||
If an [Enable/Disable Autotune Switch](#enable-disable-autotune-switch) is configured you can just toggle the switch to the "enabled" position.
|
||||
|
||||
</div></div>
|
||||
|
||||
1. In QGroundControl, open the menu **Vehicle setup > PID Tuning**:
|
||||
|
||||

|
||||
|
||||
2. Select either the _Rate Controller_ or _Attitude Controller_ tabs.
|
||||
|
||||
3. Ensure that the **Autotune enabled** button is enabled (this will display the **Autotune** button and remove the manual tuning selectors).
|
||||
|
||||
4. Read the warning popup and click on **OK** to start tuning.
|
||||
 2. Select either the _Rate Controller_ or _Attitude Controller_ tabs. 3. Ensure that the **Autotune enabled** button is enabled (this will display the **Autotune** button and remove the manual tuning selectors). 4. Read the warning popup and click on **OK** to start tuning.
|
||||
|
||||
<div style="display: inline;" v-if="$frontmatter.frame === 'Multicopter'">
|
||||
|
||||
|
||||
@@ -22,7 +22,6 @@ Performing this calibration step is only recommended if the autopilot's orientat
|
||||
:::
|
||||
|
||||
4. Place the vehicle in its level flight orientation on a level surface:
|
||||
|
||||
- For planes this is the position during level flight (planes tend to have their wings slightly pitched up!)
|
||||
- For copters this is the hover position.
|
||||
|
||||
|
||||
@@ -77,7 +77,6 @@ To setup and configure a helicopter:
|
||||
3. Remove the rotor blades and propellers
|
||||
|
||||
4. Assign motors and servos to outputs and test (also in [Actuator configuration](../config/actuators.md)):
|
||||
|
||||
1. Assign the [motors and servos to the outputs](../config/actuators.md#actuator-outputs).
|
||||
2. Power the vehicle with a battery and use the [actuator testing sliders](../config/actuators.md#actuator-testing) to validate correct servo and motor assignment and direction.
|
||||
|
||||
|
||||
@@ -140,7 +140,6 @@ Make sure to have assigned a [Kill switch](../config/safety.md#emergency-switche
|
||||
13. 모든 축에서 자세 콘트롤러에 대하여 튜닝 프로세스를 반복하십시오.
|
||||
|
||||
14. Repeat the tuning process for the velocity and positions controllers (on all the axes).
|
||||
|
||||
- Use Position mode when tuning these controllers
|
||||
- Select the **Simple position control** option in the _Position control mode ..._ selector (this allows direct control for the generation of step inputs)
|
||||
|
||||
|
||||
@@ -18,28 +18,37 @@ A drive mode will only work properly if all the configuration for the preceding
|
||||
|
||||
## Flashing the Rover Build
|
||||
|
||||
Rovers use a custom build that must be flashed onto your flight controller instead of the default PX4 build:
|
||||
Rover is built as a [firmware variant](../dev_setup/building_px4.md#px4-make-build-targets), and must be installed as "Custom Firmware" in QGC (other vehicles are present in the default variant).
|
||||
|
||||
1. First build the rover firmware for your flight controller from the `main` branch (there is no release build, so you can't just select this build from QGroundControl).
|
||||
The release versions of Rover firmware for different boards are attached to the associated GitHub release tag.
|
||||
For example, you can find `px4_fmu-v5x_rover.px4` on [PX4-Autopilot/releases/tag/v1.16.1](https://github.com/PX4/PX4-Autopilot/releases/tag/v1.16.1).
|
||||
For the `main` branch version of Rover you will need to [build the firmware](#building-rover).
|
||||
|
||||
To build for rover with the `make` command, replace the `_default` suffix with `_rover`.
|
||||
For example, to build rover for px4_fmu-v6x boards, you would use the command:
|
||||
Load the firmware onto your flight controller as "Custom Firmware" (see [Loading Firmware > Installing PX4 Main, Beta or Custom Firmware](../config/firmware.md#installing-px4-main-beta-or-custom-firmware)).
|
||||
|
||||
```sh
|
||||
make px4_fmu-v6x_rover
|
||||
```
|
||||
## Building Rover
|
||||
|
||||
::: info
|
||||
You can also enable the modules in default builds by adding these lines to your [board configuration](../hardware/porting_guide_config.md) (e.g. for fmu-v6x you might add them to [`main/boards/px4/fmu-v6x/default.px4board`](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board)):
|
||||
Rover is built as the `rover` [firmware variant](../dev_setup/building_px4.md#px4-make-build-targets).
|
||||
What this means is that when building the firmware with the `make` command, you replace the `_default` suffix in the configuration target with `_rover`.
|
||||
|
||||
```sh
|
||||
CONFIG_MODULES_ROVER_ACKERMANN=y
|
||||
CONFIG_MODULES_ROVER_DIFFERENTIAL=y
|
||||
CONFIG_MODULES_ROVER_MECANUM=y
|
||||
```
|
||||
For example, to build rover for `px4_fmu-v6x` boards, you would use the following command:
|
||||
|
||||
Note that adding the rover modules may lead to flash overflow, in which case you will need to disable modules that you do not plan to use (such as those related to multicopter or fixed wing).
|
||||
```sh
|
||||
make px4_fmu-v6x_rover
|
||||
```
|
||||
|
||||
Note that configuration targets are constructed with the format "VENDOR_MODEL_VARIANT".
|
||||
|
||||
The built firmware can be installed as custom firmware, as shown above in in [Flashing the Rover Build](#flashing-the-rover-build).
|
||||
|
||||
:::info
|
||||
You can also enable the modules in default builds by adding these lines to your [board configuration](../hardware/porting_guide_config.md) (e.g. for fmu-v6x you might add them to [`main/boards/px4/fmu-v6x/default.px4board`](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6x/default.px4board)):
|
||||
|
||||
```sh
|
||||
CONFIG_MODULES_ROVER_ACKERMANN=y
|
||||
CONFIG_MODULES_ROVER_DIFFERENTIAL=y
|
||||
CONFIG_MODULES_ROVER_MECANUM=y
|
||||
```
|
||||
|
||||
Adding the rover modules may lead to flash overflow, in which case you will need to disable modules that you do not plan to use (such as those related to multicopter or fixed wing).
|
||||
:::
|
||||
|
||||
2. Load the **custom firmware** that you just built onto your flight controller (see [Loading Firmware > Installing PX4 Main, Beta or Custom Firmware](../config/firmware.md#installing-px4-main-beta-or-custom-firmware)).
|
||||
|
||||
@@ -307,7 +307,6 @@ If the airframe is for a **new group** you additionally need to:
|
||||
```
|
||||
|
||||
3. Update _QGroundControl_:
|
||||
|
||||
- Add the svg image for the group into: [src/AutopilotPlugins/Common/images](https://github.com/mavlink/qgroundcontrol/tree/master/src/AutoPilotPlugins/Common/Images)
|
||||
- Add reference to the svg image into [qgcimages.qrc](https://github.com/mavlink/qgroundcontrol/blob/master/qgcimages.qrc), following the pattern below:
|
||||
|
||||
|
||||
@@ -39,16 +39,6 @@ Navigate into the **PX4-Autopilot** directory and start [Gazebo SITL](../sim_gaz
|
||||
make px4_sitl gz_x500
|
||||
```
|
||||
|
||||
:::details
|
||||
If you installed Gazebo Classic
|
||||
Start [Gazebo Classic SITL](../sim_gazebo_classic/index.md) using the following command:
|
||||
|
||||
```sh
|
||||
make px4_sitl gazebo-classic
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
This will bring up the PX4 console:
|
||||
|
||||

|
||||
@@ -89,6 +79,16 @@ cd PX4-Autopilot
|
||||
make px4_fmu-v4_default
|
||||
```
|
||||
|
||||
:::tip
|
||||
You can also build using the [px4-dev Docker container](../test_and_ci/docker.md) without installing the toolchain locally.
|
||||
From the PX4-Autopilot directory:
|
||||
|
||||
```sh
|
||||
./Tools/docker_run.sh 'make px4_fmu-v5_default'
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
A successful run will end with similar output to:
|
||||
|
||||
```sh
|
||||
@@ -145,7 +145,8 @@ The following list shows the build commands for the [Pixhawk standard](../flight
|
||||
- [Pixhawk 1 (FMUv2)](../flight_controller/pixhawk.md): `make px4_fmu-v2_default`
|
||||
|
||||
:::warning
|
||||
You **must** use a supported version of GCC to build this board (e.g. the same as used by [CI/docker](../test_and_ci/docker.md)) or remove modules from the build. PX4가 보드의 1MB 플래시 제한에 가깝기 때문에, 지원되지 않는 GCC로 빌드가 실패할 수 있습니다.
|
||||
You **must** use a supported version of GCC to build this board (e.g. the `gcc-arm-none-eabi` package from the current Ubuntu LTS, which is the same toolchain used by CI) or remove modules from the build.
|
||||
PX4가 보드의 1MB 플래시 제한에 가깝기 때문에, 지원되지 않는 GCC로 빌드가 실패할 수 있습니다.
|
||||
|
||||
:::
|
||||
|
||||
@@ -211,7 +212,7 @@ The `region 'flash' overflowed by XXXX bytes` error indicates that the firmware
|
||||
This is common for `make px4_fmu-v2_default` builds, where the flash size is limited to 1MB.
|
||||
|
||||
If you're building the _vanilla_ master branch, the most likely cause is using an unsupported version of GCC.
|
||||
In this case, install the version specified in the [Developer Toolchain](../dev_setup/dev_env.md) instructions.
|
||||
In this case, install the `gcc-arm-none-eabi` package from the current Ubuntu LTS as described in the [Developer Toolchain](../dev_setup/dev_env.md) instructions.
|
||||
|
||||
If building your own branch, it is possible that you have increased the firmware size over the 1MB limit.
|
||||
PX4 빌드 시스템은 많은 수의 파일을 오픈하므로, 이 갯수를 초과할 수 있습니다.
|
||||
@@ -224,7 +225,7 @@ The PX4 build system opens a large number of files, so you may exceed this numbe
|
||||
The build toolchain will then report `Too many open files` for many files, as shown below:
|
||||
|
||||
```sh
|
||||
/usr/local/Cellar/gcc-arm-none-eabi/20171218/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/bin/ld: cannot find NuttX/nuttx/fs/libfs.a: Too many open files
|
||||
arm-none-eabi-ld: cannot find NuttX/nuttx/fs/libfs.a: Too many open files
|
||||
```
|
||||
|
||||
The solution is to increase the maximum allowed number of open files (e.g. to 300).
|
||||
@@ -247,34 +248,9 @@ xcode-select --install
|
||||
sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/* /usr/local/include/
|
||||
```
|
||||
|
||||
### Ubuntu 18.04: arm_none_eabi_gcc와 관련된 컴파일 오류
|
||||
|
||||
Build issues related to `arm_none_eabi_gcc`may be due to a broken g++ toolchain installation.
|
||||
You can verify that this is the case by checking for missing dependencies using:
|
||||
|
||||
```sh
|
||||
arm-none-eabi-gcc --version
|
||||
arm-none-eabi-g++ --version
|
||||
arm-none-eabi-gdb --version
|
||||
arm-none-eabi-size --version
|
||||
```
|
||||
|
||||
Example of bash output with missing dependencies:
|
||||
|
||||
```sh
|
||||
arm-none-eabi-gdb --version
|
||||
arm-none-eabi-gdb: command not found
|
||||
```
|
||||
|
||||
This can be resolved by removing and [reinstalling the compiler](https://askubuntu.com/questions/1243252/how-to-install-arm-none-eabi-gdb-on-ubuntu-20-04-lts-focal-fossa).
|
||||
|
||||
### Ubuntu 18.04: Visual Studio Code는 이 큰 작업 영역에서 파일 변경 사항을 감시할 수 없습니다.
|
||||
|
||||
See [Visual Studio Code IDE (VSCode) > Troubleshooting](../dev_setup/vscode.md#troubleshooting).
|
||||
|
||||
### Python 패키지를 가져오지 못했습니다.
|
||||
|
||||
"Failed to import" errors when running the `make px4_sitl jmavsim` command indicates that some Python packages are not installed (where expected).
|
||||
"Failed to import" errors when running the `make px4_sitl gz_x500` command indicates that some Python packages are not installed (where expected).
|
||||
|
||||
```sh
|
||||
Failed to import jinja2: No module named 'jinja2'
|
||||
@@ -282,12 +258,12 @@ You may need to install it using:
|
||||
pip3 install --user jinja2
|
||||
```
|
||||
|
||||
다음과 같이 종속성을 명시적으로 설치하여, 이 문제를 해결할 수 있습니다.
|
||||
If you have already installed these dependencies this may be because there is more than one Python version on the computer (e.g. Python 2.7.16 and Python 3.8.3), and the module is not present in the version used by the build toolchain.
|
||||
|
||||
You should be able to fix this by explicitly installing the dependencies as shown:
|
||||
You should be able to fix this by installing the dependencies from the repository's requirements file:
|
||||
|
||||
```sh
|
||||
pip3 install --user pyserial empty toml numpy pandas jinja2 pyyaml pyros-genmsg packaging
|
||||
pip3 install --user -r Tools/setup/requirements.txt
|
||||
```
|
||||
|
||||
## PX4 빌드 타겟 만들기
|
||||
|
||||
@@ -23,7 +23,7 @@ A Taranis RC and a mid-range Android tablet make a very inexpensive field kit.
|
||||
|
||||
- Lenovo Thinkpad with i5-core running Windows 11
|
||||
- MacBook Pro (early 2015 and later) with macOS 10.15 or later
|
||||
- Lenovo Thinkpad i5 with Ubuntu Linux 20.04 or later
|
||||
- Lenovo Thinkpad i5 with Ubuntu Linux 22.04 or later
|
||||
|
||||
- **Ground control station** (computer or tablet):
|
||||
- iPad (may require Wifi telemetry adapter)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
The _supported platforms_ for PX4 development are:
|
||||
|
||||
- [Ubuntu Linux (24.04/22.04)](../dev_setup/dev_env_linux_ubuntu.md) — Recommended
|
||||
- [Ubuntu Linux (24.04/22.04)](../dev_setup/dev_env_linux_ubuntu.md)
|
||||
- [Windows (10/11)](../dev_setup/dev_env_windows_wsl.md) — via WSL2
|
||||
- [macOS](../dev_setup/dev_env_mac.md)
|
||||
|
||||
@@ -15,9 +15,9 @@ The _supported platforms_ for PX4 development are:
|
||||
| **NuttX based hardware:** [Pixhawk Series](../flight_controller/pixhawk_series.md), [Crazyflie](../complete_vehicles_mc/crazyflie2.md) | ✓ | ✓ | ✓ |
|
||||
| **Linux-based hardware:** [Raspberry Pi 2/3](../flight_controller/raspberry_pi_navio2.md) | ✓ | | |
|
||||
| **Simulation:** [Gazebo SITL](../sim_gazebo_gz/index.md) | ✓ | ✓ | ✓ |
|
||||
| **Simulation:** [Gazebo Classic SITL](../sim_gazebo_classic/index.md) | ✓ | ✓ | ✓ |
|
||||
| **Simulation:** [ROS with Gazebo Classic](../simulation/ros_interface.md) | ✓ | | ✓ |
|
||||
| **Simulation:** ROS 2 with Gazebo | ✓ | | ✓ |
|
||||
| **Simulation:** [Gazebo Classic SITL](../sim_gazebo_classic/index.md) | | ✓ | ✓ |
|
||||
| **Simulation:** [ROS with Gazebo Classic](../simulation/ros_interface.md) | | | ✓ |
|
||||
|
||||
Experienced Docker users can also build with the containers used by our continuous integration system: [Docker Containers](../test_and_ci/docker.md)
|
||||
|
||||
|
||||
@@ -39,8 +39,9 @@ You may want to also install `python-pip` and `screen`.
|
||||
아래 스크립트로 GCC 7-2017-q4를 설치합니다.
|
||||
|
||||
:::warning
|
||||
This version of GCC is out of date.
|
||||
At time of writing the current version on Ubuntu is `9-2020-q2-update` (see [focal nuttx docker file](https://github.com/PX4/PX4-containers/blob/master/docker/Dockerfile_nuttx-focal#L28))
|
||||
This version of GCC is very outdated.
|
||||
PX4 now uses the `gcc-arm-none-eabi` package from the current Ubuntu LTS (GCC 13.2.1 on Ubuntu 24.04).
|
||||
This CentOS guide is community-maintained and may not produce working builds.
|
||||
:::
|
||||
|
||||
```sh
|
||||
|
||||
@@ -4,21 +4,14 @@ The following instructions use a bash script to set up the PX4 development envir
|
||||
|
||||
The environment includes:
|
||||
|
||||
- [Gazebo Simulator](../sim_gazebo_gz/index.md) ("Harmonic")
|
||||
- [Build toolchain for Pixhawk (and other NuttX-based hardware)](../dev_setup/building_px4.md#nuttx-pixhawk-based-boards).
|
||||
|
||||
On Ubuntu 22.04:
|
||||
|
||||
- [Gazebo Classic Simulator](../sim_gazebo_classic/index.md) can be used instead of Gazebo.
|
||||
Gazebo is nearing feature-parity with Gazebo-Classic on PX4, and will soon replace it for all use cases.
|
||||
- [Gazebo Simulator](../sim_gazebo_gz/index.md) (Gazebo Harmonic)
|
||||
- [Build toolchain for Pixhawk (and other NuttX-based hardware)](../dev_setup/building_px4.md#nuttx-pixhawk-based-boards) using the `gcc-arm-none-eabi` compiler from the Ubuntu package manager.
|
||||
|
||||
The build toolchain for other flight controllers, simulators, and working with ROS are discussed in the [Other Targets](#other-targets) section below.
|
||||
|
||||
:::details
|
||||
Can I use an older version of Ubuntu?
|
||||
PX4 supports the current and last Ubuntu LTS release where possible.
|
||||
Older releases are not supported (so you can't raise defects against them), but may still work.
|
||||
For example, Gazebo Classic setup is included in our standard build instructions for macOS, Ubuntu 18.04 and 20.04, and Windows on WSL2 for the same hosts.
|
||||
:::info
|
||||
PX4 targets the **current Ubuntu LTS** (24.04) for CI and release builds, with the **previous LTS** (22.04) also supported.
|
||||
Older Ubuntu versions are not supported and may not work.
|
||||
:::
|
||||
|
||||
## Simulation and NuttX (Pixhawk) Targets
|
||||
@@ -52,9 +45,7 @@ The script is intended to be run on _clean_ Ubuntu LTS installations, and may no
|
||||
- 스크립트가 진행되는 동안 모든 프롬프트를 확인합니다.
|
||||
- You can use the `--no-nuttx` and `--no-sim-tools` options to omit the NuttX and/or simulation tools.
|
||||
|
||||
3. If you need Gazebo Classic (Ubuntu 22.04 only) then you can manually remove Gazebo and install it by following the instructions in [Gazebo Classic > Installation](../sim_gazebo_classic/index.md#installation).
|
||||
|
||||
4. 완료되면 컴퓨터를 재부팅합니다.
|
||||
3. 완료되면 컴퓨터를 재부팅합니다.
|
||||
|
||||
:::details
|
||||
Additional notes
|
||||
@@ -63,10 +54,11 @@ These notes are provided "for information only":
|
||||
- This setup is supported by the PX4 Dev Team.
|
||||
The instructions may also work on other Debian Linux based systems.
|
||||
|
||||
- You can verify the NuttX installation by confirming the `gcc` version as shown:
|
||||
- You can verify the NuttX installation by confirming `gcc` is available.
|
||||
The version depends on your Ubuntu release (e.g. GCC 13.2.1 on Ubuntu 24.04):
|
||||
|
||||
```sh
|
||||
$arm-none-eabi-gcc --version
|
||||
$ arm-none-eabi-gcc --version
|
||||
|
||||
arm-none-eabi-gcc (15:13.2.rel1-2) 13.2.1 20231009
|
||||
Copyright (C) 2023 Free Software Foundation, Inc.
|
||||
|
||||
@@ -61,20 +61,20 @@ To install WSL2 with Ubuntu on a new installation of Windows 10 or 11:
|
||||
wsl --install
|
||||
```
|
||||
|
||||
- Ubuntu 20.04 ([Gazebo-Classic Simulation](../sim_gazebo_classic/index.md))
|
||||
|
||||
```sh
|
||||
wsl --install -d Ubuntu-20.04
|
||||
```
|
||||
|
||||
- Ubuntu 22.04 ([Gazebo Simulation](../sim_gazebo_gz/index.md))
|
||||
|
||||
```sh
|
||||
wsl --install -d Ubuntu-22.04
|
||||
```
|
||||
|
||||
- Ubuntu 24.04 ([Gazebo Simulation](../sim_gazebo_gz/index.md))
|
||||
|
||||
```sh
|
||||
wsl --install -d Ubuntu-24.04
|
||||
```
|
||||
|
||||
::: info
|
||||
You can also install[Ubuntu 20.04](https://www.microsoft.com/store/productId/9MTTCL66CPXJ) and [Ubuntu 22.04](https://www.microsoft.com/store/productId/9PN20MSR04DW) from the store, which allows you to delete the application using the normal Windows Add/Remove settings:
|
||||
You can also [Ubuntu 24.04](https://www.microsoft.com/store/productId/9nz3klhxdjp5) or [Ubuntu 22.04](https://www.microsoft.com/store/productId/9PN20MSR04DW) from Microsoft Store, which allows you to delete the application using the normal Windows Add/Remove settings.
|
||||
|
||||
:::
|
||||
|
||||
@@ -110,7 +110,7 @@ To open a WSL shell using a command prompt:
|
||||
```
|
||||
|
||||
```sh
|
||||
wsl -d Ubuntu-20.04
|
||||
wsl -d Ubuntu-24.04
|
||||
```
|
||||
|
||||
If you only have one version of Ubuntu, you can just use `wsl`.
|
||||
|
||||
@@ -61,7 +61,6 @@ You must already have installed the command line [PX4 developer environment](../
|
||||
빌드를 진행하려면:
|
||||
|
||||
1. Select your build target ("cmake build config"):
|
||||
|
||||
- The current _cmake build target_ is shown on the blue _config_ bar at the bottom (if this is already your desired target, skip to next step).
|
||||

|
||||
|
||||
@@ -134,10 +133,10 @@ In order for the code completion to work (and other IntelliSense magic) you need
|
||||
|
||||
이 섹션에는 설정 및 빌드 오류에 대한 지침이 포함되어 있습니다.
|
||||
|
||||
### Ubuntu 18.04: "Visual Studio Code는 이 큰 작업 영역에서 파일 변경 사항을 감시할 수 없습니다."
|
||||
### "Visual Studio Code is unable to watch for file changes in this large workspace"
|
||||
|
||||
이 오류는 시작시에 나타납니다.
|
||||
On some systems, there is an upper-limit of 8192 file handles imposed on applications, which means that VSCode might not be able to detect file modifications in `/PX4-Autopilot`.
|
||||
On some systems, there is an upper-limit on file handles imposed on applications, which means that VSCode might not be able to detect file modifications in `/PX4-Autopilot`.
|
||||
|
||||
메모리 소비를 희생시키면서 오류를 방지하기 위해 이 제한을 늘릴 수 있습니다.
|
||||
Follow the [instructions here](https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc).
|
||||
|
||||
@@ -100,7 +100,6 @@ In order to use dual ZED-F9P GPS heading in PX4, follow these steps:
|
||||
3. Components should be visible on the left panel.
|
||||
Click on the first `_Component_<ID#>` that maps to the ZED-F9P DroneCAN node (below shown as _Component 124_).
|
||||
4. Click on the _GPS_ subsection and configure the parameters listed below:
|
||||
|
||||
- `GPS_TYPE`: Either set to `17` for moving baseline _base_, or set to `18` to be the moving baseline _rover_.
|
||||
One F9P MUST be _rover_, and the other MUST be _base_.
|
||||
- `GPS_AUTO_CONFIG`: set to 1 for both the rover and base
|
||||
|
||||
@@ -39,12 +39,10 @@ Order this module from:
|
||||
- 10 Pin JST-SH Debug
|
||||
|
||||
- Motor & Battery Connectors (with-connector version)
|
||||
|
||||
- MR30 Connector Limit Per Motor: 30A Continuous, 40A Burst
|
||||
- Four MR30 Motor Connectors
|
||||
|
||||
- Dimensions (with connectors)
|
||||
|
||||
- Size: 77.00mm x 42.00mm x 9.43mm
|
||||
- Mounting Pattern: 30.5mm
|
||||
- Weight: 24g
|
||||
|
||||
@@ -26,7 +26,6 @@ AIRLink has two computers and integrated LTE Module:
|
||||
## 사양
|
||||
|
||||
- **Sensors**
|
||||
|
||||
- 3x Accelerometers, 3x Gyroscopes, 3x Magnetometers, 3x Pressure sensorss
|
||||
- GNSS, Rangefinders, Lidars, Optical Flow, Cameras
|
||||
- 3x-redundant IMU
|
||||
@@ -34,7 +33,6 @@ AIRLink has two computers and integrated LTE Module:
|
||||
- Temperature stabilization
|
||||
|
||||
- **Flight Controller**
|
||||
|
||||
- STM32F7, ARM Cortex M7 with FPU, 216 MHz, 2MB Flash, 512 kB RAM
|
||||
- STM32F1, I/O co-processor
|
||||
- Ethernet, 10/100 Mbps
|
||||
@@ -51,7 +49,6 @@ AIRLink has two computers and integrated LTE Module:
|
||||
- Safety switch / LED option
|
||||
|
||||
- **AI Mission Computer**
|
||||
|
||||
- 6-Core CPU: Dual-Core Cortex-A72 + Quad-Core Cortex-A53
|
||||
- GPU Mali-T864, OpenGL ES1.1/2.0/3.0/3.1
|
||||
- VPU with 4K VP8/9, 4K 10bits H265/H264 60fps Decoding
|
||||
@@ -65,7 +62,6 @@ AIRLink has two computers and integrated LTE Module:
|
||||
- 2x Video: 4-Lane MIPI CSI (FPV Camera) and 4-Lane MIPI CSI with HMDI Input (Payload Camera)
|
||||
|
||||
- **LTE/5G Connectivity Module**
|
||||
|
||||
- Up to 600 Mbps bandwidth
|
||||
- 5G sub-6 and mmWave, SA and NSA operations
|
||||
- 4G Cat 20, up to 7xCA, 256-QAM DL/UL, 2xCA UL
|
||||
@@ -142,7 +138,6 @@ SmartAP AIRLink's Core edition is intended for medium to high volume production
|
||||

|
||||
|
||||
- **Left side interfaces:**
|
||||
|
||||
- Power input with voltage & current monitoring
|
||||
- AI Mission Computer micro SD card
|
||||
- Flight Controller micro SD card
|
||||
@@ -170,13 +165,13 @@ SmartAP AIRLink's Core edition is intended for medium to high volume production
|
||||
|
||||
- **RC Connector - JST GH SM06B-GHS-TB**
|
||||
|
||||
| Pin number | Pin name | 방향 | 전압 | 기능 | | | |
|
||||
| ---------- | ----------------------------- | --- | --------------------- | ----------- | - | --- | -- |
|
||||
| 1 | 5V | OUT | +5V | 5V output | | | |
|
||||
| 2 | PPM_IN | IN | +3.3V | PPM 입력 | | | |
|
||||
| 3 | RSSI_IN | IN | +3.3V | RSSI 입력 | | | |
|
||||
| 4 | FAN_OUT | OUT | +5V | Fan output | | | |
|
||||
| 5 | SBUS_OUT | OUT | +3.3V | SBUS output | 6 | GND | 접지 |
|
||||
\| Pin number | Pin name | Direction | Voltage | Function |
|
||||
\| ---------- | -------- | --------- | ------- | ----------- | --- | --- | ------ |
|
||||
\| 1 | 5V | OUT | +5V | 5V output |
|
||||
\| 2 | PPM_IN | IN | +3.3V | PPM input |
|
||||
\| 3 | RSSI_IN | IN | +3.3V | RSSI input |
|
||||
\| 4 | FAN_OUT | OUT | +5V | Fan output |
|
||||
\| 5 | SBUS_OUT | OUT | +3.3V | SBUS output | 6 | GND | Ground |
|
||||
|
||||
* **FMU SD card - microSD**
|
||||
|
||||
@@ -185,7 +180,6 @@ SmartAP AIRLink's Core edition is intended for medium to high volume production
|
||||

|
||||
|
||||
- **Right side interfaces:**
|
||||
|
||||
- Ethernet port with power output
|
||||
- Telemetry port
|
||||
- Second GPS port
|
||||
@@ -251,7 +245,6 @@ SmartAP AIRLink's Core edition is intended for medium to high volume production
|
||||

|
||||
|
||||
- **Front side interfaces:**
|
||||
|
||||
- Main GNSS and compass port
|
||||
- Main telemetry port
|
||||
- CSI camera input
|
||||
@@ -309,7 +302,6 @@ SmartAP AIRLink's Core edition is intended for medium to high volume production
|
||||

|
||||
|
||||
- **Rear side interfaces:**
|
||||
|
||||
- SBUS input
|
||||
- 16 PWM output channels
|
||||
- 2x LTE antenna sockets (MIMO)
|
||||
|
||||
@@ -25,6 +25,7 @@ This category includes boards that are not fully compliant with the pixhawk stan
|
||||
- [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)
|
||||
- [Gear Up AirBrainH743](../flight_controller/gearup_airbrainh743.md)
|
||||
- [Holybro Kakute H7v2](../flight_controller/kakuteh7v2.md)
|
||||
- [Holybro Kakute H7mini](../flight_controller/kakuteh7mini.md)
|
||||
- [Holybro Kakute H7](../flight_controller/kakuteh7.md)
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
# Gear Up AirBrainH743
|
||||
|
||||
:::warning
|
||||
PX4 does not manufacture this (or any) autopilot.
|
||||
Contact the [manufacturer](https://takeyourgear.com/) for hardware support.
|
||||
:::
|
||||
|
||||
:::info
|
||||
This flight controller is [manufacturer supported](../flight_controller/autopilot_manufacturer_supported.md).
|
||||
:::
|
||||
|
||||
Purchase from [takeyourgear.com](https://takeyourgear.com/pages/products/airbrain).
|
||||
|
||||
For more information and pinout, check the [GitHub documentation](https://github.com/GearUp-Company/AirBrainH743).
|
||||
|
||||
## 주요 특징
|
||||
|
||||
- MCU: STM32H743 32-bit processor running at 480 MHz
|
||||
- IMU: ICM42688P
|
||||
- Barometer: DPS310
|
||||
- Magnetometer: LIS2MDL (internal)
|
||||
- 128MB NAND Flash for logging (W25N)
|
||||
- 7x UARTs
|
||||
- I2C, SPI
|
||||
- 9x PWM Outputs (8 Motor outputs, 1 LED strip)
|
||||
- Battery input voltage: 3S-10S
|
||||
- Battery voltage/current monitoring
|
||||
- 5V@2A and 10V@2.5A BEC outputs
|
||||
- USB Type-C (IP68)
|
||||
- EMC and ESD protection
|
||||
|
||||
## 커넥터 및 핀
|
||||
|
||||
:::warning
|
||||
The pin order is different from the Pixhawk standard (compatible to the Betaflight standard).
|
||||
:::
|
||||
|
||||
### UART
|
||||
|
||||
Current UART configuration:
|
||||
|
||||
| UART | 장치 | 기능 |
|
||||
| ------ | ---------- | --------------------------------------- |
|
||||
| USART1 | /dev/ttyS0 | Console/Debug |
|
||||
| USART2 | /dev/ttyS1 | RC Input |
|
||||
| USART3 | /dev/ttyS2 | TEL4 (DJI/MSP) |
|
||||
| UART4 | /dev/ttyS3 | TEL1 |
|
||||
| UART5 | /dev/ttyS4 | TEL2 |
|
||||
| UART7 | /dev/ttyS5 | TEL3 (ESC Telemetry) |
|
||||
| UART8 | /dev/ttyS6 | GPS1 |
|
||||
|
||||
### Motor/Servo Outputs
|
||||
|
||||
| 커넥터 | 핀 | 기능 |
|
||||
| --- | -- | ---------------------------- |
|
||||
| ESC | M1 | Motor 1 |
|
||||
| ESC | M2 | Motor 2 |
|
||||
| ESC | M3 | Motor 3 |
|
||||
| ESC | M4 | Motor 4 |
|
||||
| PWM | M5 | Motor 5 |
|
||||
| PWM | M6 | Motor 6 |
|
||||
| PWM | M7 | Motor 7 |
|
||||
| PWM | M8 | Motor 8 |
|
||||
| AUX | M9 | LED/PWM/etc. |
|
||||
|
||||
<a id="bootloader"></a>
|
||||
|
||||
## 부트로더 업데이트
|
||||
|
||||
Before PX4 firmware can be installed, the _PX4 bootloader_ must be flashed.
|
||||
Download the [gearup_airbrainh743_bootloader.bin](https://github.com/PX4/PX4-Autopilot/blob/main/boards/gearup/airbrainh743/extras/gearup_airbrainh743_bootloader.bin) bootloader binary and read [this page](../advanced_config/bootloader_update_from_betaflight.md) for flashing instructions.
|
||||
|
||||
## 펌웨어 빌드
|
||||
|
||||
To [build PX4](../dev_setup/building_px4.md) for this target:
|
||||
|
||||
```
|
||||
make gearup_airbrainh743_default
|
||||
```
|
||||
|
||||
## 펌웨어 설치
|
||||
|
||||
Firmware can be installed in any of the normal ways:
|
||||
|
||||
- Build and upload the source:
|
||||
|
||||
```
|
||||
make gearup_airbrainh743_default upload
|
||||
```
|
||||
|
||||
- [Load the firmware](../config/firmware.md) using _QGroundControl_.
|
||||
미리 빌드된 펌웨어나 사용자 지정 펌웨어를 사용할 수 있습니다.
|
||||
|
||||
### 시스템 콘솔
|
||||
|
||||
UART1 (ttyS0) is configured for use as the [System Console](../debug/system_console.md).
|
||||
@@ -231,7 +231,7 @@ The following MAVLink messages and their particular fields and field values are
|
||||
|
||||
- Position setpoint **and** velocity setpoint (the velocity setpoint is used as feedforward; it is added to the output of the position controller and the result is used as the input to the velocity controller).
|
||||
|
||||
- PX4 supports the following `coordinate_frame` values (only): [MAV_FRAME_GLOBAL](https://mavlink.io/en/messages/common.html#MAV_FRAME_GLOBAL).
|
||||
- PX4 supports the following `coordinate_frame` values (only): [MAV_FRAME_GLOBAL_INT](https://mavlink.io/en/messages/common.html#MAV_FRAME_GLOBAL_INT), [MAV_FRAME_GLOBAL_RELATIVE_ALT_INT](https://mavlink.io/en/messages/common.html#MAV_FRAME_GLOBAL_RELATIVE_ALT_INT), [MAV_FRAME_GLOBAL_TERRAIN_ALT_INT](https://mavlink.io/en/messages/common.html#MAV_FRAME_GLOBAL_TERRAIN_ALT_INT).
|
||||
|
||||
- [SET_ATTITUDE_TARGET](https://mavlink.io/en/messages/common.html#SET_ATTITUDE_TARGET)
|
||||
- 다음 입력 조합이 지원됩니다.
|
||||
@@ -278,7 +278,7 @@ The following MAVLink messages and their particular fields and field values are
|
||||
- 12288 : Loiter 설정점 (설정점을 중심으로 선회 비행합니다).
|
||||
- 16384 : 유휴 설정점 (제로 스로틀, 제로 롤/피치).
|
||||
|
||||
- PX4 supports the following `coordinate_frame` values (only): [MAV_FRAME_GLOBAL](https://mavlink.io/en/messages/common.html#MAV_FRAME_GLOBAL).
|
||||
- PX4 supports the following `coordinate_frame` values (only): [MAV_FRAME_GLOBAL_INT](https://mavlink.io/en/messages/common.html#MAV_FRAME_GLOBAL_INT), [MAV_FRAME_GLOBAL_RELATIVE_ALT_INT](https://mavlink.io/en/messages/common.html#MAV_FRAME_GLOBAL_RELATIVE_ALT_INT), [MAV_FRAME_GLOBAL_TERRAIN_ALT_INT](https://mavlink.io/en/messages/common.html#MAV_FRAME_GLOBAL_TERRAIN_ALT_INT).
|
||||
|
||||
- [SET_ATTITUDE_TARGET](https://mavlink.io/en/messages/common.html#SET_ATTITUDE_TARGET)
|
||||
- 다음 입력 조합이 지원됩니다.
|
||||
@@ -287,7 +287,29 @@ The following MAVLink messages and their particular fields and field values are
|
||||
|
||||
### 탐사선
|
||||
|
||||
Rover does not support a MAVLink offboard API (ROS2 is supported).
|
||||
Rover supports offboard control using the generic MAVLink position/velocity setpoint messages listed below.
|
||||
These are converted into a [TrajectorySetpoint](../msg_docs/TrajectorySetpoint.md) internally, and then into rover setpoints by the rover offboard modes.
|
||||
For rover-specific control setpoints and better behaviour we recommend using the [Rover Setpoints](#rover-setpoints) via ROS 2.
|
||||
|
||||
:::info
|
||||
Rover MAVLink setpoints are gated by the MAVLink parameter [MAV_FWDEXTSP](../advanced_config/parameter_reference.md#MAV_FWDEXTSP) (Forward external setpoint messages).
|
||||
:::
|
||||
|
||||
- [SET_POSITION_TARGET_LOCAL_NED](https://mavlink.io/en/messages/common.html#SET_POSITION_TARGET_LOCAL_NED)
|
||||
- Position setpoint: `x`, `y` in [MAV_FRAME_LOCAL_NED](https://mavlink.io/en/messages/common.html#MAV_FRAME_LOCAL_NED) (`z` is ignored by rover modules).
|
||||
- Velocity setpoint: `vx`, `vy` in [MAV_FRAME_LOCAL_NED](https://mavlink.io/en/messages/common.html#MAV_FRAME_LOCAL_NED) or [MAV_FRAME_BODY_NED](https://mavlink.io/en/messages/common.html#MAV_FRAME_BODY_NED).
|
||||
- `yaw`/`yaw_rate`:
|
||||
- Ackermann/Differential: ignored (in velocity control the yaw setpoint is derived from the velocity direction).
|
||||
- Mecanum: can be controlled independently (decoupled) using `yaw`/`yaw_rate`.
|
||||
- Acceleration setpoints (`afx`, `afy`, `afz`) are ignored by rover modules.
|
||||
|
||||
- [SET_POSITION_TARGET_GLOBAL_INT](https://mavlink.io/en/messages/common.html#SET_POSITION_TARGET_GLOBAL_INT)
|
||||
- Position setpoint: `lat_int`, `lon_int`, `alt` (converted into local NED internally; rover modules only use the horizontal components).
|
||||
- Velocity setpoint: `vx`, `vy`, `vz` (rover modules use only the horizontal components).
|
||||
- PX4 supports the following `coordinate_frame` values (only): [MAV_FRAME_GLOBAL_INT](https://mavlink.io/en/messages/common.html#MAV_FRAME_GLOBAL_INT), [MAV_FRAME_GLOBAL_RELATIVE_ALT_INT](https://mavlink.io/en/messages/common.html#MAV_FRAME_GLOBAL_RELATIVE_ALT_INT), [MAV_FRAME_GLOBAL_TERRAIN_ALT_INT](https://mavlink.io/en/messages/common.html#MAV_FRAME_GLOBAL_TERRAIN_ALT_INT).
|
||||
|
||||
- [SET_ATTITUDE_TARGET](https://mavlink.io/en/messages/common.html#SET_ATTITUDE_TARGET)
|
||||
- Not supported for rover offboard control.
|
||||
|
||||
## 오프보드 매개변수
|
||||
|
||||
|
||||
@@ -28,7 +28,6 @@ Missions are uploaded onto a SD card that needs to be inserted **before** bootin
|
||||
At high level all vehicle types behave in the same way when MISSION mode is engaged:
|
||||
|
||||
1. If no mission is stored, or if PX4 has finished executing all mission commands, or if the [mission is not feasible](#mission-feasibility-checks):
|
||||
|
||||
- If flying the vehicle will loiter.
|
||||
- If landed the vehicle will "wait".
|
||||
|
||||
|
||||
@@ -115,7 +115,6 @@ The altitude control mode determine whether the vehicle altitude is relative to
|
||||
The relative distance to the drone to the target will change as you ascend and descend (use with care in hilly terrain).
|
||||
|
||||
- `2D + Terrain` makes the drone follow at a fixed height relative to the terrain underneath it, using information from a distance sensor.
|
||||
|
||||
- If the vehicle does not have a distance sensor following will be identical to `2D tracking`.
|
||||
- Distance sensors aren't always accurate and vehicles may be "jumpy" when flying in this mode.
|
||||
- Note that that height is relative to the ground underneath the vehicle, not the follow target.
|
||||
|
||||
@@ -30,7 +30,6 @@ Missions are uploaded onto a SD card that needs to be inserted **before** bootin
|
||||
At high level all vehicle types behave in the same way when MISSION mode is engaged:
|
||||
|
||||
1. If no mission is stored, or if PX4 has finished executing all mission commands, or if the [mission is not feasible](#mission-feasibility-checks):
|
||||
|
||||
- If flying the vehicle will hold.
|
||||
- If landed the vehicle will "wait".
|
||||
|
||||
|
||||
@@ -49,7 +49,6 @@ If returning as a fixed-wing, the vehicle:
|
||||
A mission landing pattern for a VTOL vehicle consists of a [MAV_CMD_DO_LAND_START](https://mavlink.io/en/messages/common.html#MAV_CMD_DO_LAND_START), one or more position waypoints, and a [MAV_CMD_NAV_VTOL_LAND](https://mavlink.io/en/messages/common.html#MAV_CMD_NAV_VTOL_LAND).
|
||||
|
||||
- If the destination is a rally point or home it will:
|
||||
|
||||
- Loiter/spiral down to [RTL_DESCEND_ALT](#RTL_DESCEND_ALT).
|
||||
- Circle for a short time, as defined by [RTL_LAND_DELAY](#RTL_LAND_DELAY).
|
||||
- Yaw towards the destination (centre of loiter).
|
||||
|
||||
@@ -30,7 +30,7 @@ The diagrams use the standard [PX4 notation](../contribute/notation.md) (and eac
|
||||
|
||||
::: info
|
||||
The IMU pipeline is:
|
||||
gyro data > apply calibration parameters > remove estimated bias > notch filter (`IMU_GYRO_NF0_BW` and `IMU_GYRO_NF0_FRQ`) > low-pass filter (`IMU_GYRO_CUTOFF`) > vehicle_angular_velocity (_filtered angular rate used by the P and I controllers_) > derivative -> low-pass filter (`IMU_DGYRO_CUTOFF`) > vehicle_angular_acceleration (_filtered angular acceleration used by the D controller_)
|
||||
gyro data > apply calibration parameters > remove estimated bias > notch filter (`IMU_GYRO_NF0_BW` and `IMU_GYRO_NF0_FRQ`) > low-pass filter (`IMU_GYRO_CUTOFF`) > vehicle_angular_velocity (\_filtered angular rate used by the P and I controllers_) > derivative -> low-pass filter (`IMU_DGYRO_CUTOFF`) > vehicle_angular_acceleration (\_filtered angular acceleration used by the D controller_)
|
||||
|
||||

|
||||
|
||||
@@ -177,7 +177,7 @@ The angular position of the control effectors (ailerons, elevators, rudders, ...
|
||||
또한 제어 표면은 고속에서 더 효과적이고 저속에서는 덜 효과적이기 때문에, 순항 속도에 맞게 조정된 컨트롤러는 속도 측정을 사용하여 조정됩니다(이러한 센서가 사용되는 경우).
|
||||
|
||||
:::info
|
||||
If no airspeed sensor is used then gain scheduling for the FW attitude controller is disabled (it's open loop); no correction is/can be made in TECS using airspeed feedback.
|
||||
If no airspeed sensor is used then gain scheduling for the FW attitude controller is disabled (it's open loop); no correction is/can be made in TECS using airspeed feedback.
|
||||
:::
|
||||
|
||||
피드포워드 이득은 공기역학적 감쇠를 보상합니다.
|
||||
@@ -187,7 +187,7 @@ If no airspeed sensor is used then gain scheduling for the FW attitude controlle
|
||||
### Turn coordination
|
||||
|
||||
롤 및 피치 컨트롤러는 동일한 구조를 가지며, 종방향 역학과 횡방향 역학은 독립적으로 작동하기에 충분히 분리되어 있다고 가정합니다.
|
||||
그러나, 요 콘트롤러는 항공기가 미끄러질 때 생성되는 측면 가속도를 최소화하기 위해 선회 조정 제약 조건을 사용하여 요 각속도 설정점을 계산합니다. The turn coordination algorithm is based solely on coordinated turn geometry calculation.
|
||||
그러나, 요 콘트롤러는 항공기가 미끄러질 때 생성되는 측면 가속도를 최소화하기 위해 선회 조정 제약 조건을 사용하여 요 각속도 설정점을 계산합니다. The turn coordination algorithm is based solely on coordinated turn geometry calculation.
|
||||
|
||||
$$\dot{\Psi}_{sp} = \frac{g}{V_T} \tan{\phi_{sp}} \cos{\theta_{sp}}$$
|
||||
|
||||
|
||||
@@ -33,7 +33,6 @@ To create a package delivery mission (with a Gripper):
|
||||
1. Create a normal mission with a `Takeoff` mission item, and additional waypoints for your required flight path.
|
||||
|
||||
2. Add a waypoint on the map for where you'd like to release the package.
|
||||
|
||||
- To drop the package while flying set an appropriate altitude for the waypoint (and ensure the waypoint is at a safe location to drop the package).
|
||||
|
||||
- If you'd like to land the vehicle to make the delivery you will need to change the `Waypoint` to a `Land` mission item.
|
||||
|
||||
@@ -7,6 +7,12 @@ Support for rover is [experimental](../airframes/index.md#experimental-vehicles)
|
||||
Maintainer volunteers, [contribution](../contribute/index.md) of new features, new frame configurations, or other improvements would all be very welcome!
|
||||
:::
|
||||
|
||||
:::tip
|
||||
Rover is not in the default PX4 firmware downloaded from QGC.
|
||||
Unlike for other vehicle types you will need to install it as custom firmware.
|
||||
For more information see [Flashing the Rover Build](../config_rover/index.md#flashing-the-rover-build).
|
||||
:::
|
||||
|
||||

|
||||
|
||||
PX4 provides support for the three most common types of rovers:
|
||||
|
||||
@@ -20,7 +20,7 @@ It is possible to have a GPS lock (Green LED) and still not be able to arm the v
|
||||
:::
|
||||
|
||||
:::tip
|
||||
In the event of an error (blinking red), or if the vehicle can't achieve GPS lock (change from blue to green), check for more detailed status information in _QGroundControl_ including calibration status, and errors messages reported by the [Preflight Checks (Internal)](../flying/pre_flight_checks.md).
|
||||
In the event of an error (blinking red), or if the vehicle can't achieve GPS lock (change from blue to green), check for more detailed status information in _QGroundControl_ including calibration status, and errors messages reported by the [Preflight Checks (Internal)](../flying/pre_flight_checks.md).
|
||||
또한 GPS 모듈이 연결 여부, Pixhawk와 GPS 연동 여부, 정확한 GPS 위치를 전송 여부를 확인하십시오.
|
||||
:::
|
||||
|
||||
@@ -47,7 +47,8 @@ In the event of an error (blinking red), or if the vehicle can't achieve GPS loc
|
||||
사고 방지 모드에서는 기체는 이륙 위치로 복귀하거나, 현재 위치에 착륙할 수 있습니다.
|
||||
|
||||
- **[Solid Amber] Low Battery Warning:** Indicates your vehicle's battery is running dangerously low.
|
||||
특정 시점이 지나면, 차량은 안전 방지 모드로 전환됩니다. 그러나, 이 모드는 종료시점에는 경고 메시지를 표시합니다.
|
||||
특정 시점이 지나면, 차량은 안전 방지 모드로 전환됩니다. However, this mode should signal caution that it's time to end
|
||||
this flight.
|
||||
|
||||
- **[Blinking Red] Error / Setup Required:** Indicates that your autopilot needs to be configured or calibrated before flying.
|
||||
자동조종장치를 지상관제국에 연결하여 무슨 문제인지를 확인하십시오.
|
||||
@@ -77,11 +78,11 @@ The LED labels shown above are commonly used, but might differ on some boards.
|
||||
|
||||
LED가 의미하는 메시지에 관한 자세한 정보는 아래에서 설명합니다( "x"는 "모든 상태"를 의미).
|
||||
|
||||
| 적색/황색 | 청색 | 녹색 | 설명 |
|
||||
| ----- | --- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| 10Hz | x | x | Overload CPU load > 80%, or RAM usage > 98% |
|
||||
| OFF | x | x | Overload CPU load <= 80%, or RAM usage <= 98% |
|
||||
| NA | OFF | 4 Hz | actuator_armed->armed && failsafe |
|
||||
| NA | ON | 4 Hz | actuator_armed->armed && !failsafe |
|
||||
| NA | OFF | 1 Hz | !actuator_armed-> armed && actuator_armed->ready_to_arm |
|
||||
| NA | OFF | 10 Hz | !actuator_armed->armed && !actuator_armed->ready_to_arm |
|
||||
| 적색/황색 | 청색 | 녹색 | 설명 |
|
||||
| ----- | --- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 10Hz | x | x | Overload CPU load > 80%, or RAM usage > 98% |
|
||||
| OFF | x | x | Overload CPU load <= 80%, or RAM usage <= 98% |
|
||||
| NA | OFF | 4 Hz | actuator_armed->armed && failsafe |
|
||||
| NA | ON | 4 Hz | actuator_armed->armed && !failsafe |
|
||||
| NA | OFF | 1 Hz | !actuator_armed-> armed && actuator_armed->ready_to_arm |
|
||||
| NA | OFF | 10 Hz | !actuator_armed->armed && !actuator_armed->ready_to_arm |
|
||||
|
||||
@@ -13,7 +13,7 @@ You can search for tune use using the string `TUNE_ID_name`(e.g. \`TUNE_ID_PARAC
|
||||
|
||||
부팅중에 재생되는 톤들입니다.
|
||||
|
||||
<!-- https://github.com/PX4/PX4-Autopilot/blob/main/ROMFS/px4fmu_common/init.d/rcS -->
|
||||
<!-- https://github.com/PX4/PX4-Autopilot/blob/main/ROMFS/px4fmu_common/init.d/rcS -->
|
||||
|
||||
#### 시작 톤
|
||||
|
||||
|
||||
@@ -153,7 +153,6 @@ RTK GPS 연결은 기본적으로 플러그앤플레이입니다.
|
||||

|
||||
|
||||
4. Survey-in이 완료되면 :
|
||||
|
||||
- The RTK GPS icon changes to white and _QGroundControl_ starts to stream position data to the vehicle:
|
||||
|
||||

|
||||
|
||||
+22
-71
@@ -3,20 +3,11 @@ import { useData } from 'vitepress'
|
||||
const { site } = useData();
|
||||
</script>
|
||||
|
||||
<div style="float:right; padding:10px; margin-right:20px;"><a href="https://px4.io/"><img src="../assets/site/logo_pro_small.png" title="PX4 Logo" width="180px" /></a></div>
|
||||
|
||||
# PX4 Autopilot 사용자 안내서
|
||||
|
||||
[](https://github.com/PX4/PX4-Autopilot/releases) [](https://discuss.px4.io//) [](https://discord.gg/dronecode)
|
||||
|
||||
PX4 is the _Professional Autopilot_.
|
||||
세계적인 수준의 개발자들이 산업계와 학계에서 참여하여 개발하였으며,
|
||||
세계 각국에서 활동중인 여러 단체들의 지원을 받을 수 있습니다. PX4는 레이싱 드론, 운송용 드론, 자동차와 선박 등의 다양한 운송체에 적용하여 사용할 수 있습니다.
|
||||
|
||||
:::tip
|
||||
This guide contains everything you need to assemble, configure, and safely fly a PX4-based vehicle.
|
||||
이 프로젝트에 기여하시려면, Check out the [Development](development/development.md) section.
|
||||
:::
|
||||
PX4 is an open-source autopilot for drones and autonomous vehicles. It runs on multirotors, fixed-wing, VTOL, helicopters, rovers, and more. This guide covers everything from assembly and configuration to flight operations and development.
|
||||
|
||||
<div v-if="site.title == 'PX4 Guide (main)'">
|
||||
|
||||
@@ -30,83 +21,43 @@ Documented changes since the stable release are captured in the evolving [releas
|
||||
|
||||
</div>
|
||||
|
||||
## For Developers
|
||||
|
||||
:::tip
|
||||
Building on PX4 or extending the platform? Start here: [Development Guide](development/development.md). Set up your [dev environment](dev_setup/config_initial.md), [build from source](dev_setup/building_px4.md), run [SITL simulation](simulation/index.md), or integrate via [ROS 2](ros2/index.md) and [MAVSDK](https://mavsdk.mavlink.io/).
|
||||
:::
|
||||
|
||||
## 시작하기
|
||||
|
||||
[Basic Concepts](getting_started/px4_basic_concepts.md) should be read by all users!
|
||||
비행 스택(비행 모드 및 안전 기능)과 지원 하드웨어(비행 제어장치, 기체 형식, 텔레메트리, 원격 제어 시스템) 등 PX4의 전반적인 내용을 설명합니다.
|
||||
Start with [Basic Concepts](getting_started/px4_basic_concepts.md) for an overview of the flight stack, flight modes, safety features, and supported hardware.
|
||||
|
||||
이 안내서를 위한 팁들은 아래과 같습니다.
|
||||
## Build a Vehicle
|
||||
|
||||
### PX4로 동작하는 기체를 만들려고 합니다
|
||||
Pick your frame type: [Multicopter](frames_multicopter/index.md), [Fixed-Wing](frames_plane/index.md), [VTOL](frames_vtol/index.md), [Helicopter](frames_helicopter/index.md), or [Rover](frames_rover/index.md). Each section covers complete vehicles, kits, and DIY builds. For assembly instructions see [Assembling a Multicopter](assembly/assembly_mc.md) or the equivalent for your frame.
|
||||
|
||||
In the [Multicopter](frames_multicopter/index.md), [VTOL](frames_vtol/index.md), and [Plane (Fixed-Wing)](frames_plane/index.md) sections you'll find topics like the following (these links are for multicopter):
|
||||
## Configure and Tune
|
||||
|
||||
- [Complete Vehicles](complete_vehicles_mc/index.md) list "Ready to Fly" (RTF) pre-built vehicles
|
||||
- [Kits](frames_multicopter/kits.md) lists drones that you have to build yourself from a set of preselected parts
|
||||
- [DIY Builds](frames_multicopter/diy_builds.md) shows some examples of drones that have been built using parts that were sourced individually
|
||||
Once assembled, follow the configuration guide for your vehicle type (e.g. [Multicopter Configuration](config_mc/index.md)). This covers sensor calibration, flight mode setup, and tuning.
|
||||
|
||||
Both kits and complete vehicles usually include everything you need except for a battery and RC System.
|
||||
Kits are usually not hard to build, provide a good introduction to how drones fit together, and are relatively inexpensive.
|
||||
We provide generic instructions for assembly, such as [Assembling a Multicopter](assembly/assembly_mc.md), and most kits come with specific instructions too.
|
||||
## 하드웨어
|
||||
|
||||
If the kits and complete drones aren't quite right for you then you can build a vehicle from scratch, but this requires more knowledge.
|
||||
[Airframe Builds](airframes/index.md) lists the supported frame starting points to give you some idea of what is possible.
|
||||
The [Hardware Selection & Setup](hardware/drone_parts.md) section covers flight controllers, sensors, telemetry, RC systems, and payloads. See [Payloads](payloads/index.md) for camera and delivery integrations.
|
||||
|
||||
Once you have a vehicle that supports PX4 you will need to configure it and calibrate the sensors.
|
||||
Each vehicle type has its own configuration section that explains the main steps, such as [Multicopter Configuration/Tuning](config_mc/index.md).
|
||||
## Fly
|
||||
|
||||
### I want to add a payload/camera
|
||||
Read [Operations](config/operations.md) to understand safety features and failsafe behavior before your first flight. Then see [Basic Flying (Multicopter)](flying/basic_flying_mc.md) or the equivalent for your frame type.
|
||||
|
||||
The [Payloads](payloads/index.md) section describes how to add a camera and how to configure PX4 to enable you to deliver packages.
|
||||
## 지원
|
||||
|
||||
### I am modifying a supported vehicle
|
||||
|
||||
The [Hardware Selection & Setup](hardware/drone_parts.md) section provides both high level and product-specific information about hardware that you might use with PX4 and its configuration.
|
||||
This is the first place you should look if you want to modify a drone and add new components.
|
||||
|
||||
### I want to fly
|
||||
|
||||
Before you fly you should read [Operations](config/operations.md) to understand how to set up the safety features of your vehicle and the common behaviours of all frame types.
|
||||
Once you've done that you're ready to fly.
|
||||
|
||||
Basic instructions for flying each vehicle type are provided in the respective sections, such as [Basic Flying (Multicopter)](flying/basic_flying_mc.md).
|
||||
|
||||
### I want to run PX4 on a new Flight Controller and extend the platform
|
||||
|
||||
The [Development](development/development.md) section explains how to support new airframes and types of vehicles, modify flight algorithms, add new modes, integrate new hardware, communicate with PX4 from outside the flight controller, and contribute to PX4.
|
||||
|
||||
## 도움 받기
|
||||
|
||||
The [Support](contribute/support.md) page explains how to get help from the core dev team and the wider community.
|
||||
|
||||
다음과 같은 내용을 다룹니다.
|
||||
|
||||
- [Forums where you can get help](contribute/support.md#forums-and-chat)
|
||||
- [Diagnosing issues](contribute/support.md#diagnosing-problems)
|
||||
- [How to report bugs](contribute/support.md#issue-bug-reporting)
|
||||
- [Weekly dev call](contribute/support.md#weekly-dev-call)
|
||||
|
||||
## Reporting Bugs & Issues
|
||||
|
||||
If you have any problems using PX4 first post them on the [support forums](contribute/support.md#forums-and-chat) (as they may be caused by vehicle configuration).
|
||||
|
||||
If directed by the development team, code issues may be raised on [Github here](https://github.com/PX4/PX4-Autopilot/issues).
|
||||
Where possible provide [flight logs](getting_started/flight_reporting.md) and other information requested in the issue template.
|
||||
Get help on the [discussion forums](https://discuss.px4.io/) or [Discord](https://discord.gg/dronecode). See the [Support](contribute/support.md) page for diagnosing problems, reporting bugs, and joining the [weekly dev call](contribute/dev_call.md).
|
||||
|
||||
## 기여
|
||||
|
||||
Information on how to contribute to code and documentation can be found in the [Contributing](contribute/index.md) section:
|
||||
|
||||
- [Code](contribute/index.md)
|
||||
- [Documentation](contribute/docs.md)
|
||||
- [Translation](contribute/translation.md)
|
||||
See the [Contributing](contribute/index.md) section for code, [documentation](contribute/docs.md), and [translation](contribute/translation.md) guidelines.
|
||||
|
||||
## 번역
|
||||
|
||||
There are several [translations](contribute/translation.md) of this guide.
|
||||
우상단의 언어 메뉴에서 원하시는 번역본을 선택할 수 있습니다:
|
||||
|
||||

|
||||
There are several [translations](contribute/translation.md) of this guide. Use the language selector in the top navigation.
|
||||
|
||||
<!--@include: _contributors.md-->
|
||||
|
||||
@@ -143,9 +94,9 @@ The calendar default timezone is Central European Time (CET).
|
||||
|
||||
## 운영 방법
|
||||
|
||||
The PX4 flight stack is hosted under the governance of the [Dronecode Project](https://dronecode.org/).
|
||||
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](https://opensource.org/license/BSD-3-Clause) license, so you are free to use, modify, and distribute it in your own projects.
|
||||
|
||||
<a href="https://dronecode.org/" style="padding:20px" ><img src="../assets/site/logo_dronecode.png" alt="Dronecode Logo" width="110px"/></a> <a href="https://www.linuxfoundation.org/projects" style="padding:20px;"><img src="../assets/site/logo_linux_foundation.png" alt="Linux Foundation Logo" width="80px" /></a>
|
||||
<a href="https://www.dronecode.org/" style="padding:20px"><img src="../assets/site/dronecode_logo.svg" alt="Dronecode Logo" width="140px"/></a> <a href="https://www.linuxfoundation.org/projects" style="padding:20px;"><img src="../assets/site/logo_linux_foundation.png" alt="Linux Foundation Logo" width="80px" /></a>
|
||||
|
||||
<div style="padding:10px"> </div>
|
||||
|
||||
|
||||
+191
-183
@@ -95,192 +95,200 @@ They are not build into the module, and hence are neither published or subscribe
|
||||
:::details
|
||||
See messages
|
||||
|
||||
- [BatteryInfo](../msg_docs/BatteryInfo.md)
|
||||
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
|
||||
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
|
||||
- [Airspeed](../msg_docs/Airspeed.md)
|
||||
- [PpsCapture](../msg_docs/PpsCapture.md)
|
||||
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
|
||||
- [CameraCapture](../msg_docs/CameraCapture.md)
|
||||
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
|
||||
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
|
||||
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
|
||||
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
|
||||
- [AirspeedWind](../msg_docs/AirspeedWind.md)
|
||||
- [OrbTest](../msg_docs/OrbTest.md)
|
||||
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
|
||||
- [GpioOut](../msg_docs/GpioOut.md)
|
||||
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
|
||||
- [Gripper](../msg_docs/Gripper.md)
|
||||
- [VehicleAirData](../msg_docs/VehicleAirData.md)
|
||||
- [TuneControl](../msg_docs/TuneControl.md)
|
||||
- [DebugVect](../msg_docs/DebugVect.md)
|
||||
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
|
||||
- [HomePositionV0](../msg_docs/HomePositionV0.md)
|
||||
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
|
||||
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
|
||||
- [EstimatorBias](../msg_docs/EstimatorBias.md)
|
||||
- [GpioConfig](../msg_docs/GpioConfig.md)
|
||||
- [SystemPower](../msg_docs/SystemPower.md)
|
||||
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
|
||||
- [MissionResult](../msg_docs/MissionResult.md)
|
||||
- [PowerButtonState](../msg_docs/PowerButtonState.md)
|
||||
- [EscStatus](../msg_docs/EscStatus.md)
|
||||
- [HealthReport](../msg_docs/HealthReport.md)
|
||||
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
|
||||
- [SensorGyro](../msg_docs/SensorGyro.md)
|
||||
- [GpioRequest](../msg_docs/GpioRequest.md)
|
||||
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
|
||||
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
|
||||
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
|
||||
- [SensorAirflow](../msg_docs/SensorAirflow.md)
|
||||
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
|
||||
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
|
||||
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
|
||||
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
|
||||
- [ActionRequest](../msg_docs/ActionRequest.md)
|
||||
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
|
||||
- [PwmInput](../msg_docs/PwmInput.md)
|
||||
- [PowerMonitor](../msg_docs/PowerMonitor.md)
|
||||
- [Mission](../msg_docs/Mission.md)
|
||||
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
|
||||
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
|
||||
- [RadioStatus](../msg_docs/RadioStatus.md)
|
||||
- [VehicleRoi](../msg_docs/VehicleRoi.md)
|
||||
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
|
||||
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
|
||||
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
|
||||
- [Rpm](../msg_docs/Rpm.md)
|
||||
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
|
||||
- [Ping](../msg_docs/Ping.md)
|
||||
- [QshellReq](../msg_docs/QshellReq.md)
|
||||
- [SensorMag](../msg_docs/SensorMag.md)
|
||||
- [EstimatorStates](../msg_docs/EstimatorStates.md)
|
||||
- [SensorUwb](../msg_docs/SensorUwb.md)
|
||||
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
|
||||
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
|
||||
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
|
||||
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
|
||||
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
|
||||
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
|
||||
- [AdcReport](../msg_docs/AdcReport.md)
|
||||
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
|
||||
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
|
||||
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
|
||||
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
|
||||
- [SensorCorrection](../msg_docs/SensorCorrection.md)
|
||||
- [UlogStream](../msg_docs/UlogStream.md)
|
||||
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
|
||||
- [GpsInjectData](../msg_docs/GpsInjectData.md)
|
||||
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
|
||||
- [LoggerStatus](../msg_docs/LoggerStatus.md)
|
||||
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
|
||||
- [SensorBaro](../msg_docs/SensorBaro.md)
|
||||
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
|
||||
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
|
||||
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
|
||||
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
|
||||
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
|
||||
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
|
||||
- [DatamanRequest](../msg_docs/DatamanRequest.md)
|
||||
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
|
||||
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
|
||||
- [DatamanResponse](../msg_docs/DatamanResponse.md)
|
||||
- [LedControl](../msg_docs/LedControl.md)
|
||||
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
|
||||
- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
|
||||
- [Event](../msg_docs/Event.md)
|
||||
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
|
||||
- [GpioIn](../msg_docs/GpioIn.md)
|
||||
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
|
||||
- [SensorAccel](../msg_docs/SensorAccel.md)
|
||||
- [SensorsStatus](../msg_docs/SensorsStatus.md)
|
||||
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
|
||||
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
|
||||
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
|
||||
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
|
||||
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
|
||||
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
|
||||
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
|
||||
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
|
||||
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
|
||||
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
|
||||
- [VelocityLimits](../msg_docs/VelocityLimits.md)
|
||||
- [MagWorkerData](../msg_docs/MagWorkerData.md)
|
||||
- [Cpuload](../msg_docs/Cpuload.md)
|
||||
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
|
||||
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
|
||||
- [MavlinkLog](../msg_docs/MavlinkLog.md)
|
||||
- [SensorTemp](../msg_docs/SensorTemp.md)
|
||||
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
|
||||
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
|
||||
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
|
||||
- [CellularStatus](../msg_docs/CellularStatus.md)
|
||||
- [QshellRetval](../msg_docs/QshellRetval.md)
|
||||
- [OrbitStatus](../msg_docs/OrbitStatus.md)
|
||||
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
|
||||
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
|
||||
- [LogMessage](../msg_docs/LogMessage.md)
|
||||
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
|
||||
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
|
||||
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
|
||||
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
|
||||
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
|
||||
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
|
||||
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
|
||||
- [NeuralControl](../msg_docs/NeuralControl.md)
|
||||
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
|
||||
- [RcParameterMap](../msg_docs/RcParameterMap.md)
|
||||
- [SensorSelection](../msg_docs/SensorSelection.md)
|
||||
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
|
||||
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
|
||||
- [ActuatorTest](../msg_docs/ActuatorTest.md)
|
||||
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
|
||||
- [MountOrientation](../msg_docs/MountOrientation.md)
|
||||
- [CameraStatus](../msg_docs/CameraStatus.md)
|
||||
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
|
||||
- [FollowTarget](../msg_docs/FollowTarget.md)
|
||||
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
|
||||
- [ButtonEvent](../msg_docs/ButtonEvent.md)
|
||||
- [DebugArray](../msg_docs/DebugArray.md)
|
||||
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
|
||||
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
|
||||
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
|
||||
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
|
||||
- [VehicleImu](../msg_docs/VehicleImu.md)
|
||||
- [GpsDump](../msg_docs/GpsDump.md)
|
||||
- [WheelEncoders](../msg_docs/WheelEncoders.md)
|
||||
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
|
||||
- [DebugValue](../msg_docs/DebugValue.md)
|
||||
- [SystemPower](../msg_docs/SystemPower.md)
|
||||
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
|
||||
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
|
||||
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
|
||||
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
|
||||
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
|
||||
- [RtlStatus](../msg_docs/RtlStatus.md)
|
||||
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
|
||||
- [GimbalControls](../msg_docs/GimbalControls.md)
|
||||
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
|
||||
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
|
||||
- [HeaterStatus](../msg_docs/HeaterStatus.md)
|
||||
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
|
||||
- [RcChannels](../msg_docs/RcChannels.md)
|
||||
- [TecsStatus](../msg_docs/TecsStatus.md)
|
||||
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
|
||||
- [InputRc](../msg_docs/InputRc.md)
|
||||
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
|
||||
- [GeofenceResult](../msg_docs/GeofenceResult.md)
|
||||
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
|
||||
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
|
||||
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
|
||||
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
|
||||
- [CameraTrigger](../msg_docs/CameraTrigger.md)
|
||||
- [EscReport](../msg_docs/EscReport.md)
|
||||
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
|
||||
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
|
||||
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
|
||||
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
|
||||
- [EventV0](../msg_docs/EventV0.md)
|
||||
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
|
||||
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
|
||||
- [EstimatorBias](../msg_docs/EstimatorBias.md)
|
||||
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
|
||||
- [LogMessage](../msg_docs/LogMessage.md)
|
||||
- [PowerMonitor](../msg_docs/PowerMonitor.md)
|
||||
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
|
||||
- [SensorAirflow](../msg_docs/SensorAirflow.md)
|
||||
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
|
||||
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
|
||||
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
|
||||
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
|
||||
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
|
||||
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
|
||||
- [PwmInput](../msg_docs/PwmInput.md)
|
||||
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
|
||||
- [QshellReq](../msg_docs/QshellReq.md)
|
||||
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
|
||||
- [RcChannels](../msg_docs/RcChannels.md)
|
||||
- [Cpuload](../msg_docs/Cpuload.md)
|
||||
- [DebugArray](../msg_docs/DebugArray.md)
|
||||
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
|
||||
- [Mission](../msg_docs/Mission.md)
|
||||
- [Airspeed](../msg_docs/Airspeed.md)
|
||||
- [LedControl](../msg_docs/LedControl.md)
|
||||
- [HealthReport](../msg_docs/HealthReport.md)
|
||||
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
|
||||
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
|
||||
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
|
||||
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
|
||||
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
|
||||
- [InputRc](../msg_docs/InputRc.md)
|
||||
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
|
||||
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
|
||||
- [SensorCorrection](../msg_docs/SensorCorrection.md)
|
||||
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
|
||||
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
|
||||
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
|
||||
- [SensorSelection](../msg_docs/SensorSelection.md)
|
||||
- [DeviceInformation](../msg_docs/DeviceInformation.md)
|
||||
- [CameraTrigger](../msg_docs/CameraTrigger.md)
|
||||
- [SensorAccel](../msg_docs/SensorAccel.md)
|
||||
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
|
||||
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
|
||||
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
|
||||
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
|
||||
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
|
||||
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
|
||||
- [VehicleImu](../msg_docs/VehicleImu.md)
|
||||
- [MissionResult](../msg_docs/MissionResult.md)
|
||||
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
|
||||
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
|
||||
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
|
||||
- [OrbTest](../msg_docs/OrbTest.md)
|
||||
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
|
||||
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
|
||||
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
|
||||
- [OrbitStatus](../msg_docs/OrbitStatus.md)
|
||||
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
|
||||
- [RtlStatus](../msg_docs/RtlStatus.md)
|
||||
- [ButtonEvent](../msg_docs/ButtonEvent.md)
|
||||
- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
|
||||
- [DebugValue](../msg_docs/DebugValue.md)
|
||||
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
|
||||
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
|
||||
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
|
||||
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
|
||||
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
|
||||
- [GpioOut](../msg_docs/GpioOut.md)
|
||||
- [ActuatorTest](../msg_docs/ActuatorTest.md)
|
||||
- [SensorBaro](../msg_docs/SensorBaro.md)
|
||||
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
|
||||
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
|
||||
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
|
||||
- [TecsStatus](../msg_docs/TecsStatus.md)
|
||||
- [PpsCapture](../msg_docs/PpsCapture.md)
|
||||
- [RaptorStatus](../msg_docs/RaptorStatus.md)
|
||||
- [EventV0](../msg_docs/EventV0.md)
|
||||
- [GpioRequest](../msg_docs/GpioRequest.md)
|
||||
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
|
||||
- [MagWorkerData](../msg_docs/MagWorkerData.md)
|
||||
- [FollowTarget](../msg_docs/FollowTarget.md)
|
||||
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
|
||||
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
|
||||
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
|
||||
- [ActionRequest](../msg_docs/ActionRequest.md)
|
||||
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
|
||||
- [GpsInjectData](../msg_docs/GpsInjectData.md)
|
||||
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
|
||||
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
|
||||
- [UlogStream](../msg_docs/UlogStream.md)
|
||||
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
|
||||
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
|
||||
- [MountOrientation](../msg_docs/MountOrientation.md)
|
||||
- [RcParameterMap](../msg_docs/RcParameterMap.md)
|
||||
- [AdcReport](../msg_docs/AdcReport.md)
|
||||
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
|
||||
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
|
||||
- [MavlinkLog](../msg_docs/MavlinkLog.md)
|
||||
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
|
||||
- [GpioConfig](../msg_docs/GpioConfig.md)
|
||||
- [GainCompression](../msg_docs/GainCompression.md)
|
||||
- [DebugVect](../msg_docs/DebugVect.md)
|
||||
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
|
||||
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
|
||||
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
|
||||
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
|
||||
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
|
||||
- [SensorUwb](../msg_docs/SensorUwb.md)
|
||||
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
|
||||
- [VelocityLimits](../msg_docs/VelocityLimits.md)
|
||||
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
|
||||
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
|
||||
- [EscStatus](../msg_docs/EscStatus.md)
|
||||
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
|
||||
- [HeaterStatus](../msg_docs/HeaterStatus.md)
|
||||
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
|
||||
- [GeofenceResult](../msg_docs/GeofenceResult.md)
|
||||
- [PowerButtonState](../msg_docs/PowerButtonState.md)
|
||||
- [Rpm](../msg_docs/Rpm.md)
|
||||
- [WheelEncoders](../msg_docs/WheelEncoders.md)
|
||||
- [LoggerStatus](../msg_docs/LoggerStatus.md)
|
||||
- [CellularStatus](../msg_docs/CellularStatus.md)
|
||||
- [TuneControl](../msg_docs/TuneControl.md)
|
||||
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
|
||||
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
|
||||
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
|
||||
- [BatteryInfo](../msg_docs/BatteryInfo.md)
|
||||
- [CameraStatus](../msg_docs/CameraStatus.md)
|
||||
- [QshellRetval](../msg_docs/QshellRetval.md)
|
||||
- [SensorMag](../msg_docs/SensorMag.md)
|
||||
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
|
||||
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
|
||||
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
|
||||
- [AirspeedWind](../msg_docs/AirspeedWind.md)
|
||||
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
|
||||
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
|
||||
- [GpsDump](../msg_docs/GpsDump.md)
|
||||
- [SensorTemp](../msg_docs/SensorTemp.md)
|
||||
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
|
||||
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
|
||||
- [SensorsStatus](../msg_docs/SensorsStatus.md)
|
||||
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
|
||||
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
|
||||
- [VehicleAirData](../msg_docs/VehicleAirData.md)
|
||||
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
|
||||
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
|
||||
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
|
||||
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
|
||||
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
|
||||
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
|
||||
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
|
||||
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
|
||||
- [RaptorInput](../msg_docs/RaptorInput.md)
|
||||
- [SensorGyro](../msg_docs/SensorGyro.md)
|
||||
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
|
||||
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
|
||||
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
|
||||
- [EstimatorStates](../msg_docs/EstimatorStates.md)
|
||||
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
|
||||
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
|
||||
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
|
||||
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
|
||||
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
|
||||
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
|
||||
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
|
||||
- [HomePositionV0](../msg_docs/HomePositionV0.md)
|
||||
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
|
||||
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
|
||||
- [IrlockReport](../msg_docs/IrlockReport.md)
|
||||
- [Ping](../msg_docs/Ping.md)
|
||||
- [CameraCapture](../msg_docs/CameraCapture.md)
|
||||
- [Vtx](../msg_docs/Vtx.md)
|
||||
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
|
||||
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
|
||||
- [EscReport](../msg_docs/EscReport.md)
|
||||
- [Gripper](../msg_docs/Gripper.md)
|
||||
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
|
||||
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
|
||||
- [VehicleRoi](../msg_docs/VehicleRoi.md)
|
||||
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
|
||||
- [NeuralControl](../msg_docs/NeuralControl.md)
|
||||
- [DatamanResponse](../msg_docs/DatamanResponse.md)
|
||||
- [GimbalControls](../msg_docs/GimbalControls.md)
|
||||
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
|
||||
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
|
||||
- [DatamanRequest](../msg_docs/DatamanRequest.md)
|
||||
- [Event](../msg_docs/Event.md)
|
||||
- [RadioStatus](../msg_docs/RadioStatus.md)
|
||||
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
|
||||
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
|
||||
|
||||
:::
|
||||
|
||||
@@ -35,8 +35,8 @@ PX4-Autopilot contains a template for writing a new application (module) that ru
|
||||
|
||||
```cpp
|
||||
WorkItemExample::WorkItemExample() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::test1)
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::test1)
|
||||
{
|
||||
}
|
||||
```
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user