Compare commits
58 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4bbaff0131 | |||
| 1762c2db0b | |||
| 06556f4828 | |||
| 44c128aade | |||
| 6912ae7b14 | |||
| f19adb896c | |||
| c3f90af3ef | |||
| a5e55ffd75 | |||
| 3b4df0aead | |||
| 8576e07b73 | |||
| 83c41dcf87 | |||
| 550b7148a5 | |||
| 047fddbcd8 | |||
| dd2530bb09 | |||
| 897ff241ce | |||
| 6f18fa39e8 | |||
| 348a558a15 | |||
| b412796fc7 | |||
| 6597c4680c | |||
| df8747eb10 | |||
| 04134dccab | |||
| 4d0efccb55 | |||
| 115f205cbc | |||
| 039ec78d35 | |||
| 9cfd3a4506 | |||
| 4281faa98a | |||
| 5189d42d68 | |||
| 9b6e7cb800 | |||
| ed387555e9 | |||
| dd03e18fee | |||
| 1079c57fd0 | |||
| ebe0b727d8 | |||
| ad895f7010 | |||
| 685f9248e4 | |||
| 0ffa4e72ac | |||
| c8a1a38147 | |||
| 8624682db1 | |||
| 4caee55a76 | |||
| fffc1b5d04 | |||
| 6a7e39aa64 | |||
| 6306c78f79 | |||
| b9a1c429b3 | |||
| 0dd1640a54 | |||
| 2828162f72 | |||
| 76eca4b7a4 | |||
| 0b621009d5 | |||
| 56c69f4c07 | |||
| c7295c8a4f | |||
| 3ba440c332 | |||
| b04518c0bc | |||
| 45abdb14b3 | |||
| 701ac9b257 | |||
| 6db00a2326 | |||
| 935a21d05c | |||
| d2e3668ad9 | |||
| 541ee6f81d | |||
| 8b870e364e | |||
| b142342c3a |
@@ -0,0 +1,207 @@
|
||||
---
|
||||
name: review-pr
|
||||
description: Review a pull request with structured, domain-aware feedback
|
||||
argument-hint: "<PR number or URL>"
|
||||
allowed-tools: Bash, Read, Glob, Grep, Agent
|
||||
---
|
||||
|
||||
# PX4 Pull Request Review
|
||||
|
||||
Review a pull request with domain-aware checks based on which files are changed.
|
||||
|
||||
**No Claude attribution anywhere.**
|
||||
|
||||
## Steps
|
||||
|
||||
1. **Fetch PR context.** Run these in parallel:
|
||||
- `gh pr view <PR> --json number,title,body,baseRefName,headRefName,files,commits,reviewRequests,reviews,author`
|
||||
- `gh pr checks <PR>` (exit code 8 means some checks are pending, this is normal, not an error)
|
||||
- `gh pr diff <PR>` -- if this fails with HTTP 406 (300+ files), do NOT retry. Instead use `gh api repos/OWNER/REPO/pulls/NUMBER/files --paginate` to get the full file list in one call, then fetch patches for key infrastructure files individually and sample representative changes from each domain touched.
|
||||
- `gh api repos/OWNER/REPO/pulls/NUMBER/comments --paginate --jq '.[] | {user: .user.login, body: .body, path: .path, created_at: .created_at}'` to get inline review comments
|
||||
- `gh api repos/OWNER/REPO/issues/NUMBER/comments --paginate --jq '.[] | {user: .user.login, body: .body, created_at: .created_at}'` to get PR conversation comments
|
||||
|
||||
From the PR metadata, note:
|
||||
- **Assigned reviewers**: who has been requested to review (from `reviewRequests`)
|
||||
- **Existing reviews**: who has already reviewed and their verdict (from `reviews` -- approved, changes_requested, commented, dismissed)
|
||||
- **PR comments and inline comments**: read all existing feedback to avoid duplicating points already raised by other reviewers, and to build on their discussion rather than ignoring it
|
||||
|
||||
2. **Check CI status.** From the `gh pr checks` output in step 1, summarize pass/fail/pending. If there are failures, fetch logs with `gh run view <run-id> --log-failed`. Include CI status in the output.
|
||||
|
||||
3. **Recommend merge strategy.** Analyze the commit history and recommend squash or rebase merge. This decision informs all subsequent commit hygiene feedback.
|
||||
|
||||
**Recommend rebase merge** when:
|
||||
- Commits are atomic, each builds/works independently
|
||||
- Each commit has a proper `type(scope): description` message
|
||||
- The PR intentionally separates logical changes (e.g., refactor + feature, or one commit per module)
|
||||
- The commit history tells a useful story that would be lost by squashing
|
||||
|
||||
**Recommend squash merge** when:
|
||||
- There are WIP, fixup, or review-response commits
|
||||
- Commit messages are messy or inconsistent
|
||||
- The PR is a single logical change spread across multiple commits
|
||||
- There are "oops" or "make format" commits mixed in
|
||||
|
||||
Include the recommendation in the output. If recommending rebase, flag any commits that break atomicity or have bad messages. If recommending squash, don't bother flagging individual commit messages (they'll be discarded) but ensure the PR title is correct since it becomes the squash commit message.
|
||||
|
||||
4. **Check conventional commit title.** Verify the PR title follows `type(scope): description` per CONTRIBUTING.md. The PR title becomes the commit message on squash-merge, so it must be accurate and descriptive. Verify the scope matches the primary area of changed files. If the PR introduces breaking changes, the title must include `!` before the colon. If rebase merge was recommended in step 3, also scan individual commit messages for anti-patterns: vague messages ("fix", "update"), missing type prefix, review-response noise ("apply suggestions from code review", "do make format"), or WIP markers. Flag these for rewording.
|
||||
|
||||
5. **Identify domains touched.** Classify changed files into domains based on paths (a PR may touch multiple):
|
||||
- **Estimation**: `src/modules/ekf2/`, `src/lib/wind_estimator/`, `src/lib/world_magnetic_model/`
|
||||
- **Control**: `src/modules/mc_*control*/`, `src/modules/fw_*control*/`, `src/modules/flight_mode_manager/`, `src/lib/rate_control/`, `src/lib/npfg/`, `src/modules/vtol_att_control/`
|
||||
- **Drivers/CAN**: `src/drivers/`, `src/modules/cyphal/`, `src/drivers/uavcan*/`
|
||||
- **Simulation**: `src/modules/simulation/`, `Tools/simulation/`
|
||||
- **System**: `src/modules/commander/`, `src/modules/logger/`, `src/systemcmds/`, `platforms/`, `src/modules/dataman/`
|
||||
- **Board Addition**: `boards/{manufacturer}/{board}/` (new directories only, not modifications to existing boards)
|
||||
- **CI/Build**: `.github/`, `CMakeLists.txt`, `Makefile`, `cmake/`, `Tools/`, `Kconfig`
|
||||
- **Messages/Protocol**: `msg/`, `src/modules/mavlink/`, `src/modules/uxrce_dds_client/`
|
||||
|
||||
6. **Apply core checks** (always):
|
||||
- **Correctness**: logic errors, off-by-ones, unhandled edge cases
|
||||
- **Type safety**: int16 overflow, float/double promotion, unsigned subtraction, use `uint64_t` for absolute time
|
||||
- **Initialization**: uninitialized variables, missing default construction
|
||||
- **Buffer safety**: unchecked array access, stack allocation of large buffers, snprintf bounds
|
||||
- **Magic numbers**: every numeric literal needs a named constant or justification
|
||||
- **Framework reuse**: use PX4_ERR/WARN/INFO, existing libraries (AlphaFilter, SlewRate, RateControl), MAVLink constants from the library
|
||||
- **Naming**: accurate, no unjustified abbreviations, current terminology (GPS -> GNSS for new code)
|
||||
- **Unnecessary complexity**: can code be removed instead of added? Is there a simpler pattern?
|
||||
- **Test coverage**: new features should include unit or integration tests; bug fixes should include regression tests where practical. When automated testing is infeasible (hardware-specific), require a flight log link from https://logs.px4.io or bench test evidence.
|
||||
- **PR hygiene**: focused scope, no unrelated formatting, no stale submodule changes. Commits should be atomic and independently revertable. Multiple WIP or review-response commits should be squashed. Clean, logical commits will be preserved individually on main via rebase merge. **Do NOT assume PRs are squash-merged. Both squash and rebase merge are enabled; merge commits are disabled.** Verify the PR targets `main` unless it is a backport or release-specific fix.
|
||||
- **Formatting**: `make format` / `make check_format` (astyle) for C/C++ files; `clang-tidy` clean. Python files checked with `mypy` and `flake8`. PRs failing CI format or lint checks will not be merged.
|
||||
- **Coding style**: C/C++ must follow the [PX4 coding style](https://docs.px4.io/main/en/contribute/code.html)
|
||||
- **Necessity**: challenge every addition with "Why?" Is this actually needed or just copied? Can we change a default instead of adding runtime detection?
|
||||
- **Root cause vs symptom**: is this fixing the real problem or masking it?
|
||||
- **Ecosystem impact**: what does this change mean for QGC users, log analysis tools, and third-party integrations?
|
||||
- **Sustainability**: who will maintain this? Does it create long-term burden?
|
||||
- **Architecture fit**: does the code live in the module that naturally owns the data? Are there unnecessary cross-module dependencies?
|
||||
- **End user impact**: will parameters confuse less-technical users? Are error messages actionable in QGC?
|
||||
|
||||
7. **Apply domain checks** based on step 5:
|
||||
|
||||
**Estimation:**
|
||||
- Singularities in aerospace math (euler angles near gimbal lock, sideslip at low airspeed)
|
||||
- Aliasing from downsampling sensor data without filtering
|
||||
- Kalman filter correctness (Joseph form, innovation variance, covariance symmetry)
|
||||
- CPU cost on embedded targets (avoid unnecessary sqrt, limit fusion rate)
|
||||
- Frame/coordinate system correctness (FRD vs NED, body vs earth)
|
||||
|
||||
**Control:**
|
||||
- Phase margin: output filters consume margin for no benefit; prefer adjusting gyro/d-gyro cutoffs
|
||||
- Circular dependencies: sensor data feeding back into its own control loop (e.g., throttle-based airspeed in TECS)
|
||||
- NaN propagation in flight-critical math; check `PX4_ISFINITE` before magnitude checks
|
||||
- Setpoint generation vs output-stage hacks: prefer proper setpoint smoothing over controller output filtering
|
||||
- Yaw control edge cases: heading lock, drift, setpoint propagation
|
||||
- Flight task inheritance chain: correct base class for the desired behavior
|
||||
- Control allocation: actuator function ordering, motor index mapping
|
||||
|
||||
**Drivers/CAN:**
|
||||
- CAN bus devices behave differently from serial/SPI; check driver assumptions
|
||||
- ESC index mapping: telemetry index != channel when motors are disabled
|
||||
- ESC hardware quirks: 4-in-1 ESCs may report current on only one channel
|
||||
- device_id correctness and I2CSPIDriver patterns
|
||||
- Time representation: prefer `hrt_abstime` over iteration counts
|
||||
|
||||
**Simulation:**
|
||||
- Physics fidelity: noise models should match reality (GPS noise is not Gaussian)
|
||||
- Keep gz_bridge generic; vehicle-specific logic belongs in plugins
|
||||
- Prefer gz-transport over ROS2 dependencies when possible
|
||||
- Wrench commands for physics correctness vs kinematic constraints
|
||||
- Library generic/specific boundary: only base classes in common libs
|
||||
|
||||
**System:**
|
||||
- Race conditions and concurrency: no partial fixes, demand complete solutions
|
||||
- Semaphore/scheduling edge cases; understand RTOS guarantees
|
||||
- State machine sequential-logic bugs (consecutive RTL, armed/disarmed alternation)
|
||||
- uORB-driven scheduling (`SubscriptionCallback`), not extra threads
|
||||
- param_set triggers auto-save; no redundant param_save_default
|
||||
- Flash/memory efficiency: avoid `std::string` on embedded, minimize SubscriptionData usage
|
||||
- Constructor initialization order matters
|
||||
|
||||
**CI/Build:**
|
||||
- Pipeline race conditions (tag + branch push double-trigger, git describe correctness)
|
||||
- Container image size (check layer bloat)
|
||||
- Ubuntu LTS support policy (latest + one prior only)
|
||||
- Build time impact
|
||||
- CMake preferred over Makefiles
|
||||
|
||||
**Messages/Protocol:**
|
||||
- Backwards compatibility: will this break QGC, post-flight tools, or uLog parsers?
|
||||
- uORB: `timestamp` for publication metadata, `timestamp_sample` close to physical sample, include `device_id`
|
||||
- Don't version messages unless strictly needed
|
||||
- Parameter UX: will this confuse users in a GCS? Every new param is a configuration burden
|
||||
- MAVLink: use library constants, don't implement custom stream rates
|
||||
|
||||
**Board Addition:**
|
||||
- **Flight logs**: require a link to https://logs.px4.io demonstrating basic operation for the vehicle type (hover for multicopters, stable flight for fixed-wing, driving for rovers, etc.); short bench-only logs are insufficient
|
||||
- **Documentation**: require a docs page in `docs/en/flight_controller/` with pinout, where-to-buy, connector types, version badge, and manufacturer-supported notice block
|
||||
- **USB VID/PID**: must not reuse another manufacturer's Vendor ID; manufacturer must use their own
|
||||
- **Board naming**: directory is `boards/{manufacturer}/{board}/`, both lowercase, hyphens for board name
|
||||
- **Unique board_id**: registered in `boards/boards.json`, no collisions
|
||||
- **Copied code cleanup**: check for leftover files, configs, or comments from the template board; "Is this real or leftover?"
|
||||
- **RC configuration**: prefer `CONFIG_DRIVERS_COMMON_RC` over legacy `CONFIG_DRIVERS_RC_INPUT`
|
||||
- **No board-specific custom modules**: reject copy-pasted drivers (e.g., custom heater) when existing infrastructure works
|
||||
- **Bootloader**: expect a bootloader defconfig (`nuttx-config/bootloader/defconfig`) or explanation of shared bootloader
|
||||
- **CI integration**: board must be added to CI compile workflows so it builds on every PR
|
||||
- **Flash constraints**: verify enabled modules fit in flash; we are running low across all board targets
|
||||
- **Port labels**: serial port labels must match what is physically printed on the board
|
||||
- **Hardware availability**: for unknown manufacturers, verify the product exists and is purchasable (no vaporware)
|
||||
|
||||
8. **Format output** as:
|
||||
- **CI status**: pass/fail summary, link to failed runs if any
|
||||
- **Merge strategy**: recommend squash or rebase merge with reasoning
|
||||
- **Title check**: pass/fail with suggestion
|
||||
- **Review status**: list assigned reviewers and any existing reviews (who approved, who requested changes, key points already raised). Note if your review would duplicate feedback already given.
|
||||
- **Domains detected**: list which domain checks were applied
|
||||
- **Summary**: one paragraph on what the PR does and whether the approach is sound
|
||||
- **Issues**: numbered list, each with file:line, severity (blocker/warning/nit), and explanation. Skip issues already raised by other reviewers unless you have something to add.
|
||||
- **Verdict**: approve, request changes, or needs discussion
|
||||
|
||||
After the structured output, also display a **draft PR comment** formatted using the PR comment formatting rules from step 9. This gives the user a preview of what would be posted.
|
||||
|
||||
9. **Interactive dialog.** After displaying the review, present the user with these options:
|
||||
|
||||
Present options based on the verdict:
|
||||
|
||||
If verdict is **approve**:
|
||||
```
|
||||
What would you like to do?
|
||||
1. Chat about this PR (ask questions, explore code) [default]
|
||||
2. Approve this PR and post the review comment
|
||||
3. Adjust the review or draft (tell me what to change)
|
||||
4. Done for now
|
||||
```
|
||||
|
||||
If verdict is **request changes**:
|
||||
```
|
||||
What would you like to do?
|
||||
1. Chat about this PR (ask questions, explore code) [default]
|
||||
2. Request changes on this PR and post the review comment
|
||||
3. Adjust the review or draft (tell me what to change)
|
||||
4. Done for now
|
||||
```
|
||||
|
||||
If verdict is **needs discussion**:
|
||||
```
|
||||
What would you like to do?
|
||||
1. Chat about this PR (ask questions, explore code) [default]
|
||||
2. Post the review as a comment (no approval or rejection)
|
||||
3. Adjust the review or draft (tell me what to change)
|
||||
4. Done for now
|
||||
```
|
||||
|
||||
Wait for the user to choose before proceeding. If they pick:
|
||||
- **1 (chat)**: enter a free-form conversation about the PR. The user can ask about specific files, code paths, or decisions. When done, loop back to the options. This is the default if the user just presses enter.
|
||||
- **2 (submit)**: use the draft PR comment already shown. Before posting, check if you have review permissions: run `gh api repos/OWNER/REPO/collaborators/$(gh api user --jq .login)/permission --jq .permission` -- if `admin` or `write`, submit as a formal review with `gh pr review <PR> --approve --body "..."` or `gh pr review <PR> --request-changes --body "..."` based on the verdict. If no write access, fall back to `gh pr comment <PR> --body "..."`. Always confirm with the user before posting.
|
||||
- **3 (adjust)**: ask what to change, update the review and draft, then loop back to the options.
|
||||
- **4 (done)**: stop.
|
||||
|
||||
**PR comment formatting rules** (for the draft):
|
||||
When writing the GitHub comment, rewrite the review to sound like a human reviewer, not a structured report. Do NOT include the full skill output. Instead:
|
||||
- Drop most meta-sections (CI status, title check, domains detected, severity labels) but keep the merge strategy recommendation (e.g., "I'd suggest a rebase merge here since the commits are clean and atomic" or "This should be squash-merged, the commit history is messy")
|
||||
- Write conversationally: "Nice work on this. A few things I noticed:" not "Issues: 1. file:line (warning):"
|
||||
- Lead with a brief take on the overall change (1-2 sentences)
|
||||
- List only actionable feedback as natural review comments, not numbered checklists
|
||||
- Skip nits unless they are particularly useful
|
||||
- End with a clear stance: looks good to merge, needs a few changes, or let's discuss X
|
||||
- Post with `gh pr comment <PR> --body "$(cat <<'EOF' ... EOF)"`. Do not post without explicit confirmation.
|
||||
|
||||
If the user provided arguments, use them as context: $ARGUMENTS
|
||||
@@ -0,0 +1 @@
|
||||
build/
|
||||
@@ -0,0 +1,115 @@
|
||||
name: Build PX4 .deb Package
|
||||
description: Build PX4 SITL, run cpack, validate the .deb, and upload artifact
|
||||
|
||||
inputs:
|
||||
target:
|
||||
description: 'Build target: default or sih'
|
||||
required: true
|
||||
artifact-name:
|
||||
description: Name for the uploaded artifact
|
||||
required: true
|
||||
ccache-key-prefix:
|
||||
description: Prefix for ccache cache keys
|
||||
default: deb-ccache
|
||||
ccache-max-size:
|
||||
description: Maximum ccache size
|
||||
default: 400M
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Restore ccache
|
||||
id: ccache-restore
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ${{ inputs.ccache-key-prefix }}-${{ github.ref_name }}-${{ github.sha }}
|
||||
restore-keys: |
|
||||
${{ inputs.ccache-key-prefix }}-${{ github.ref_name }}-
|
||||
${{ inputs.ccache-key-prefix }}-${{ github.base_ref || 'main' }}-
|
||||
${{ inputs.ccache-key-prefix }}-
|
||||
|
||||
- name: Configure ccache
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p ~/.ccache
|
||||
echo "base_dir = ${GITHUB_WORKSPACE}" > ~/.ccache/ccache.conf
|
||||
echo "compression = true" >> ~/.ccache/ccache.conf
|
||||
echo "compression_level = 6" >> ~/.ccache/ccache.conf
|
||||
echo "max_size = ${{ inputs.ccache-max-size }}" >> ~/.ccache/ccache.conf
|
||||
echo "hash_dir = false" >> ~/.ccache/ccache.conf
|
||||
echo "compiler_check = content" >> ~/.ccache/ccache.conf
|
||||
ccache -s
|
||||
ccache -z
|
||||
|
||||
- name: Build PX4 SITL
|
||||
shell: bash
|
||||
run: make px4_sitl_${{ inputs.target }}
|
||||
|
||||
- name: ccache stats
|
||||
if: always()
|
||||
shell: bash
|
||||
run: ccache -s
|
||||
|
||||
- name: Save ccache
|
||||
uses: actions/cache/save@v4
|
||||
if: always()
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ${{ inputs.ccache-key-prefix }}-${{ github.ref_name }}-${{ github.sha }}
|
||||
|
||||
- name: Build .deb package
|
||||
shell: bash
|
||||
run: |
|
||||
cd build/px4_sitl_${{ inputs.target }}
|
||||
cpack -G DEB
|
||||
|
||||
- name: Print package info and contents
|
||||
shell: bash
|
||||
run: |
|
||||
cd build/px4_sitl_${{ inputs.target }}
|
||||
echo "--- Package info ---"
|
||||
dpkg-deb -I *.deb
|
||||
echo "--- Package contents ---"
|
||||
dpkg-deb -c *.deb
|
||||
|
||||
- name: Validate sih package
|
||||
if: inputs.target == 'sih'
|
||||
shell: bash
|
||||
run: |
|
||||
cd build/px4_sitl_sih
|
||||
echo "--- Verify NO Gazebo resources ---"
|
||||
! dpkg-deb -c px4_*.deb | grep share/gz > /dev/null && echo "PASS: no Gazebo" || { echo "FAIL: Gazebo found"; exit 1; }
|
||||
echo "--- Install test ---"
|
||||
dpkg -i px4_*.deb
|
||||
test -x /opt/px4/bin/px4 || { echo "FAIL: px4 binary not found"; exit 1; }
|
||||
test -L /usr/bin/px4 || { echo "FAIL: symlink not created"; exit 1; }
|
||||
test ! -d /opt/px4/share/gz || { echo "FAIL: Gazebo dir should not exist"; exit 1; }
|
||||
echo "--- Smoke test ---"
|
||||
/opt/px4/bin/px4 -h
|
||||
echo "PASS: sih package validation successful"
|
||||
|
||||
- name: Validate gazebo package
|
||||
if: inputs.target == 'default'
|
||||
shell: bash
|
||||
run: |
|
||||
cd build/px4_sitl_default
|
||||
echo "--- Verify Gazebo resources in package ---"
|
||||
dpkg-deb -c px4-gazebo_*.deb | grep share/gz/models > /dev/null || { echo "FAIL: models missing"; exit 1; }
|
||||
dpkg-deb -c px4-gazebo_*.deb | grep share/gz/worlds > /dev/null || { echo "FAIL: worlds missing"; exit 1; }
|
||||
echo "--- Install test ---"
|
||||
dpkg -i px4-gazebo_*.deb
|
||||
test -x /opt/px4-gazebo/bin/px4 || { echo "FAIL: px4 binary not found"; exit 1; }
|
||||
test -x /opt/px4-gazebo/bin/px4-gazebo || { echo "FAIL: wrapper not found"; exit 1; }
|
||||
test -L /usr/bin/px4-gazebo || { echo "FAIL: symlink not created"; exit 1; }
|
||||
test -d /opt/px4-gazebo/share/gz/models || { echo "FAIL: Gazebo models not installed"; exit 1; }
|
||||
echo "--- Smoke test ---"
|
||||
/opt/px4-gazebo/bin/px4 -h
|
||||
echo "PASS: gazebo package validation successful"
|
||||
|
||||
- name: Upload .deb artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ inputs.artifact-name }}
|
||||
path: build/px4_sitl_${{ inputs.target }}/*.deb
|
||||
if-no-files-found: error
|
||||
@@ -0,0 +1,21 @@
|
||||
---
|
||||
applyTo: "boards/**"
|
||||
---
|
||||
|
||||
# Board Addition Review Guidelines
|
||||
|
||||
In addition to the core code review guidelines, when reviewing new board additions:
|
||||
|
||||
- **Flight logs**: require a link to https://logs.px4.io demonstrating basic operation for the vehicle type (hover for multicopters, stable flight for fixed-wing, driving for rovers, etc.); short bench-only logs are insufficient
|
||||
- **Documentation**: require a docs page in `docs/en/flight_controller/` with pinout, where-to-buy, connector types, version badge, and manufacturer-supported notice block
|
||||
- **USB VID/PID**: must not reuse another manufacturer's Vendor ID; manufacturer must use their own
|
||||
- **Board naming**: directory is `boards/{manufacturer}/{board}/`, both lowercase, hyphens for board name
|
||||
- **Unique board_id**: registered in `boards/boards.json`, no collisions
|
||||
- **Copied code cleanup**: check for leftover files, configs, or comments from the template board. Ask "Is this real or leftover?"
|
||||
- **RC configuration**: prefer `CONFIG_DRIVERS_COMMON_RC` over legacy `CONFIG_DRIVERS_RC_INPUT`
|
||||
- **No board-specific custom modules**: reject copy-pasted drivers (e.g., custom heater) when existing infrastructure works
|
||||
- **Bootloader**: expect a bootloader defconfig (`nuttx-config/bootloader/defconfig`) or explanation of shared bootloader
|
||||
- **CI integration**: board must be added to CI compile workflows so it builds on every PR
|
||||
- **Flash constraints**: verify enabled modules fit in flash; we are running low across all board targets
|
||||
- **Port labels**: serial port labels must match what is physically printed on the board
|
||||
- **Hardware availability**: for unknown manufacturers, verify the product exists and is purchasable (no vaporware)
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
applyTo: ".github/**,cmake/**,Makefile,CMakeLists.txt,Tools/**,**/Kconfig"
|
||||
---
|
||||
|
||||
# CI/Build Review Guidelines
|
||||
|
||||
In addition to the core code review guidelines:
|
||||
|
||||
- Check for pipeline race conditions (tag + branch push double-trigger, git describe correctness)
|
||||
- Container image size: check for layer bloat
|
||||
- Ubuntu LTS support policy: only latest + one prior LTS version
|
||||
- Consider build time impact of changes
|
||||
- Prefer CMake over Makefiles
|
||||
@@ -0,0 +1,32 @@
|
||||
---
|
||||
applyTo: "src/**,boards/**,platforms/**,msg/**,cmake/**,Makefile,CMakeLists.txt,Tools/**,.github/**"
|
||||
---
|
||||
|
||||
# PX4 Code Review Guidelines
|
||||
|
||||
## Conventions
|
||||
|
||||
- PR titles must follow conventional commits: `type(scope): description` (see CONTRIBUTING.md)
|
||||
- Types: `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`, `chore`, `revert`
|
||||
- Scope should match the primary area of changed files
|
||||
- Append `!` before the colon for breaking changes
|
||||
- Both squash merge and rebase merge are enabled; merge commits are disabled
|
||||
- Commits should be atomic and independently revertable
|
||||
- WIP or review-response commits should be squashed before merge
|
||||
|
||||
## Core Checks (always apply)
|
||||
|
||||
- **Correctness**: logic errors, off-by-ones, unhandled edge cases
|
||||
- **Type safety**: int16 overflow, float/double promotion, unsigned subtraction, use `uint64_t` for absolute time
|
||||
- **Initialization**: uninitialized variables, missing default construction
|
||||
- **Buffer safety**: unchecked array access, stack allocation of large buffers, snprintf bounds
|
||||
- **Magic numbers**: every numeric literal needs a named constant or justification
|
||||
- **Framework reuse**: use PX4_ERR/WARN/INFO, existing libraries (AlphaFilter, SlewRate, RateControl), MAVLink constants from the library
|
||||
- **Naming**: accurate, no unjustified abbreviations, current terminology (GPS -> GNSS for new code)
|
||||
- **Unnecessary complexity**: can code be removed instead of added? Is there a simpler pattern?
|
||||
- **Test coverage**: new features should include unit or integration tests; bug fixes should include regression tests where practical
|
||||
- **Formatting**: `make format` / `make check_format` (astyle) for C/C++ files; `clang-tidy` clean
|
||||
- **Coding style**: C/C++ must follow the PX4 coding style (https://docs.px4.io/main/en/contribute/code.html)
|
||||
- **Necessity**: challenge every addition. Is this actually needed or just copied?
|
||||
- **Architecture fit**: does the code live in the module that naturally owns the data? No unnecessary cross-module dependencies
|
||||
- **Ecosystem impact**: consider QGC users, log analysis tools, and third-party integrations
|
||||
@@ -0,0 +1,15 @@
|
||||
---
|
||||
applyTo: "src/modules/mc_*control*/**,src/modules/fw_*control*/**,src/modules/flight_mode_manager/**,src/lib/rate_control/**,src/lib/npfg/**,src/modules/vtol_att_control/**"
|
||||
---
|
||||
|
||||
# Control Review Guidelines
|
||||
|
||||
In addition to the core code review guidelines:
|
||||
|
||||
- Phase margin: output filters consume margin for no benefit; prefer adjusting gyro/d-gyro cutoffs
|
||||
- Check for circular dependencies: sensor data feeding back into its own control loop (e.g., throttle-based airspeed in TECS)
|
||||
- NaN propagation in flight-critical math; check `PX4_ISFINITE` before magnitude checks
|
||||
- Prefer proper setpoint smoothing over controller output filtering (setpoint generation vs output-stage hacks)
|
||||
- Check yaw control edge cases: heading lock, drift, setpoint propagation
|
||||
- Verify flight task inheritance chain uses the correct base class for desired behavior
|
||||
- Control allocation: verify actuator function ordering and motor index mapping
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
applyTo: "src/drivers/**,src/modules/cyphal/**"
|
||||
---
|
||||
|
||||
# Drivers/CAN Review Guidelines
|
||||
|
||||
In addition to the core code review guidelines:
|
||||
|
||||
- CAN bus devices behave differently from serial/SPI; check driver assumptions
|
||||
- ESC index mapping: telemetry index != channel when motors are disabled
|
||||
- ESC hardware quirks: 4-in-1 ESCs may report current on only one channel
|
||||
- Verify device_id correctness and I2CSPIDriver patterns
|
||||
- Time representation: prefer `hrt_abstime` over iteration counts
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
applyTo: "src/modules/ekf2/**,src/lib/wind_estimator/**,src/lib/world_magnetic_model/**"
|
||||
---
|
||||
|
||||
# Estimation Review Guidelines
|
||||
|
||||
In addition to the core code review guidelines:
|
||||
|
||||
- Check for singularities in aerospace math (euler angles near gimbal lock, sideslip at low airspeed)
|
||||
- Flag aliasing from downsampling sensor data without proper filtering
|
||||
- Verify Kalman filter correctness (Joseph form, innovation variance, covariance symmetry)
|
||||
- Consider CPU cost on embedded targets (avoid unnecessary sqrt, limit fusion rate)
|
||||
- Verify frame/coordinate system correctness (FRD vs NED, body vs earth frame)
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
applyTo: "msg/**,src/modules/mavlink/**,src/modules/uxrce_dds_client/**"
|
||||
---
|
||||
|
||||
# Messages/Protocol Review Guidelines
|
||||
|
||||
In addition to the core code review guidelines:
|
||||
|
||||
- Backwards compatibility: will this break QGC, post-flight tools, or uLog parsers?
|
||||
- uORB: `timestamp` for publication metadata, `timestamp_sample` close to physical sample, include `device_id`
|
||||
- Don't version messages unless strictly needed
|
||||
- Parameter UX: will this confuse users in a GCS? Every new param is a configuration burden
|
||||
- MAVLink: use library constants, don't implement custom stream rates
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
applyTo: "src/modules/simulation/**,Tools/simulation/**"
|
||||
---
|
||||
|
||||
# Simulation Review Guidelines
|
||||
|
||||
In addition to the core code review guidelines:
|
||||
|
||||
- Physics fidelity: noise models should match reality (GPS noise is not Gaussian)
|
||||
- Keep gz_bridge generic; vehicle-specific logic belongs in plugins
|
||||
- Prefer gz-transport over ROS2 dependencies when possible
|
||||
- Use wrench commands for physics correctness vs kinematic constraints
|
||||
- Library generic/specific boundary: only base classes in common libs
|
||||
@@ -0,0 +1,15 @@
|
||||
---
|
||||
applyTo: "src/modules/commander/**,src/modules/logger/**,src/systemcmds/**,platforms/**,src/modules/dataman/**"
|
||||
---
|
||||
|
||||
# System Review Guidelines
|
||||
|
||||
In addition to the core code review guidelines:
|
||||
|
||||
- Race conditions and concurrency: no partial fixes, demand complete solutions
|
||||
- Semaphore/scheduling edge cases; understand RTOS guarantees
|
||||
- State machine sequential-logic bugs (consecutive RTL, armed/disarmed alternation)
|
||||
- Use uORB-driven scheduling (`SubscriptionCallback`), not extra threads
|
||||
- `param_set` triggers auto-save; no redundant `param_save_default`
|
||||
- Flash/memory efficiency: avoid `std::string` on embedded, minimize SubscriptionData usage
|
||||
- Constructor initialization order matters
|
||||
@@ -0,0 +1,214 @@
|
||||
name: SITL Packages and Containers
|
||||
|
||||
on:
|
||||
push:
|
||||
tags: ['v*']
|
||||
pull_request:
|
||||
paths:
|
||||
- 'cmake/package.cmake'
|
||||
- 'platforms/posix/CMakeLists.txt'
|
||||
- 'Tools/packaging/**'
|
||||
- 'boards/px4/sitl/sih.px4board'
|
||||
- '.github/workflows/build_deb_package.yml'
|
||||
- '.github/actions/build-deb/**'
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
deploy_containers:
|
||||
description: 'Push container images to registry'
|
||||
required: false
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
|
||||
jobs:
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Setup: extract version and determine whether to push containers
|
||||
# ---------------------------------------------------------------------------
|
||||
setup:
|
||||
name: Setup
|
||||
runs-on: [runs-on,"runner=1cpu-linux-x64","image=ubuntu24-full-x64","run-id=${{ github.run_id }}",extras=s3-cache,spot=false]
|
||||
outputs:
|
||||
px4_version: ${{ steps.version.outputs.px4_version }}
|
||||
should_push: ${{ steps.push.outputs.should_push }}
|
||||
steps:
|
||||
- uses: runs-on/action@v2
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-tags: true
|
||||
submodules: false
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set PX4 version
|
||||
id: version
|
||||
run: echo "px4_version=$(git describe --tags --match 'v[0-9]*')" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Check if we should push containers
|
||||
id: push
|
||||
run: |
|
||||
if [[ "${{ startsWith(github.ref, 'refs/tags/') }}" == "true" ]] || \
|
||||
[[ "${{ github.event_name }}" == "workflow_dispatch" && "${{ github.event.inputs.deploy_containers }}" == "true" ]]; then
|
||||
echo "should_push=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "should_push=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Build .deb packages (all distros, arches, targets)
|
||||
# ---------------------------------------------------------------------------
|
||||
build-deb:
|
||||
name: "Build .deb (${{ matrix.target }}/${{ matrix.codename }}/${{ matrix.arch }})"
|
||||
needs: setup
|
||||
runs-on: [runs-on,"runner=4cpu-linux-${{ matrix.runner }}","image=ubuntu24-full-${{ matrix.runner }}","run-id=${{ github.run_id }}",extras=s3-cache,spot=false]
|
||||
container:
|
||||
image: ${{ matrix.container }}
|
||||
volumes:
|
||||
- /github/workspace:/github/workspace
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- { codename: noble, arch: amd64, runner: x64, container: "ubuntu:24.04", target: default, setup_flags: "" }
|
||||
- { codename: noble, arch: arm64, runner: arm64, container: "ubuntu:24.04", target: default, setup_flags: "" }
|
||||
- { codename: jammy, arch: amd64, runner: x64, container: "ubuntu:22.04", target: default, setup_flags: "" }
|
||||
- { codename: jammy, arch: arm64, runner: arm64, container: "ubuntu:22.04", target: default, setup_flags: "" }
|
||||
- { codename: noble, arch: amd64, runner: x64, container: "ubuntu:24.04", target: sih, setup_flags: "--no-sim-tools" }
|
||||
- { codename: noble, arch: arm64, runner: arm64, container: "ubuntu:24.04", target: sih, setup_flags: "--no-sim-tools" }
|
||||
- { codename: jammy, arch: amd64, runner: x64, container: "ubuntu:22.04", target: sih, setup_flags: "--no-sim-tools" }
|
||||
- { codename: jammy, arch: arm64, runner: arm64, container: "ubuntu:22.04", target: sih, setup_flags: "--no-sim-tools" }
|
||||
env:
|
||||
RUNS_IN_DOCKER: true
|
||||
steps:
|
||||
- uses: runs-on/action@v2
|
||||
|
||||
- name: Fix git in container
|
||||
run: |
|
||||
apt-get update && apt-get install -y git
|
||||
git config --global --add safe.directory $(realpath .)
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
fetch-tags: true
|
||||
|
||||
- name: Cache apt packages
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: /var/cache/apt/archives
|
||||
key: apt-${{ matrix.target }}-${{ matrix.codename }}-${{ matrix.arch }}-${{ hashFiles('Tools/setup/ubuntu.sh') }}
|
||||
restore-keys: apt-${{ matrix.target }}-${{ matrix.codename }}-${{ matrix.arch }}-
|
||||
|
||||
- name: Install dependencies
|
||||
run: ./Tools/setup/ubuntu.sh --no-nuttx ${{ matrix.setup_flags }}
|
||||
|
||||
- name: Build and package .deb
|
||||
uses: ./.github/actions/build-deb
|
||||
with:
|
||||
target: ${{ matrix.target }}
|
||||
artifact-name: px4-sitl-debs-${{ matrix.target }}-${{ matrix.codename }}-${{ matrix.arch }}
|
||||
ccache-key-prefix: deb-ccache-${{ matrix.target }}-${{ matrix.codename }}-${{ matrix.arch }}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Build Docker images from Noble .debs
|
||||
# ---------------------------------------------------------------------------
|
||||
build-docker:
|
||||
name: "Build Image (${{ matrix.image }}/${{ matrix.arch }})"
|
||||
needs: [setup, build-deb]
|
||||
runs-on: [runs-on,"runner=4cpu-linux-${{ matrix.runner }}","image=ubuntu24-full-${{ matrix.runner }}","run-id=${{ github.run_id }}",extras=s3-cache,spot=false]
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- { image: sih, target: sih, arch: amd64, runner: x64, platform: "linux/amd64", dockerfile: Dockerfile.sih }
|
||||
- { image: sih, target: sih, arch: arm64, runner: arm64, platform: "linux/arm64", dockerfile: Dockerfile.sih }
|
||||
- { image: gazebo, target: default, arch: amd64, runner: x64, platform: "linux/amd64", dockerfile: Dockerfile.gazebo }
|
||||
- { image: gazebo, target: default, arch: arm64, runner: arm64, platform: "linux/arm64", dockerfile: Dockerfile.gazebo }
|
||||
steps:
|
||||
- uses: runs-on/action@v2
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: false
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Download Noble .deb artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: px4-sitl-debs-${{ matrix.target }}-noble-${{ matrix.arch }}
|
||||
path: docker-context
|
||||
|
||||
- name: Prepare build context
|
||||
run: cp Tools/packaging/px4-entrypoint.sh docker-context/
|
||||
|
||||
- name: Login to registries
|
||||
if: needs.setup.outputs.should_push == 'true'
|
||||
run: |
|
||||
echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
||||
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
with:
|
||||
driver: docker-container
|
||||
platforms: ${{ matrix.platform }}
|
||||
|
||||
- name: Build and push container image
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: docker-context
|
||||
file: Tools/packaging/${{ matrix.dockerfile }}
|
||||
tags: |
|
||||
px4io/px4-sitl-${{ matrix.image }}:${{ needs.setup.outputs.px4_version }}-${{ matrix.arch }}
|
||||
px4io/px4-sitl-${{ matrix.image }}:latest-${{ matrix.arch }}
|
||||
ghcr.io/px4/px4-sitl-${{ matrix.image }}:${{ needs.setup.outputs.px4_version }}-${{ matrix.arch }}
|
||||
ghcr.io/px4/px4-sitl-${{ matrix.image }}:latest-${{ matrix.arch }}
|
||||
platforms: ${{ matrix.platform }}
|
||||
load: false
|
||||
push: ${{ needs.setup.outputs.should_push == 'true' }}
|
||||
provenance: false
|
||||
cache-from: type=gha,scope=sitl-${{ matrix.image }}-${{ matrix.arch }}
|
||||
cache-to: type=gha,mode=max,scope=sitl-${{ matrix.image }}-${{ matrix.arch }}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Deploy: create multi-arch manifests and push to registries
|
||||
# ---------------------------------------------------------------------------
|
||||
deploy:
|
||||
name: "Deploy (${{ matrix.image }})"
|
||||
needs: [setup, build-docker]
|
||||
if: needs.setup.outputs.should_push == 'true'
|
||||
runs-on: [runs-on,"runner=1cpu-linux-x64","image=ubuntu24-full-x64","run-id=${{ github.run_id }}",extras=s3-cache,spot=false]
|
||||
strategy:
|
||||
matrix:
|
||||
image: [sih, gazebo]
|
||||
steps:
|
||||
- uses: runs-on/action@v2
|
||||
|
||||
- name: Login to registries
|
||||
run: |
|
||||
echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
||||
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin
|
||||
|
||||
- name: Create and push multi-arch manifests
|
||||
run: |
|
||||
VERSION="${{ needs.setup.outputs.px4_version }}"
|
||||
|
||||
for REGISTRY in px4io ghcr.io/px4; do
|
||||
IMAGE="${REGISTRY}/px4-sitl-${{ matrix.image }}"
|
||||
|
||||
for TAG in ${VERSION} latest; do
|
||||
docker manifest create ${IMAGE}:${TAG} \
|
||||
--amend ${IMAGE}:${TAG}-arm64 \
|
||||
--amend ${IMAGE}:${TAG}-amd64
|
||||
|
||||
docker manifest annotate ${IMAGE}:${TAG} ${IMAGE}:${TAG}-arm64 --arch arm64
|
||||
docker manifest annotate ${IMAGE}:${TAG} ${IMAGE}:${TAG}-amd64 --arch amd64
|
||||
|
||||
docker manifest push ${IMAGE}:${TAG}
|
||||
done
|
||||
done
|
||||
@@ -39,10 +39,10 @@ jobs:
|
||||
- name: Check for issues
|
||||
id: check
|
||||
run: |
|
||||
if grep -q "NOASSERTION" /tmp/sbom-verify.txt; then
|
||||
if grep -q "<-- UNRESOLVED" /tmp/sbom-verify.txt; then
|
||||
echo "has_issues=true" >> "$GITHUB_OUTPUT"
|
||||
# Extract NOASSERTION lines
|
||||
grep "NOASSERTION" /tmp/sbom-verify.txt | grep -v "skipped" > /tmp/sbom-issues.txt || true
|
||||
# Extract only genuinely unresolved license lines
|
||||
grep "<-- UNRESOLVED" /tmp/sbom-verify.txt > /tmp/sbom-issues.txt || true
|
||||
# Extract copyleft lines
|
||||
sed -n '/Copyleft licenses detected/,/^$/p' /tmp/sbom-verify.txt > /tmp/sbom-copyleft.txt || true
|
||||
else
|
||||
|
||||
@@ -220,6 +220,10 @@ menu "examples"
|
||||
source "src/examples/Kconfig"
|
||||
endmenu
|
||||
|
||||
menu "templates"
|
||||
source "src/templates/Kconfig"
|
||||
endmenu
|
||||
|
||||
menu "platforms"
|
||||
depends on PLATFORM_QURT || PLATFORM_POSIX || PLATFORM_NUTTX
|
||||
source "platforms/Kconfig"
|
||||
|
||||
@@ -478,6 +478,7 @@ def verify_licenses(source_dir):
|
||||
sub_dir = source_dir / sub_path
|
||||
|
||||
checked_out = sub_dir.is_dir() and any(sub_dir.iterdir())
|
||||
has_explicit_override = sub_path in license_overrides
|
||||
if not checked_out:
|
||||
detected = "(not checked out)"
|
||||
override = license_overrides.get(sub_path, "")
|
||||
@@ -487,9 +488,12 @@ def verify_licenses(source_dir):
|
||||
override = license_overrides.get(sub_path, "")
|
||||
final = override if override else detected
|
||||
|
||||
if final == "NOASSERTION" and checked_out:
|
||||
if final == "NOASSERTION" and has_explicit_override:
|
||||
# Explicitly acknowledged in overrides file — not a failure
|
||||
marker = " (acknowledged)"
|
||||
elif final == "NOASSERTION" and checked_out:
|
||||
has_noassertion = True
|
||||
marker = " <-- NOASSERTION"
|
||||
marker = " <-- UNRESOLVED"
|
||||
elif final == "NOASSERTION" and not checked_out:
|
||||
marker = " (skipped)"
|
||||
else:
|
||||
@@ -521,7 +525,7 @@ def verify_licenses(source_dir):
|
||||
print()
|
||||
|
||||
if has_noassertion:
|
||||
print("FAIL: Some submodules resolved to NOASSERTION. "
|
||||
print("FAIL: Some submodules have unresolved licenses. "
|
||||
"Add an entry to Tools/ci/license-overrides.yaml or check the LICENSE file.")
|
||||
return 1
|
||||
|
||||
|
||||
@@ -9,6 +9,12 @@ overrides:
|
||||
license: "LGPL-3.0-only AND MIT"
|
||||
comment: "Generator is LGPL-3.0; PX4 ships only MIT-licensed generated headers."
|
||||
|
||||
Tools/simulation/gazebo-classic/sitl_gazebo-classic:
|
||||
license: "BSD-3-Clause"
|
||||
comment: >-
|
||||
PX4 org project. No LICENSE file in repo; source files carry
|
||||
BSD-3-Clause headers consistent with the PX4 project license.
|
||||
|
||||
src/lib/cdrstream/cyclonedds:
|
||||
license: "EPL-2.0 OR BSD-3-Clause"
|
||||
comment: >-
|
||||
|
||||
@@ -29,6 +29,9 @@ for build_dir_path in build/*/ ; do
|
||||
# Events
|
||||
mkdir -p artifacts/$build_dir/events/
|
||||
cp $build_dir_path/events/all_events.json.xz artifacts/$build_dir/events/ 2>/dev/null || true
|
||||
# Also copy to top level: firmware advertises the metadata URI without the events/ subdirectory
|
||||
# (see src/lib/component_information/CMakeLists.txt comp_metadata_events_uri_board)
|
||||
cp $build_dir_path/events/all_events.json.xz artifacts/$build_dir/ 2>/dev/null || true
|
||||
# SBOM
|
||||
cp $build_dir_path/*.sbom.spdx.json artifacts/$build_dir/ 2>/dev/null || true
|
||||
ls -la artifacts/$build_dir
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
# PX4 SITL Gazebo Harmonic runtime image
|
||||
# Runs PX4 SITL with Gazebo Harmonic. Supports X11 forwarding for GUI.
|
||||
#
|
||||
# Build:
|
||||
# make px4_sitl_default && cd build/px4_sitl_default && cpack -G DEB && cd ../..
|
||||
# docker build -f Tools/packaging/Dockerfile.gazebo -t px4io/px4-sitl-gazebo:v1.17.0 build/px4_sitl_default/
|
||||
#
|
||||
# Run (headless):
|
||||
# docker run --rm -it --network host px4io/px4-sitl-gazebo:v1.17.0
|
||||
#
|
||||
# Run (X11 GUI):
|
||||
# xhost +local:docker
|
||||
# docker run --rm -it --network host \
|
||||
# -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix \
|
||||
# --gpus all px4io/px4-sitl-gazebo:v1.17.0
|
||||
|
||||
FROM ubuntu:24.04 AS extract
|
||||
COPY px4-gazebo_*.deb /tmp/
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends binutils \
|
||||
&& dpkg -x /tmp/px4-gazebo_*.deb /staging \
|
||||
&& strip /staging/opt/px4-gazebo/bin/px4 \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
FROM ubuntu:24.04
|
||||
LABEL maintainer="PX4 Development Team"
|
||||
LABEL description="PX4 SITL with Gazebo Harmonic simulation"
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ENV RUNS_IN_DOCKER=true
|
||||
|
||||
# Install Gazebo Harmonic with buildkit cache mounts for apt
|
||||
# The --mount=type=cache persists /var/cache/apt and /var/lib/apt across builds
|
||||
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
bc \
|
||||
ca-certificates \
|
||||
gnupg \
|
||||
lsb-release \
|
||||
wget \
|
||||
&& wget -q https://packages.osrfoundation.org/gazebo.gpg \
|
||||
-O /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg \
|
||||
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" \
|
||||
> /etc/apt/sources.list.d/gazebo-stable.list \
|
||||
&& apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
gz-harmonic
|
||||
|
||||
# Install PX4 files from .deb
|
||||
COPY --from=extract /staging/opt/px4-gazebo /opt/px4-gazebo
|
||||
RUN ln -sf /opt/px4-gazebo/bin/px4-gazebo /usr/bin/px4-gazebo
|
||||
|
||||
# Create the DART physics engine symlink (avoids needing the -dev package)
|
||||
RUN GZ_PHYSICS_DIR=$(find /usr/lib -maxdepth 3 -type d -name "engine-plugins" -path "*/gz-physics-7/*" 2>/dev/null | head -1) \
|
||||
&& if [ -n "$GZ_PHYSICS_DIR" ] && [ -d "$GZ_PHYSICS_DIR" ]; then \
|
||||
VERSIONED=$(ls "$GZ_PHYSICS_DIR"/libgz-physics*-dartsim-plugin.so.* 2>/dev/null | head -1) \
|
||||
&& [ -n "$VERSIONED" ] \
|
||||
&& ln -sf "$(basename "$VERSIONED")" "$GZ_PHYSICS_DIR/libgz-physics-dartsim-plugin.so"; \
|
||||
fi
|
||||
|
||||
# Gazebo resource paths
|
||||
ENV GZ_SIM_RESOURCE_PATH=/opt/px4-gazebo/share/gz/models:/opt/px4-gazebo/share/gz/worlds
|
||||
ENV GZ_SIM_SYSTEM_PLUGIN_PATH=/opt/px4-gazebo/lib/gz/plugins
|
||||
ENV GZ_SIM_SERVER_CONFIG_PATH=/opt/px4-gazebo/share/gz/server.config
|
||||
ENV PX4_GZ_MODELS=/opt/px4-gazebo/share/gz/models
|
||||
ENV PX4_GZ_WORLDS=/opt/px4-gazebo/share/gz/worlds
|
||||
|
||||
ENV PX4_SIM_MODEL=gz_x500
|
||||
ENV HOME=/root
|
||||
|
||||
# MAVLink, MAVSDK, DDS
|
||||
EXPOSE 14550/udp 14540/udp 8888/udp
|
||||
|
||||
# Platform-adaptive entrypoint: detects Docker Desktop (macOS/Windows) via
|
||||
# host.docker.internal and configures MAVLink + DDS to target the host.
|
||||
COPY px4-entrypoint.sh /opt/px4-gazebo/bin/px4-entrypoint.sh
|
||||
RUN chmod +x /opt/px4-gazebo/bin/px4-entrypoint.sh
|
||||
|
||||
WORKDIR /root
|
||||
|
||||
ENTRYPOINT ["/opt/px4-gazebo/bin/px4-entrypoint.sh"]
|
||||
CMD []
|
||||
@@ -0,0 +1,49 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
# PX4 SITL SIH runtime image
|
||||
# Minimal container that runs PX4 with the SIH physics engine (no Gazebo).
|
||||
#
|
||||
# Build:
|
||||
# make px4_sitl_sih && cd build/px4_sitl_sih && cpack -G DEB && cd ../..
|
||||
# docker build -f Tools/packaging/Dockerfile.sih -t px4io/px4-sitl-sih:v1.17.0 build/px4_sitl_sih/
|
||||
#
|
||||
# Run (Linux):
|
||||
# docker run --rm -it --network host px4io/px4-sitl-sih:v1.17.0
|
||||
#
|
||||
# Run (macOS / Windows):
|
||||
# docker run --rm -it -p 14550:14550/udp -p 14540:14540/udp -p 19410:19410/udp -p 8888:8888/udp px4io/px4-sitl-sih:v1.17.0
|
||||
|
||||
FROM ubuntu:24.04 AS build
|
||||
COPY px4_*.deb /tmp/
|
||||
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
apt-get update \
|
||||
&& apt-get install -y --no-install-recommends binutils \
|
||||
&& dpkg -x /tmp/px4_*.deb /staging \
|
||||
&& strip /staging/opt/px4/bin/px4
|
||||
|
||||
FROM ubuntu:24.04
|
||||
LABEL maintainer="PX4 Development Team"
|
||||
LABEL description="PX4 SITL with SIH physics (no simulator dependencies)"
|
||||
|
||||
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
apt-get update && apt-get install -y --no-install-recommends bc
|
||||
|
||||
COPY --from=build /staging/opt/px4 /opt/px4
|
||||
RUN ln -sf /opt/px4/bin/px4 /usr/bin/px4
|
||||
|
||||
# Platform-adaptive entrypoint: detects Docker Desktop (macOS/Windows) via
|
||||
# host.docker.internal and configures MAVLink + DDS to target the host.
|
||||
COPY px4-entrypoint.sh /opt/px4/bin/px4-entrypoint.sh
|
||||
RUN chmod +x /opt/px4/bin/px4-entrypoint.sh
|
||||
|
||||
ENV PX4_SIM_MODEL=sihsim_quadx
|
||||
ENV HOME=/root
|
||||
|
||||
# MAVLink (QGC, MAVSDK), DDS (ROS 2), jMAVSim/viewer display
|
||||
EXPOSE 14550/udp 14540/udp 19410/udp 8888/udp
|
||||
|
||||
WORKDIR /root
|
||||
|
||||
ENTRYPOINT ["/opt/px4/bin/px4-entrypoint.sh"]
|
||||
CMD []
|
||||
@@ -0,0 +1,4 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
ln -sf /opt/px4-gazebo/bin/px4-gazebo /usr/bin/px4-gazebo
|
||||
exit 0
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
if [ "$1" = "remove" ] || [ "$1" = "purge" ]; then
|
||||
rm -f /usr/bin/px4-gazebo
|
||||
fi
|
||||
exit 0
|
||||
@@ -0,0 +1,32 @@
|
||||
#!/bin/sh
|
||||
# Docker entrypoint for PX4 SITL containers.
|
||||
#
|
||||
# On Docker Desktop (macOS/Windows), host.docker.internal resolves to the
|
||||
# host machine. We detect this and configure MAVLink + DDS to send to the
|
||||
# host IP instead of localhost (which stays inside the container VM).
|
||||
#
|
||||
# On Linux with --network host, host.docker.internal does not resolve and
|
||||
# PX4 defaults work without modification.
|
||||
|
||||
set -e
|
||||
|
||||
# Detect install prefix (SIH uses /opt/px4, Gazebo uses /opt/px4-gazebo)
|
||||
if [ -d /opt/px4-gazebo ]; then
|
||||
PX4_PREFIX=/opt/px4-gazebo
|
||||
else
|
||||
PX4_PREFIX=/opt/px4
|
||||
fi
|
||||
|
||||
if getent hosts host.docker.internal >/dev/null 2>&1; then
|
||||
DOCKER_HOST_IP=$(getent hosts host.docker.internal | awk '{print $1}')
|
||||
|
||||
# MAVLink: replace default target (127.0.0.1) with the Docker host IP
|
||||
sed -i "s/mavlink start -x -u/mavlink start -x -t $DOCKER_HOST_IP -u/g" \
|
||||
"$PX4_PREFIX/etc/init.d-posix/px4-rc.mavlink"
|
||||
|
||||
# DDS: point uXRCE-DDS client at the host
|
||||
sed -i "s|uxrce_dds_client start -t udp|uxrce_dds_client start -t udp -h $DOCKER_HOST_IP|" \
|
||||
"$PX4_PREFIX/etc/init.d-posix/rcS"
|
||||
fi
|
||||
|
||||
exec "$PX4_PREFIX/bin/px4" "$@"
|
||||
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env bash
|
||||
# px4-gazebo: Launch PX4 SITL with Gazebo from the installed .deb package
|
||||
set -e
|
||||
|
||||
PX4_GAZEBO_DIR="$(cd "$(dirname "$(readlink -f "$0")")/.." && pwd)"
|
||||
PX4_BINARY="${PX4_GAZEBO_DIR}/bin/px4"
|
||||
|
||||
# Set Gazebo resource paths so gz-sim finds PX4 models, worlds, and plugins.
|
||||
export PX4_GZ_MODELS="${PX4_GAZEBO_DIR}/share/gz/models"
|
||||
export PX4_GZ_WORLDS="${PX4_GAZEBO_DIR}/share/gz/worlds"
|
||||
export PX4_GZ_PLUGINS="${PX4_GAZEBO_DIR}/lib/gz/plugins"
|
||||
export PX4_GZ_SERVER_CONFIG="${PX4_GAZEBO_DIR}/share/gz/server.config"
|
||||
export GZ_SIM_RESOURCE_PATH="${GZ_SIM_RESOURCE_PATH}:${PX4_GZ_MODELS}:${PX4_GZ_WORLDS}"
|
||||
export GZ_SIM_SYSTEM_PLUGIN_PATH="${GZ_SIM_SYSTEM_PLUGIN_PATH}:${PX4_GZ_PLUGINS}"
|
||||
export GZ_SIM_SERVER_CONFIG_PATH="${PX4_GZ_SERVER_CONFIG}"
|
||||
|
||||
# Gazebo's Physics system searches for "gz-physics-dartsim-plugin" which maps
|
||||
# to the unversioned libgz-physics-dartsim-plugin.so. The runtime package only
|
||||
# ships versioned .so files; the unversioned symlink lives in the -dev package.
|
||||
# Create it if missing so Gazebo finds the DART engine without installing -dev.
|
||||
GZ_PHYSICS_ENGINE_DIR=$(find /usr/lib -maxdepth 3 -type d -name "engine-plugins" -path "*/gz-physics-7/*" 2>/dev/null | head -1)
|
||||
if [ -n "$GZ_PHYSICS_ENGINE_DIR" ] && [ -d "$GZ_PHYSICS_ENGINE_DIR" ]; then
|
||||
UNVERSIONED="$GZ_PHYSICS_ENGINE_DIR/libgz-physics-dartsim-plugin.so"
|
||||
if [ ! -e "$UNVERSIONED" ]; then
|
||||
VERSIONED=$(ls "$GZ_PHYSICS_ENGINE_DIR"/libgz-physics*-dartsim-plugin.so.* 2>/dev/null | head -1)
|
||||
if [ -n "$VERSIONED" ]; then
|
||||
ln -sf "$(basename "$VERSIONED")" "$UNVERSIONED" 2>/dev/null || true
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
exec "${PX4_BINARY}" "$@"
|
||||
@@ -0,0 +1,4 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
ln -sf /opt/px4/bin/px4 /usr/bin/px4
|
||||
exit 0
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
if [ "$1" = "remove" ] || [ "$1" = "purge" ]; then
|
||||
rm -f /usr/bin/px4
|
||||
fi
|
||||
exit 0
|
||||
@@ -0,0 +1,144 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
MAVSDK mission test for PX4 SIH SITL in Docker.
|
||||
|
||||
Takes off to 100m, flies a short 4-waypoint box mission, then lands.
|
||||
Validates that the SIH Docker container works end-to-end with MAVSDK.
|
||||
|
||||
Prerequisites:
|
||||
- Docker container running:
|
||||
docker run --rm --network host px4io/px4-sitl-sih:v1.17.0-alpha1
|
||||
- pip install mavsdk
|
||||
- mavsim-viewer running (optional):
|
||||
/path/to/mavsim-viewer -n 1
|
||||
|
||||
Usage:
|
||||
python3 Tools/packaging/test_sih_mission.py
|
||||
python3 Tools/packaging/test_sih_mission.py --speed 10 # faster-than-realtime
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import argparse
|
||||
import sys
|
||||
import time
|
||||
|
||||
from mavsdk import System
|
||||
from mavsdk.mission import MissionItem, MissionPlan
|
||||
|
||||
|
||||
async def run_mission(speed_factor: int = 1):
|
||||
drone = System()
|
||||
print(f"Connecting to drone on udp://:14540 ...")
|
||||
await drone.connect(system_address="udp://:14540")
|
||||
|
||||
print("Waiting for drone to connect...")
|
||||
async for state in drone.core.connection_state():
|
||||
if state.is_connected:
|
||||
print(f"Connected (UUID: {state.uuid if hasattr(state, 'uuid') else 'N/A'})")
|
||||
break
|
||||
|
||||
print("Waiting for global position estimate...")
|
||||
async for health in drone.telemetry.health():
|
||||
if health.is_global_position_ok and health.is_home_position_ok:
|
||||
print("Global position OK")
|
||||
break
|
||||
|
||||
# Get home position for reference
|
||||
async for pos in drone.telemetry.position():
|
||||
home_lat = pos.latitude_deg
|
||||
home_lon = pos.longitude_deg
|
||||
print(f"Home position: {home_lat:.6f}, {home_lon:.6f}")
|
||||
break
|
||||
|
||||
# Build a small box mission at 100m AGL
|
||||
# ~100m offset in each direction
|
||||
offset = 0.001 # roughly 111m at equator
|
||||
mission_items = [
|
||||
MissionItem(
|
||||
home_lat + offset, home_lon,
|
||||
100, 10, True, float('nan'), float('nan'),
|
||||
MissionItem.CameraAction.NONE,
|
||||
float('nan'), float('nan'), float('nan'),
|
||||
float('nan'), float('nan'),
|
||||
MissionItem.VehicleAction.NONE,
|
||||
),
|
||||
MissionItem(
|
||||
home_lat + offset, home_lon + offset,
|
||||
100, 10, True, float('nan'), float('nan'),
|
||||
MissionItem.CameraAction.NONE,
|
||||
float('nan'), float('nan'), float('nan'),
|
||||
float('nan'), float('nan'),
|
||||
MissionItem.VehicleAction.NONE,
|
||||
),
|
||||
MissionItem(
|
||||
home_lat, home_lon + offset,
|
||||
100, 10, True, float('nan'), float('nan'),
|
||||
MissionItem.CameraAction.NONE,
|
||||
float('nan'), float('nan'), float('nan'),
|
||||
float('nan'), float('nan'),
|
||||
MissionItem.VehicleAction.NONE,
|
||||
),
|
||||
MissionItem(
|
||||
home_lat, home_lon,
|
||||
100, 10, True, float('nan'), float('nan'),
|
||||
MissionItem.CameraAction.NONE,
|
||||
float('nan'), float('nan'), float('nan'),
|
||||
float('nan'), float('nan'),
|
||||
MissionItem.VehicleAction.NONE,
|
||||
),
|
||||
]
|
||||
|
||||
mission_plan = MissionPlan(mission_items)
|
||||
|
||||
print(f"Uploading mission ({len(mission_items)} waypoints, 100m AGL)...")
|
||||
await drone.mission.upload_mission(mission_plan)
|
||||
print("Mission uploaded")
|
||||
|
||||
print("Arming...")
|
||||
await drone.action.arm()
|
||||
print("Armed")
|
||||
|
||||
t0 = time.time()
|
||||
print("Starting mission...")
|
||||
await drone.mission.start_mission()
|
||||
|
||||
# Monitor mission progress
|
||||
async for progress in drone.mission.mission_progress():
|
||||
elapsed = time.time() - t0
|
||||
print(f" [{elapsed:6.1f}s] Waypoint {progress.current}/{progress.total}")
|
||||
if progress.current == progress.total:
|
||||
print(f"Mission complete in {elapsed:.1f}s (speed factor: {speed_factor}x)")
|
||||
break
|
||||
|
||||
print("Returning to launch...")
|
||||
await drone.action.return_to_launch()
|
||||
|
||||
# Wait for landing
|
||||
async for in_air in drone.telemetry.in_air():
|
||||
if not in_air:
|
||||
print("Landed")
|
||||
break
|
||||
|
||||
print("Disarming...")
|
||||
await drone.action.disarm()
|
||||
print("Test PASSED")
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="PX4 SIH Docker mission test")
|
||||
parser.add_argument("--speed", type=int, default=1,
|
||||
help="PX4_SIM_SPEED_FACTOR (must match container)")
|
||||
args = parser.parse_args()
|
||||
|
||||
try:
|
||||
asyncio.run(run_mission(args.speed))
|
||||
except KeyboardInterrupt:
|
||||
print("\nInterrupted")
|
||||
sys.exit(1)
|
||||
except Exception as e:
|
||||
print(f"Test FAILED: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -23,7 +23,7 @@ pyserial
|
||||
pyulog>=0.5.0
|
||||
pyyaml
|
||||
requests
|
||||
setuptools>=39.2.0
|
||||
setuptools>=39.2.0,<=81.0.0
|
||||
six>=1.12.0
|
||||
sympy>=1.10.1
|
||||
toml>=0.9
|
||||
|
||||
@@ -30,6 +30,7 @@ CONFIG_MODULES_EKF2=y
|
||||
# CONFIG_EKF2_GNSS_YAW is not set
|
||||
# CONFIG_EKF2_MAGNETOMETER is not set
|
||||
# CONFIG_EKF2_RANGE_FINDER is not set
|
||||
# CONFIG_EKF2_OPTICAL_FLOW is not set
|
||||
# CONFIG_EKF2_SIDESLIP is not set
|
||||
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
|
||||
CONFIG_MODULES_LAND_DETECTOR=y
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
#define INTERFACE_USART_CONFIG "/dev/ttyS0,115200"
|
||||
#define BOOT_DELAY_ADDRESS 0x000001a0
|
||||
#define BOARD_TYPE 1105
|
||||
#define BOARD_FLASH_SECTORS (14)
|
||||
#define BOARD_FLASH_SECTORS (13)
|
||||
#define BOARD_FLASH_SIZE (16 * 128 * 1024)
|
||||
#define APP_RESERVATION_SIZE (2 * 128 * 1024)
|
||||
|
||||
|
||||
@@ -33,32 +33,24 @@
|
||||
|
||||
# packaging
|
||||
|
||||
set(CPACK_PACKAGE_NAME ${PROJECT_NAME}-${PX4_CONFIG})
|
||||
|
||||
set(CPACK_PACKAGE_VENDOR "px4")
|
||||
set(CPACK_PACKAGE_CONTACT "daniel@agar.ca")
|
||||
set(CPACK_RESOURCE_FILE_LICENSE "${PX4_SOURCE_DIR}/LICENSE")
|
||||
set(CPACK_RESOURCE_FILE_README "${PX4_SOURCE_DIR}/README.md")
|
||||
|
||||
set(CPACK_SOURCE_GENERATOR "ZIP;TBZ2")
|
||||
|
||||
# Debian version: convert git describe to Debian-compliant format
|
||||
# v1.17.0-beta1 -> 1.17.0~beta1, v1.17.0 -> 1.17.0
|
||||
string(REGEX REPLACE "^v" "" DEB_VERSION "${PX4_GIT_TAG}")
|
||||
# Replace first hyphen with tilde for pre-release (Debian sorts ~ before anything)
|
||||
string(REGEX REPLACE "^([0-9]+\\.[0-9]+\\.[0-9]+)-([a-zA-Z])" "\\1~\\2" DEB_VERSION "${DEB_VERSION}")
|
||||
# Strip any trailing commit info (e.g. -42-gabcdef)
|
||||
string(REGEX REPLACE "-[0-9]+-g[0-9a-f]+$" "" DEB_VERSION "${DEB_VERSION}")
|
||||
|
||||
set(CPACK_PACKAGE_VERSION_MAJOR ${PX4_VERSION_MAJOR})
|
||||
set(CPACK_PACKAGE_VERSION_MINOR ${PX4_VERSION_MINOR})
|
||||
set(CPACK_PACKAGE_VERSION_PATCH ${PX4_VERSION_PATCH})
|
||||
#set(CPACK_PACKAGE_VERSION ${PX4_GIT_TAG})
|
||||
|
||||
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PX4_CONFIG}-${PX4_GIT_TAG}")
|
||||
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PX4_CONFIG}-${PX4_GIT_TAG}-src")
|
||||
|
||||
set(CPACK_PACKAGE_CONTACT "daniel@agar.ca")
|
||||
|
||||
set(CPACK_RESOURCE_FILE_LICENSE "${PX4_SOURCE_DIR}/LICENSE")
|
||||
set(CPACK_RESOURCE_FILE_README "${PX4_SOURCE_DIR}/README.md")
|
||||
|
||||
set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE)#ONE_PER_GROUP)
|
||||
# without this you won't be able to pack only specified component
|
||||
set(CPACK_DEB_COMPONENT_INSTALL YES)
|
||||
|
||||
#set(CPACK_STRIP_FILES YES)
|
||||
|
||||
set(CPACK_SOURCE_GENERATOR "ZIP;TBZ2")
|
||||
set(CPACK_PACKAGING_INSTALL_PREFIX "")
|
||||
set(CPACK_SET_DESTDIR "OFF")
|
||||
|
||||
if("${CMAKE_SYSTEM}" MATCHES "Linux")
|
||||
set(CPACK_GENERATOR "TBZ2")
|
||||
@@ -67,30 +59,61 @@ if("${CMAKE_SYSTEM}" MATCHES "Linux")
|
||||
if(EXISTS ${DPKG_PROGRAM})
|
||||
list(APPEND CPACK_GENERATOR "DEB")
|
||||
|
||||
set(CPACK_SET_DESTDIR true)
|
||||
set(CPACK_PACKAGING_INSTALL_PREFIX "/tmp")
|
||||
execute_process(COMMAND ${DPKG_PROGRAM} --print-architecture
|
||||
OUTPUT_VARIABLE DEB_ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
execute_process(COMMAND ${DPKG_PROGRAM} --print-architecture OUTPUT_VARIABLE DEB_ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
message("Architecture: " ${DEB_ARCHITECTURE})
|
||||
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}_${DEB_ARCHITECTURE}")
|
||||
# Detect Ubuntu/Debian codename for version suffix
|
||||
find_program(LSB_RELEASE lsb_release)
|
||||
if(EXISTS ${LSB_RELEASE})
|
||||
execute_process(COMMAND ${LSB_RELEASE} -cs
|
||||
OUTPUT_VARIABLE DEB_CODENAME OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
else()
|
||||
set(DEB_CODENAME "unknown")
|
||||
endif()
|
||||
|
||||
set(CPACK_INSTALL_PREFIX @DEB_INSTALL_PREFIX@)
|
||||
message ("==> CPACK_INSTALL_PREFIX = " ${CPACK_INSTALL_PREFIX})
|
||||
# Override CPACK_PACKAGE_VERSION with full Debian version.
|
||||
# CPack DEB ignores CPACK_PACKAGE_VERSION_MAJOR/MINOR/PATCH
|
||||
# when CPACK_PACKAGE_VERSION is set, so we must replace them.
|
||||
unset(CPACK_PACKAGE_VERSION_MAJOR)
|
||||
unset(CPACK_PACKAGE_VERSION_MINOR)
|
||||
unset(CPACK_PACKAGE_VERSION_PATCH)
|
||||
set(CPACK_PACKAGE_VERSION "${DEB_VERSION}-${DEB_CODENAME}")
|
||||
|
||||
################################################################################
|
||||
# Label-aware package metadata
|
||||
if(PX4_BOARD_LABEL STREQUAL "sih")
|
||||
set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/px4")
|
||||
set(CPACK_DEBIAN_PACKAGE_NAME "px4")
|
||||
set(CPACK_DEBIAN_FILE_NAME "px4_${DEB_VERSION}-${DEB_CODENAME}_${DEB_ARCHITECTURE}.deb")
|
||||
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libstdc++6")
|
||||
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "PX4 SITL autopilot with SIH physics (no Gazebo)")
|
||||
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
|
||||
"${PX4_SOURCE_DIR}/Tools/packaging/sih/postinst;${PX4_SOURCE_DIR}/Tools/packaging/sih/postrm")
|
||||
else()
|
||||
set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/px4-gazebo")
|
||||
set(CPACK_DEBIAN_PACKAGE_NAME "px4-gazebo")
|
||||
set(CPACK_DEBIAN_FILE_NAME "px4-gazebo_${DEB_VERSION}-${DEB_CODENAME}_${DEB_ARCHITECTURE}.deb")
|
||||
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libstdc++6, gz-sim8-cli, libgz-sim8-plugins, libgz-physics7-dartsim, gz-tools2")
|
||||
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "PX4 SITL autopilot with Gazebo Harmonic simulation resources")
|
||||
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
|
||||
"${PX4_SOURCE_DIR}/Tools/packaging/postinst;${PX4_SOURCE_DIR}/Tools/packaging/postrm")
|
||||
endif()
|
||||
|
||||
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Daniel Agar <${CPACK_PACKAGE_CONTACT}>")
|
||||
set(CPACK_DEBIAN_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION})
|
||||
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
|
||||
# Bake the install prefix into the px4 binary so it can locate its ROMFS
|
||||
# (etc/) without a wrapper script or command-line argument.
|
||||
if(TARGET px4)
|
||||
target_compile_definitions(px4 PRIVATE PX4_INSTALL_PREFIX="${CPACK_PACKAGING_INSTALL_PREFIX}")
|
||||
endif()
|
||||
|
||||
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "PX4 autopilot")
|
||||
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
|
||||
set(CPACK_DEBIAN_PACKAGE_SECTION "misc")
|
||||
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
|
||||
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${DEB_ARCHITECTURE})
|
||||
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
|
||||
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Daniel Agar <${CPACK_PACKAGE_CONTACT}>")
|
||||
|
||||
# autogenerate dependency information
|
||||
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
|
||||
set(CPACK_DEBIAN_COMPRESSION_TYPE xz)
|
||||
set(CPACK_DEBIAN_ARCHITECTURE ${DEB_ARCHITECTURE})
|
||||
|
||||
message(STATUS "PX4 SITL .deb version: ${DEB_VERSION}-${DEB_CODENAME} (${DEB_ARCHITECTURE})")
|
||||
|
||||
endif()
|
||||
else()
|
||||
|
||||
|
Before Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 354 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 26 KiB |
@@ -171,6 +171,7 @@
|
||||
- [CUAV V5 nano (FMUv5)](flight_controller/cuav_v5_nano.md)
|
||||
- [CUAV V5 nano Wiring Quickstart](assembly/quick_start_cuav_v5_nano.md)
|
||||
- [CUAV X25 EVO](flight_controller/cuav_x25-evo.md)
|
||||
- [CUAV X25 EVO Wiring Quick Start](assembly/quick_start_cuav_x25_evo.md)
|
||||
- [CUAV X25 SUPER](flight_controller/cuav_x25-super.md)
|
||||
- [CubePilot Cube Orange+ (CubePilot)](flight_controller/cubepilot_cube_orangeplus.md)
|
||||
- [CubePilot Cube Orange (CubePilot)](flight_controller/cubepilot_cube_orange.md)
|
||||
@@ -859,16 +860,20 @@
|
||||
- [Multi-vehicle simulation](simulation/multi-vehicle-simulation.md)
|
||||
- [Platform Testing and CI](test_and_ci/index.md)
|
||||
- [Test Flights](test_and_ci/test_flights.md)
|
||||
- [Test MC_01 - Manual Modes](test_cards/mc_01_manual_modes.md)
|
||||
- [Test MC_02 - Full Autonomous](test_cards/mc_02_full_autonomous.md)
|
||||
- [Test MC_03 - Auto Manual Mix](test_cards/mc_03_auto_manual_mix.md)
|
||||
- [Test MC_04 - Failsafe Testing](test_cards/mc_04_failsafe_testing.md)
|
||||
- [Test MC_05 - Manual Modes (Inside)](test_cards/mc_05_indoor_flight_manual_modes.md)
|
||||
- [Test MC_06 - Optical Flow (Inside)](test_cards/mc_06_optical_flow.md)
|
||||
- [Test MC_07 - Optical Flow Low Mount](test_cards/mc_07_optical_flow_low_mount.md)
|
||||
- [Test MC_08 - DSHOT ESC](test_cards/mc_08_dshot.md)
|
||||
- [Test MC_09 - VIO (Visual-Inertial Odometry)](test_cards/mc_09_vio.md)
|
||||
- [Test MC_10 - Optical Flow / GPS Mixed](test_cards/mc_10_optical_flow_gps_mixed.md)
|
||||
- [Multicopter](test_and_ci/test_flights.md#multicopter)
|
||||
- [Test MC_01 - Manual Modes](test_cards/mc_01_manual_modes.md)
|
||||
- [Test MC_02 - Full Autonomous](test_cards/mc_02_full_autonomous.md)
|
||||
- [Test MC_03 - Auto Manual Mix](test_cards/mc_03_auto_manual_mix.md)
|
||||
- [Test MC_04 - Failsafe Testing](test_cards/mc_04_failsafe_testing.md)
|
||||
- [Test MC_05 - Manual Modes (Inside)](test_cards/mc_05_indoor_flight_manual_modes.md)
|
||||
- [Test MC_06 - Optical Flow (Inside)](test_cards/mc_06_optical_flow.md)
|
||||
- [Test MC_07 - Optical Flow Low Mount](test_cards/mc_07_optical_flow_low_mount.md)
|
||||
- [Test MC_08 - DSHOT ESC](test_cards/mc_08_dshot.md)
|
||||
- [Test MC_09 - VIO (Visual-Inertial Odometry)](test_cards/mc_09_vio.md)
|
||||
- [Test MC_10 - Optical Flow / GPS Mixed](test_cards/mc_10_optical_flow_gps_mixed.md)
|
||||
- [Fixed Wing](test_and_ci/test_flights.md#fixed-wing)
|
||||
- [Test FW_01 - Manual Modes](test_cards/fw_01_manual_modes.md)
|
||||
- [Test FW_02 - Full Autonomous](test_cards/fw_02_full_autonomous.md)
|
||||
- [Unit Tests](test_and_ci/unit_tests.md)
|
||||
- [Fuzz Tests](test_and_ci/fuzz_tests.md)
|
||||
- [Continuous Integration](test_and_ci/continous_integration.md)
|
||||
|
||||
@@ -851,16 +851,20 @@
|
||||
- [Multi-vehicle simulation](/simulation/multi-vehicle-simulation.md)
|
||||
- [Platform Testing and CI](/test_and_ci/index.md)
|
||||
- [Test Flights](/test_and_ci/test_flights.md)
|
||||
- [Test MC_01 - Manual Modes](/test_cards/mc_01_manual_modes.md)
|
||||
- [Test MC_02 - Full Autonomous](/test_cards/mc_02_full_autonomous.md)
|
||||
- [Test MC_03 - Auto Manual Mix](/test_cards/mc_03_auto_manual_mix.md)
|
||||
- [Test MC_04 - Failsafe Testing](/test_cards/mc_04_failsafe_testing.md)
|
||||
- [Test MC_05 - Manual Modes (Inside)](/test_cards/mc_05_indoor_flight_manual_modes.md)
|
||||
- [Test MC_06 - Optical Flow (Inside)](/test_cards/mc_06_optical_flow.md)
|
||||
- [Test MC_07 - Optical Flow Low Mount](/test_cards/mc_07_optical_flow_low_mount.md)
|
||||
- [Test MC_08 - DSHOT ESC](/test_cards/mc_08_dshot.md)
|
||||
- [Test MC_09 - VIO (Visual-Inertial Odometry)](/test_cards/mc_09_vio.md)
|
||||
- [Test MC_10 - Optical Flow / GPS Mixed](/test_cards/mc_10_optical_flow_gps_mixed.md)
|
||||
- [Multicopter](/test_and_ci/test_flights.md#multicopter)
|
||||
- [Test MC_01 - Manual Modes](/test_cards/mc_01_manual_modes.md)
|
||||
- [Test MC_02 - Full Autonomous](/test_cards/mc_02_full_autonomous.md)
|
||||
- [Test MC_03 - Auto Manual Mix](/test_cards/mc_03_auto_manual_mix.md)
|
||||
- [Test MC_04 - Failsafe Testing](/test_cards/mc_04_failsafe_testing.md)
|
||||
- [Test MC_05 - Manual Modes (Inside)](/test_cards/mc_05_indoor_flight_manual_modes.md)
|
||||
- [Test MC_06 - Optical Flow (Inside)](/test_cards/mc_06_optical_flow.md)
|
||||
- [Test MC_07 - Optical Flow Low Mount](/test_cards/mc_07_optical_flow_low_mount.md)
|
||||
- [Test MC_08 - DSHOT ESC](/test_cards/mc_08_dshot.md)
|
||||
- [Test MC_09 - VIO (Visual-Inertial Odometry)](/test_cards/mc_09_vio.md)
|
||||
- [Test MC_10 - Optical Flow / GPS Mixed](/test_cards/mc_10_optical_flow_gps_mixed.md)
|
||||
- [Fixed Wing](/test_and_ci/test_flights.md#fixed-wing)
|
||||
- [Test FW_01 - Manual Modes](/test_cards/fw_01_manual_modes.md)
|
||||
- [Test FW_02 - Full Autonomous](/test_cards/fw_02_full_autonomous.md)
|
||||
- [Unit Tests](/test_and_ci/unit_tests.md)
|
||||
- [Fuzz Tests](/test_and_ci/fuzz_tests.md)
|
||||
- [Continuous Integration](/test_and_ci/continous_integration.md)
|
||||
|
||||
@@ -27,6 +27,8 @@ Supported flight controllers include:
|
||||
|
||||
- [ARK Electronics ARKV6X](../flight_controller/ark_v6x.md)
|
||||
- [CUAV Pixhawk V6X](../flight_controller/cuav_pixhawk_v6x.md)
|
||||
- [CUAV X25 EVO](../flight_controller/cuav_x25-evo.md)
|
||||
- [CUAV X25 SUPER](../flight_controller/cuav_x25-super.md)
|
||||
- [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md)
|
||||
- [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md)
|
||||
- [RaccoonLab FMUv6X Autopilot](../flight_controller/raccoonlab_fmu6x.md)
|
||||
|
||||
@@ -17716,9 +17716,9 @@ Negative values are ignored and will cause the measured current to be used.
|
||||
The default value of 0 disables the overwrite, in which case the measured value
|
||||
is always used.
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------- | -------- | -------- | --------- | ------- | ---- |
|
||||
| ✓ | | | | 0 | |
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | | | | 0 | |
|
||||
|
||||
### BAT1_N_CELLS (`INT32`) {#BAT1_N_CELLS}
|
||||
|
||||
@@ -17894,9 +17894,9 @@ Negative values are ignored and will cause the measured current to be used.
|
||||
The default value of 0 disables the overwrite, in which case the measured value
|
||||
is always used.
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------- | -------- | -------- | --------- | ------- | ---- |
|
||||
| ✓ | | | | 0 | |
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | | | | 0 | |
|
||||
|
||||
### BAT2_N_CELLS (`INT32`) {#BAT2_N_CELLS}
|
||||
|
||||
@@ -18036,6 +18036,22 @@ Defines the capacity of battery 3 in mAh.
|
||||
| ------- | -------- | -------- | --------- | ------- | ---- |
|
||||
| ✓ | -1.0 | 100000 | 50 | -1.0 | mAh |
|
||||
|
||||
### BAT3_I_OVERWRITE (`FLOAT`) {#BAT3_I_OVERWRITE}
|
||||
|
||||
Battery 3 idle current overwrite.
|
||||
|
||||
This parameter allows to overwrite the current measured during
|
||||
idle (unarmed) state with a user-defined constant value (expressed in amperes).
|
||||
When the system is armed, the measured current is used. This is useful
|
||||
because on certain ESCs current measurements are inaccurate in case of no load.
|
||||
Negative values are ignored and will cause the measured current to be used.
|
||||
The default value of 0 disables the overwrite, in which case the measured value
|
||||
is always used.
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | | | | 0 | |
|
||||
|
||||
### BAT3_N_CELLS (`INT32`) {#BAT3_N_CELLS}
|
||||
|
||||
Number of cells for battery 3.
|
||||
@@ -21790,6 +21806,32 @@ EKF2 selector maximum accumulated velocity threshold for comparing accelerometer
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | | | | 2.0 | m/s |
|
||||
|
||||
### EKF2_SENS_EN (`INT32`) {#EKF2_SENS_EN}
|
||||
|
||||
Sensor fusion enable bitmask.
|
||||
|
||||
Bitmask to control which sensor fusion sources are enabled. Sources whose bit is cleared will be disabled. Only applied while disarmed. For in-flight changes use the MAVLink command VEHICLE_CMD_ESTIMATOR_SENSOR_ENABLE or the individual CTRL params (e.g. EKF2_GPS_CTRL, EKF2_BARO_CTRL).
|
||||
|
||||
**Bitmask:**
|
||||
|
||||
- `0`: GNSS 0
|
||||
- `1`: GNSS 1
|
||||
- `2`: Optical flow
|
||||
- `3`: External vision
|
||||
- `4`: Aux global position 0
|
||||
- `5`: Aux global position 1
|
||||
- `6`: Aux global position 2
|
||||
- `7`: Aux global position 3
|
||||
- `8`: Barometer
|
||||
- `9`: Range finder
|
||||
- `10`: Magnetometer
|
||||
- `11`: Airspeed
|
||||
- `12`: Ranging beacon
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | 0 | 8191 | | 8191 | |
|
||||
|
||||
### EKF2_SYNT_MAG_Z (`INT32`) {#EKF2_SYNT_MAG_Z}
|
||||
|
||||
Enable synthetic magnetometer Z component measurement.
|
||||
@@ -23104,6 +23146,26 @@ This increment is added to TRIM_YAW when airspeed is FW_AIRSPD_MIN.
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | -0.5 | 0.5 | 0.01 | 0.0 | |
|
||||
|
||||
### FW_FLAPS_MAN (`INT32`) {#FW_FLAPS_MAN}
|
||||
|
||||
Flap input in manual flight.
|
||||
|
||||
Chose source for manual setting of flaps in manual flight modes.
|
||||
|
||||
**Values:**
|
||||
|
||||
- `0`: Disabled
|
||||
- `1`: Aux1
|
||||
- `2`: Aux2
|
||||
- `3`: Aux3
|
||||
- `4`: Aux4
|
||||
- `5`: Aux5
|
||||
- `6`: Flaps channel
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
| | | | | 0 | |
|
||||
|
||||
### FW_GC_EN (`INT32`) {#FW_GC_EN}
|
||||
|
||||
Enable rate gain compression.
|
||||
@@ -23264,6 +23326,10 @@ Chose source for manual setting of spoilers in manual flight modes.
|
||||
- `0`: Disabled
|
||||
- `1`: Flaps channel
|
||||
- `2`: Aux1
|
||||
- `3`: Aux2
|
||||
- `4`: Aux3
|
||||
- `5`: Aux4
|
||||
- `6`: Aux5
|
||||
|
||||
| Reboot | minValue | maxValue | increment | default | unit |
|
||||
| ------ | -------- | -------- | --------- | ------- | ---- |
|
||||
|
||||
@@ -409,6 +409,7 @@ They recommend sensors, power systems, and other components from the same manufa
|
||||
- [CUAV Pixhawk V6X Wiring QuickStart](../assembly/quick_start_cuav_pixhawk_v6x.md)
|
||||
- [CUAV V5+ Wiring Quickstart](../assembly/quick_start_cuav_v5_plus.md)
|
||||
- [CUAV V5 nano Wiring Quickstart](../assembly/quick_start_cuav_v5_nano.md)
|
||||
- [CUAV X25 EVO Wiring Quickstart](../assembly/quick_start_cuav_x25_evo.md)
|
||||
- [Holybro Pixhawk 6C Wiring Quickstart](../assembly/quick_start_pixhawk6c.md)
|
||||
- [Holybro Pixhawk 6X Wiring Quickstart](../assembly/quick_start_pixhawk6x.md)
|
||||
- [Holybro Pixhawk 5X Wiring Quickstart](../assembly/quick_start_pixhawk5x.md)
|
||||
|
||||
@@ -0,0 +1,153 @@
|
||||
# CUAV X25 EVO Wiring Quick Start
|
||||
|
||||
::: warning
|
||||
PX4 does not manufacture this (or any) autopilot.
|
||||
Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues.
|
||||
:::
|
||||
|
||||
This quick start guide shows how to power the [X25 EVO](../flight_controller/cuav_x25-evo.md) flight controller and connect its most important peripherals.
|
||||
|
||||
::: info
|
||||
The following flight controller models are applicable to this quick start guide.
|
||||
[CUAV X25 SUPER](../flight_controller/cuav_x25-super.md)
|
||||
:::
|
||||
|
||||
## Wiring Chart Overview
|
||||
|
||||
The image below shows how to connect the most important sensors and peripherals (except the motor and servo outputs).
|
||||
We'll go through each of these in detail in the following sections.
|
||||
|
||||

|
||||
|
||||
| Interface | **Function** |
|
||||
| :------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| POWER C1/C2 | Connect the PMU2 Lite to this port; this port is used for connecting the DroneCAN power module |
|
||||
| M1 ~ M16 | PWM signal output ports, usable for controlling motors or servos; support 3.3V/5V PWM configuration |
|
||||
| RC IN | Connect remote controller receivers with one-way protocols (e.g., SBUS/DSM/PPM). Note: ELRS/CRSF receivers should be connected to any serial port, not RC IN |
|
||||
| RSSI | For connecting signal strength feedback modules |
|
||||
| GPS&SAFETY | Connect Neo-series GPS or C-RTK-series RTK; this port includes interfaces for GPS, safety switch, and buzzer |
|
||||
| GPS2 | Usable for connecting additional GPS/RTK modules |
|
||||
| DEBUG (DSU) | For FMU chip debugging and reading debug device information; with ArduPilot firmware, it can be configured for other serial port functions |
|
||||
| ADC3V3 | For analog level signal detection; the maximum detectable level signal is 3.3V |
|
||||
| ADC6V6 | For analog level signal detection; the maximum detectable level signal is 6.6V (PX4 is not supported.) |
|
||||
| TF CARD | Insert an SD card here to enable log storage functionality |
|
||||
| ETH | Ethernet port, usable for connecting Ethernet devices such as companion computers |
|
||||
| I2C1/2/3 | Connect external I2C devices (e.g., external compasses) for communication between the controller and I2C devices |
|
||||
| TELEM1/TELEM2 | Connect telemetry modules (for data transmission) to enable MAVLINK data interaction |
|
||||
| CAN1/2 | For communication between the controller and DroneCAN devices (e.g., connecting NEO4 SE GPS) |
|
||||
| TYPE C | USB port of the controller, usable for connecting to the ground station, flashing firmware, and other operations |
|
||||
| SPI6 | SPI port for external expansion; generally not used |
|
||||
|
||||
## Vehicle Front
|
||||
|
||||
::: info
|
||||
If the controller cannot be mounted in the recommended/default orientation (e.g. due to space constraints) you will need to configure the autopilot software with the orientation that you actually used: [Flight Controller Orientation](../config/flight_controller_orientation.md).
|
||||
:::
|
||||
|
||||

|
||||
|
||||
## GPS + Compass + Buzzer + Safety Switch + LED
|
||||
|
||||
We recommend using a CAN GPS/RTK (such as [Neo 4SE](https://store.cuav.net/shop/cuav-neo-4-se-gps-module/)); simply connect it to the **CAN 1** or **CAN 2** port.
|
||||
|
||||
You can also use a standard GPS/RTK module(such as [NEO3 GPS](https://store.cuav.net/shop/neo-3/) (10-pin connector)) by connecting it to the **GPS&SAFETY** port.
|
||||
Most commonly used GPS modules today integrate GPS, compass, safety switch, buzzer, and LED status light.
|
||||
|
||||
If you need to use assisted GPS, connect to the **GPS2** port.
|
||||
|
||||
The GPS/compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible (separating the compass from other electronics will reduce interference), with the direction markings towards the front of the vehicle (the arrow on the NEO GPS should match the arrow on the flight controller).
|
||||
|
||||

|
||||
|
||||
::: info
|
||||
The GPS module's integrated safety switch is enabled _by default_ (when enabled, PX4 will not let you arm the vehicle).
|
||||
To disable the safety, press and hold the safety switch for 1 second.
|
||||
You can press the safety switch again to enable safety and disarm the vehicle (this can be useful if, for whatever reason, you are unable to disarm the vehicle from your remote control or ground station).
|
||||
:::
|
||||
|
||||
## Radio Control
|
||||
|
||||
A remote control (RC) radio system is required if you want to _manually_ control your vehicle (PX4 does not require a radio system for autonomous flight modes).
|
||||
|
||||
You will need to [select a compatible transmitter/receiver](../getting_started/rc_transmitter_receiver.md) and then _bind_ them so that they communicate (read the instructions that come with your specific transmitter/receiver).
|
||||
|
||||
Connection methods vary by remote controller and receiver type:
|
||||
|
||||
### Android Remote Controllers
|
||||
|
||||
Take the H16 as an example:
|
||||
|
||||

|
||||
|
||||
Connect **TELEM1/TELEM2** to the UART0 port of the H16 remote controller, and link the H16’s SBUS pin to the **RC IN** port.
|
||||
|
||||
### SBUS/DSM/PPM Protocol Receivers
|
||||
|
||||

|
||||
|
||||
Use wires to connect the receiver to the **RC IN** port at the rear of the controller.
|
||||
|
||||
### ELRS/CRSF Receivers
|
||||
|
||||

|
||||
|
||||
Connect the [ELRS/CRSF](../telemetry/crsf_telemetry.md) receiver to any UART serial port of the X25 EVO (e.g., **TELEM2**).
|
||||
|
||||
## Power
|
||||
|
||||
The X25 EVO comes standard with the PMU2 Lite power module, which supports 20–70V input and can measure a maximum current of 220A.
|
||||
It can be directly connected to the **Power C1/C2** port of the X25 EVO and is plug-and-play (no configuration required).
|
||||
|
||||

|
||||
|
||||
## Telemetry (Radio) System
|
||||
|
||||
[Telemetry system](../telemetry/index.md) allows you to communicate with the unmanned system via ground station software, enabling you to monitor and control the UAV’s status during flight. Connect the on-board unit of the telemetry system to the **TELEM1** or **TELEM2** port.
|
||||
|
||||
You can also purchase telemetry radios from the [CUAV store](https://store.cuav.net/uav-telemetry-module/).
|
||||
|
||||

|
||||
|
||||
## SD Card
|
||||
|
||||
SD cards are highly recommended as they are required for [recording and analyzing flight details](../getting_started/flight_reporting.md), running tasks and using UAVCAN bus hardware.
|
||||
An SD card is already installed on X25 EVO when it leaves the factory.
|
||||
|
||||
::: tip
|
||||
For more information see [Basic Concepts > SD Cards (Removable Memory)](../getting_started/px4_basic_concepts.md#sd-cards-removable-memory).
|
||||
:::
|
||||
|
||||
## Motors/Servo
|
||||
|
||||
Motors/servos are connected to the **M1~M16** ports in the order specified for your vehicle in the [Airframe Reference](../airframes/airframe_reference.md).
|
||||
|
||||

|
||||
|
||||
## Servo Power Supply
|
||||
|
||||
The X25 EVO does not supply power to servos. If you need to power servos:
|
||||
|
||||
1. Connect a BEC to the positive and negative terminals of any column among **M1 ~ M16** (the positive and negative terminals of **M1 ~ M16** are interconnected).
|
||||
2. Then connect the servos to the same column.
|
||||
|
||||

|
||||
|
||||
::: info
|
||||
The power rail voltage must be appropriate for the servo being used!
|
||||
:::
|
||||
|
||||
## Other Peripherals
|
||||
|
||||
The wiring and configuration of optional/less common components is covered within the topics for individual [peripherals](../peripherals/index.md).
|
||||
|
||||
## Configuration
|
||||
|
||||
General configuration information is covered in: [Autopilot Configuration](../config/index.md).
|
||||
|
||||
QuadPlane-specific configuration is covered here: [QuadPlane VTOL Configuration](../config_vtol/vtol_quad_configuration.md)
|
||||
|
||||
## Further information
|
||||
|
||||
- [CUAV Docs](https://doc.cuav.net/) (CUAV)
|
||||
- [X25 EVO](../flight_controller/cuav_x25-evo.md) (PX4 Doc Overview page)
|
||||
- [X25 SUPER](../flight_controller/cuav_x25-super.md) (PX4 Doc Overview page)
|
||||
@@ -175,7 +175,7 @@ The fields are:
|
||||
|
||||
#### Flap Scale and Spoiler Scale Configuration
|
||||
|
||||
"Flap-control" and "Spoiler-control" are aerodynamic configurations that can either be commanded manually by the pilot (using RC, say), or are set automatically by the controller.
|
||||
"Flap-control" and "Spoiler-control" are aerodynamic configurations that can either be commanded manually by the pilot (using RC or a Joystick, say) (see [Flaps and Spoiler Control with Manual Control](#flaps-and-spoiler-control-with-manual-control)), or are set automatically by the controller.
|
||||
For example, a pilot or the landing system might engage "Spoiler-control" in order to reduce the airspeed before landing.
|
||||
|
||||
The configurations are an _abstract_ way for the controller to tell the allocator how much it should adjust the aerodynamic properties of the wings relative to the "full flaps" or "full spoiler" configuration (between `[0,1]`, where "1" indicates the full range).
|
||||
@@ -198,6 +198,20 @@ In the following example, the vehicle has two ailerons, one elevator, one rudder
|
||||
These are the elevator deflections added to compensate for the pitching moments generated by the flaps and spoiler actuators.
|
||||
In the case here the elevator would be deflected 0.3 up when the flaps are fully deployed to counteract the pitching down moment caused by the flaps.
|
||||
|
||||
#### Flaps and Spoiler Control with Manual Control
|
||||
|
||||
The preferred method to manually actuate spoilers and flaps is to map a manual control switch to an `AUX` output (see [Generic Actuator Control with RC](#generic-actuator-control-with-rc)), and then map that AUX output to the flap or spoiler function using [FW_FLAPS_MAN](../advanced_config/parameter_reference.md#FW_FLAPS_MAN) or [FW_SPOILERS_MAN](../advanced_config/parameter_reference.md#FW_SPOILERS_MAN).
|
||||
The source for the manual control can be RC or MAVLink.
|
||||
|
||||
::: warning
|
||||
The following method is not recommended, and will be removed in a future release.
|
||||
If using it you should migrate to using the AUX-based method.
|
||||
|
||||
It is also possible to define a flaps channel directly on the RC using [RC_MAP_FLAPS](../advanced_config/parameter_reference.md#RC_MAP_FLAPS).
|
||||
This channel can also be used to control the spoilers by setting [FW_SPOILERS_MAN](../advanced_config/parameter_reference.md#FW_SPOILERS_MAN) to `Flaps channel`.
|
||||
This method is not possible when the source for the manual control is MAVLink.
|
||||
:::
|
||||
|
||||
#### Actuator Roll, Pitch, and Yaw Scaling
|
||||
|
||||
::: info
|
||||
|
||||
@@ -314,23 +314,24 @@ The relevant parameters are shown below:
|
||||
|
||||
### Motor Failure Trigger
|
||||
|
||||
The failure detector can be configured to detect a motor failure while armed (and trigger an associated action) in the following conditions:
|
||||
The failure detector can be configured to detect a motor failure while armed (and trigger an associated action) if the ESC current falls outside expected bounds for more than [MOTFAIL_TIME](#MOTFAIL_TIME) seconds.
|
||||
Motor failures are non-latching: if the failure condition clears, the failure is cleared.
|
||||
|
||||
- A 300 ms timeout occurs in telemetry from an ESC that was previously available.
|
||||
- The input current in the telemetry of an ESC which was previously positive gets too low for more than [`FD_ACT_MOT_TOUT`](FD_ACT_MOT_TOUT) ms.
|
||||
The "too low" condition is defined by:
|
||||
The undercurrent and overcurrent conditions are defined by:
|
||||
|
||||
```text
|
||||
{esc current} < {parameter FD_ACT_MOT_C2T} * {motor command between 0 and 1}
|
||||
```
|
||||
```text
|
||||
undercurrent: {esc current} < {MOTFAIL_C2T} * {motor command [0,1]} - {MOTFAIL_LOW_OFF}
|
||||
overcurrent: {esc current} > {MOTFAIL_C2T} * {motor command [0,1]} + {MOTFAIL_HIGH_OFF}
|
||||
```
|
||||
|
||||
| Parameter | Description |
|
||||
| -------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| <a id="FD_ACT_EN"></a>[FD_ACT_EN](../advanced_config/parameter_reference.md#FD_ACT_EN) | Enable/disable the motor failure trigger completely. |
|
||||
| <a id="FD_ACT_MOT_THR"></a>[FD_ACT_MOT_THR](../advanced_config/parameter_reference.md#FD_ACT_MOT_THR) | Minimum normalized [0,1] motor command below which motor under current is ignored. |
|
||||
| <a id="FD_ACT_MOT_C2T"></a>[FD_ACT_MOT_C2T](../advanced_config/parameter_reference.md#FD_ACT_MOT_C2T) | Scale between normalized [0,1] motor command and expected minimally reported current when the rotor is healthy. |
|
||||
| <a id="FD_ACT_MOT_TOUT"></a>[FD_ACT_MOT_TOUT](../advanced_config/parameter_reference.md#FD_ACT_MOT_TOUT) | Time in milliseconds for which the under current detection condition needs to stay true. |
|
||||
| <a id="CA_FAILURE_MODE"></a>[CA_FAILURE_MODE](../advanced_config/parameter_reference.md#CA_FAILURE_MODE) | Configure to not only warn about a motor failure but remove the first motor that detects a failure from the allocation effectiveness which turns off the motor and tries to operate the vehicle without it until disarming the next time. |
|
||||
| Parameter | Description |
|
||||
| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| <a id="FD_ACT_EN"></a>[FD_ACT_EN](../advanced_config/parameter_reference.md#FD_ACT_EN) | Enable/disable the motor failure trigger completely. |
|
||||
| <a id="MOTFAIL_C2T"></a>[MOTFAIL_C2T](../advanced_config/parameter_reference.md#MOTFAIL_C2T) | Slope between normalized motor command [0–1] and expected steady-state current (FD_ACT_MOT_C2T at 100%) (A/%). |
|
||||
| <a id="MOTFAIL_LOW_OFF"></a>[MOTFAIL_LOW_OFF](../advanced_config/parameter_reference.md#MOTFAIL_LOW_OFF) | Undercurrent detection threshold offset (A). Subtracted from the expected current to form the lower bound. |
|
||||
| <a id="MOTFAIL_HIGH_OFF"></a>[MOTFAIL_HIGH_OFF](../advanced_config/parameter_reference.md#MOTFAIL_HIGH_OFF) | Overcurrent detection threshold offset (A). Added to the expected current to form the upper bound. |
|
||||
| <a id="MOTFAIL_TIME"></a>[MOTFAIL_TIME](../advanced_config/parameter_reference.md#MOTFAIL_TIME) | Hysteresis time (s) for which the current threshold must remain exceeded before a motor failure is triggered. |
|
||||
| <a id="CA_FAILURE_MODE"></a>[CA_FAILURE_MODE](../advanced_config/parameter_reference.md#CA_FAILURE_MODE) | Configure to not only warn about a motor failure but remove the first motor that detects a failure from the allocation effectiveness which turns off the motor and tries to operate the vehicle without it until disarming the next time. |
|
||||
|
||||
### External Automatic Trigger System (ATS)
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ The boards in this category are:
|
||||
- [CUAV V5+](../flight_controller/cuav_v5_plus.md) (FMUv5)
|
||||
- [CUAV V5 nano](../flight_controller/cuav_v5_nano.md) (FMUv5)
|
||||
- [CUAV X25 EVO](../flight_controller/cuav_x25-evo.md)
|
||||
[CUAV X25 SUPER](../flight_controller/cuav_x25-super.md)
|
||||
- [CUAV X25 SUPER](../flight_controller/cuav_x25-super.md)
|
||||
- [CubePilot Cube Orange+](../flight_controller/cubepilot_cube_orangeplus.md)
|
||||
- [CubePilot Cube Orange](../flight_controller/cubepilot_cube_orange.md)
|
||||
- [CubePilot Cube Yellow](../flight_controller/cubepilot_cube_yellow.md)
|
||||
|
||||
@@ -9,7 +9,7 @@ The _X25-EVO_ is an advanced autopilot manufactured by CUAV<sup>®</sup>.
|
||||
|
||||
The autopilot is recommended for commercial system integration but is also suitable for academic research and any other applications.
|
||||
|
||||

|
||||

|
||||
|
||||
The X25-EVO brings you ultimate performance, stability, and reliability in every aspect.
|
||||
|
||||
@@ -19,12 +19,17 @@ These flight controllers are [manufacturer supported](../flight_controller/autop
|
||||
|
||||
### Features
|
||||
|
||||
- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory. Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models.
|
||||
- Automotive-grade RM3100 compass. Designed for better stability and anti-interference capability.
|
||||
- Triple-redundant IMUs and dual-redundant barometers located on separate buses. If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability.
|
||||
- Independent LDO power control supplies power to each sensor group. A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle.
|
||||
- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory.
|
||||
Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models.
|
||||
- Automotive-grade RM3100 compass.
|
||||
Designed for better stability and anti-interference capability.
|
||||
- Triple-redundant IMUs and dual-redundant barometers located on separate buses.
|
||||
If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability.
|
||||
- Independent LDO power control supplies power to each sensor group.
|
||||
A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle.
|
||||
- Integrated Microchip Ethernet PHY for high-speed communication with onboard devices like mission computers via Ethernet.
|
||||
- Dual temperature compensation systems, located on the IMU board and FMU board respectively. Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs.
|
||||
- Dual temperature compensation systems, located on the IMU board and FMU board respectively.
|
||||
Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs.
|
||||
- PWM servo output voltage switchable between 3.3V or 5V.
|
||||
- Modular design for DIY carrier boards.
|
||||
|
||||
@@ -33,7 +38,7 @@ These flight controllers are [manufacturer supported](../flight_controller/autop
|
||||
- Main Processor: STM32H743XI
|
||||
- 32-bit Arm® Cortex®-M7, 480MHz, 2MB Flash, 1MB RAM
|
||||
- Onboard Sensors:
|
||||
- Accel/Gyro: IIM42652\*2
|
||||
- Accel/Gyro: IIM42652 (x2)
|
||||
- Accel/Gyro: IIM42653
|
||||
- Magnetometer: RM3100
|
||||
- Barometer: BMP581
|
||||
@@ -47,14 +52,14 @@ These flight controllers are [manufacturer supported](../flight_controller/autop
|
||||
- Servo Rail Input: 0~9.9V
|
||||
- Rated Current:
|
||||
- Total Output Max Current: 10A
|
||||
- TELEM1 and TELEM2 Output Current limiter: 4A
|
||||
- CAN1 and CAN2 Output Current limiter: 2.4A
|
||||
- `TELEM1` and `TELEM2` Output Current limiter: 4A
|
||||
- `CAN1` and `CAN2` Output Current limiter: 2.4A
|
||||
- Other Ports Output Current limiter: 1.5A
|
||||
|
||||
### Interfaces
|
||||
|
||||
- 16x PWM Servo Outputs
|
||||
- 1x Dedicated R/C Input for Spektrum / DSM and S.Bus
|
||||
- 1x Dedicated R/C Input(`RC IN`) for Spektrum / DSM and S.Bus
|
||||
- 1x Analog/PWM RSSI Input
|
||||
- 2x TELEM Ports (with full flow control)
|
||||
- 1x UART4 Port
|
||||
@@ -83,7 +88,12 @@ These flight controllers are [manufacturer supported](../flight_controller/autop
|
||||
|
||||
### Mechanical Data
|
||||
|
||||
- Not provided.
|
||||
- Weight
|
||||
- Flight Controller Module: 110g
|
||||
- Operating & storage temperature: -20 ~ 85°C
|
||||
- Dimensions:
|
||||
|
||||

|
||||
|
||||
## Purchase Channels {#store}
|
||||
|
||||
@@ -91,11 +101,11 @@ Order from [CUAV](https://store.cuav.net/).
|
||||
|
||||
## Assembly/Setup
|
||||
|
||||
- Not provided.
|
||||
The [X25 EVO Wiring Quick Start](../assembly/quick_start_cuav_x25_evo.md) provides instructions on how to assemble required/important peripherals including GPS, Power Module etc.
|
||||
|
||||
## Pin Definitions
|
||||
## Pinouts
|
||||
|
||||
- Not provided.
|
||||

|
||||
|
||||
## Serial Port Mapping
|
||||
|
||||
@@ -106,12 +116,34 @@ Order from [CUAV](https://store.cuav.net/).
|
||||
| USART3 | /dev/ttyS2 | Debug Console |
|
||||
| UART4 | /dev/ttyS3 | UART4 |
|
||||
| UART5 | /dev/ttyS4 | TELEM2 |
|
||||
| USART6 | /dev/ttyS5 | RC |
|
||||
| USART6 | /dev/ttyS5 | RC IN |
|
||||
| UART7 | /dev/ttyS6 | TELEM1 |
|
||||
|
||||
## PWM Outputs {#pwm_outputs}
|
||||
|
||||
This flight controller supports up to 16 FMU PWM outputs (MAIN).
|
||||
|
||||
Outputs:
|
||||
|
||||
- Outputs 1-8 support [DShot](../peripherals/dshot.md).
|
||||
- Outputs 9-16 do not support DShot.
|
||||
- Outputs 1-7 support [Bidirectional DShot](../peripherals/dshot.md#bidirectional-dshot-telemetry).
|
||||
- Output 8 supports Bidirectional DShot output only (no eRPM capture).
|
||||
|
||||
The 16 outputs are in 5 groups:
|
||||
|
||||
- Outputs 1-4 in group1 (Timer5)
|
||||
- Outputs 5-8 in group2 (Timer4)
|
||||
- Outputs 9-11 in group3 (Timer1)
|
||||
- Outputs 12-14 in group4 (Timer8)
|
||||
- Outputs 15-16 in group5 (Timer12)
|
||||
|
||||
All outputs within the same group must use the same output protocol and rate.
|
||||
|
||||
## Voltage Ratings
|
||||
|
||||
The _X25-EVO_ achieves triple redundancy on power supplies if three power sources are provided. The three power rails are POWERC1, POWERC2, and USB.
|
||||
The _X25-EVO_ achieves triple redundancy on power supplies if three power sources are provided.
|
||||
The three power rails are `POWERC1`, `POWERC2`, and `USB`.
|
||||
|
||||
- **POWER C1** and **POWER C2** are DroneCAN/UAVCAN battery interfaces.
|
||||
|
||||
@@ -154,7 +186,8 @@ The [PX4 System Console](../debug/system_console.md) and [SWD Interface](../debu
|
||||
|
||||
## Supported Platforms / Airframes
|
||||
|
||||
Any multirotor/airplane/rover or boat that can be controlled using normal RC servos or Futaba S-Bus servos. The complete set of supported configurations can be found in the [Airframe Reference](../airframes/airframe_reference.md).
|
||||
Any multicopter / airplane / rover or boat that can be controlled with normal RC servos or Futaba S-Bus servos.
|
||||
The complete set of supported configurations can be seen in the [Airframes Reference](../airframes/airframe_reference.md).
|
||||
|
||||
## Further info
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# CUAV X25-SUPER
|
||||
|
||||
<Badge type="tip" text="PX4 v1.18)" />
|
||||
<Badge type="tip" text="PX4 v1.18" />
|
||||
|
||||
::: warning
|
||||
PX4 does not manufacture this (or any) autopilot.
|
||||
@@ -21,12 +21,17 @@ These flight controllers are [manufacturer supported](../flight_controller/autop
|
||||
|
||||
### Features
|
||||
|
||||
- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory. Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models.
|
||||
- Automotive-grade RM3100 compass. Designed for better stability and anti-interference capability.
|
||||
- Triple-redundant IMUs and dual-redundant barometers located on separate buses. If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability.
|
||||
- Independent LDO power control supplies power to each sensor group. A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle.
|
||||
- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory.
|
||||
Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models.
|
||||
- Automotive-grade RM3100 compass.
|
||||
Designed for better stability and anti-interference capability.
|
||||
- Triple-redundant IMUs and dual-redundant barometers located on separate buses.
|
||||
If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability.
|
||||
- Independent LDO power control supplies power to each sensor group.
|
||||
A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle.
|
||||
- Integrated Microchip Ethernet PHY for high-speed communication with onboard devices like mission computers via Ethernet.
|
||||
- Dual temperature compensation systems, located on the IMU board and FMU board respectively. Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs.
|
||||
- Dual temperature compensation systems, located on the IMU board and FMU board respectively.
|
||||
Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs.
|
||||
- PWM servo output voltage switchable between 3.3V or 5V.
|
||||
- Modular design for DIY carrier boards.
|
||||
|
||||
@@ -50,14 +55,14 @@ These flight controllers are [manufacturer supported](../flight_controller/autop
|
||||
- Servo Rail Input: 0~9.9V
|
||||
- Rated Current:
|
||||
- Total Output Max Current: 10A
|
||||
- TELEM1 and TELEM2 Output Current limiter: 4A
|
||||
- CAN1 and CAN2 Output Current limiter: 2.4A
|
||||
- `TELEM1` and `TELEM2` Output Current limiter: 4A
|
||||
- `CAN1` and `CAN2` Output Current limiter: 2.4A
|
||||
- Other Ports Output Current limiter: 1.5A
|
||||
|
||||
### Interfaces
|
||||
|
||||
- 16x PWM Servo Outputs
|
||||
- 1x Dedicated R/C Input for Spektrum / DSM and S.Bus
|
||||
- 1x Dedicated R/C Input(`RC IN`) for Spektrum / DSM and S.Bus
|
||||
- 1x Analog/PWM RSSI Input
|
||||
- 2x TELEM Ports (with full flow control)
|
||||
- 1x UART4 Port
|
||||
@@ -80,16 +85,15 @@ These flight controllers are [manufacturer supported](../flight_controller/autop
|
||||
- DroneCAN/UAVCAN Power Input
|
||||
- 2x AD Ports
|
||||
- Analog Input (3.3V)
|
||||
- Analog Input (6.6V - not supported)
|
||||
- Analog Input (6.6V - not supported by PX4)
|
||||
- 1x Dedicated Debug Port
|
||||
- FMU Debug
|
||||
|
||||
### Mechanical Data
|
||||
|
||||
- Size
|
||||
- Flight controller
|
||||
- Dimensions:
|
||||
|
||||

|
||||

|
||||
|
||||
## Purchase Channels {#store}
|
||||
|
||||
@@ -97,7 +101,7 @@ Order from [CUAV](https://store.cuav.net/).
|
||||
|
||||
## Assembly/Setup
|
||||
|
||||
- Not provided.
|
||||
The [X25 SUPER Wiring Quick Start](../assembly/quick_start_cuav_x25_evo.md) provides instructions on how to assemble required/important peripherals including GPS, Power Module etc.
|
||||
|
||||
## Pinouts
|
||||
|
||||
@@ -113,7 +117,7 @@ Order from [CUAV](https://store.cuav.net/).
|
||||
| USART3 | /dev/ttyS2 | Debug Console |
|
||||
| UART4 | /dev/ttyS3 | UART4 |
|
||||
| UART5 | /dev/ttyS4 | TELEM2 |
|
||||
| USART6 | /dev/ttyS5 | RC |
|
||||
| USART6 | /dev/ttyS5 | RC IN |
|
||||
| UART7 | /dev/ttyS6 | TELEM1 |
|
||||
|
||||
## RC Input
|
||||
@@ -122,7 +126,8 @@ The RC input pin is directly connected to the FMU UART6 TX.
|
||||
|
||||
## Voltage Ratings
|
||||
|
||||
The _X25-SUPER_ achieves triple redundancy on power supplies if three power sources are provided. The three power rails are POWERC1, POWERC2, and USB.
|
||||
The _X25-SUPER_ achieves triple redundancy on power supplies if three power sources are provided.
|
||||
The three power rails are `POWERC1`, `POWERC2`, and `USB`.
|
||||
|
||||
- **POWER C1** and **POWER C2** are DroneCAN/UAVCAN battery interfaces.
|
||||
|
||||
@@ -140,13 +145,13 @@ Digital DroneCAN/UAVCAN battery monitoring is enabled by default.
|
||||
## Building Firmware
|
||||
|
||||
::: tip
|
||||
Most users will not need to build this firmware from PX4 v1.18.
|
||||
Most users will not need to build this firmware (from PX4 v1.18).
|
||||
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
|
||||
:::
|
||||
|
||||
To [build PX4](../dev_setup/building_px4.md) for this target, execute:
|
||||
|
||||
```
|
||||
```sh
|
||||
make cuav_x25-super_default
|
||||
```
|
||||
|
||||
|
||||
@@ -95,206 +95,207 @@ They are not build into the module, and hence are neither published or subscribe
|
||||
|
||||
::: details See messages
|
||||
|
||||
- [HomePositionV0](../msg_docs/HomePositionV0.md)
|
||||
- [GimbalControls](../msg_docs/GimbalControls.md)
|
||||
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
|
||||
- [GpioOut](../msg_docs/GpioOut.md)
|
||||
- [SensorAccel](../msg_docs/SensorAccel.md)
|
||||
- [AirspeedWind](../msg_docs/AirspeedWind.md)
|
||||
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
|
||||
- [DatamanResponse](../msg_docs/DatamanResponse.md)
|
||||
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
|
||||
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
|
||||
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
|
||||
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
|
||||
- [VehicleRoi](../msg_docs/VehicleRoi.md)
|
||||
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
|
||||
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
|
||||
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
|
||||
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
|
||||
- [DebugArray](../msg_docs/DebugArray.md)
|
||||
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
|
||||
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
|
||||
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
|
||||
- [RcChannels](../msg_docs/RcChannels.md)
|
||||
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
|
||||
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
|
||||
- [GainCompression](../msg_docs/GainCompression.md)
|
||||
- [VehicleStatusV2](../msg_docs/VehicleStatusV2.md)
|
||||
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
|
||||
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
|
||||
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
|
||||
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
|
||||
- [DebugValue](../msg_docs/DebugValue.md)
|
||||
- [GpioConfig](../msg_docs/GpioConfig.md)
|
||||
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
|
||||
- [GeofenceResult](../msg_docs/GeofenceResult.md)
|
||||
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
|
||||
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
|
||||
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
|
||||
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
|
||||
- [AdcReport](../msg_docs/AdcReport.md)
|
||||
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
|
||||
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
|
||||
- [CameraTrigger](../msg_docs/CameraTrigger.md)
|
||||
- [EscEepromRead](../msg_docs/EscEepromRead.md)
|
||||
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
|
||||
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
|
||||
- [VelocityLimits](../msg_docs/VelocityLimits.md)
|
||||
- [LedControl](../msg_docs/LedControl.md)
|
||||
- [DatamanRequest](../msg_docs/DatamanRequest.md)
|
||||
- [WheelEncoders](../msg_docs/WheelEncoders.md)
|
||||
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
|
||||
- [PowerButtonState](../msg_docs/PowerButtonState.md)
|
||||
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
|
||||
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
|
||||
- [RadioStatus](../msg_docs/RadioStatus.md)
|
||||
- [SensorTemp](../msg_docs/SensorTemp.md)
|
||||
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
|
||||
- [GpioRequest](../msg_docs/GpioRequest.md)
|
||||
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
|
||||
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
|
||||
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
|
||||
- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
|
||||
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
|
||||
- [Mission](../msg_docs/Mission.md)
|
||||
- [SystemPower](../msg_docs/SystemPower.md)
|
||||
- [VehicleImu](../msg_docs/VehicleImu.md)
|
||||
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
|
||||
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
|
||||
- [QshellReq](../msg_docs/QshellReq.md)
|
||||
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
|
||||
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
|
||||
- [SensorSelection](../msg_docs/SensorSelection.md)
|
||||
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
|
||||
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
|
||||
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
|
||||
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
|
||||
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
|
||||
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
|
||||
- [SensorsStatus](../msg_docs/SensorsStatus.md)
|
||||
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
|
||||
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
|
||||
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
|
||||
- [RtlStatus](../msg_docs/RtlStatus.md)
|
||||
- [SensorUwb](../msg_docs/SensorUwb.md)
|
||||
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
|
||||
- [RaptorStatus](../msg_docs/RaptorStatus.md)
|
||||
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
|
||||
- [OrbTest](../msg_docs/OrbTest.md)
|
||||
- [TecsStatus](../msg_docs/TecsStatus.md)
|
||||
- [CameraStatus](../msg_docs/CameraStatus.md)
|
||||
- [GpsDump](../msg_docs/GpsDump.md)
|
||||
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
|
||||
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
|
||||
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
|
||||
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
|
||||
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
|
||||
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
|
||||
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
|
||||
- [MissionResult](../msg_docs/MissionResult.md)
|
||||
- [LogMessage](../msg_docs/LogMessage.md)
|
||||
- [QshellRetval](../msg_docs/QshellRetval.md)
|
||||
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
|
||||
- [IrlockReport](../msg_docs/IrlockReport.md)
|
||||
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
|
||||
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
|
||||
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
|
||||
- [ButtonEvent](../msg_docs/ButtonEvent.md)
|
||||
- [SensorCorrection](../msg_docs/SensorCorrection.md)
|
||||
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
|
||||
- [DeviceInformation](../msg_docs/DeviceInformation.md)
|
||||
- [Gripper](../msg_docs/Gripper.md)
|
||||
- [SensorMag](../msg_docs/SensorMag.md)
|
||||
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
|
||||
- [EscReport](../msg_docs/EscReport.md)
|
||||
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
|
||||
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
|
||||
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
|
||||
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
|
||||
- [MagWorkerData](../msg_docs/MagWorkerData.md)
|
||||
- [EstimatorStates](../msg_docs/EstimatorStates.md)
|
||||
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
|
||||
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
|
||||
- [Cpuload](../msg_docs/Cpuload.md)
|
||||
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
|
||||
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
|
||||
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
|
||||
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
|
||||
- [PpsCapture](../msg_docs/PpsCapture.md)
|
||||
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
|
||||
- [Event](../msg_docs/Event.md)
|
||||
- [GpioIn](../msg_docs/GpioIn.md)
|
||||
- [PowerMonitor](../msg_docs/PowerMonitor.md)
|
||||
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
|
||||
- [RaptorInput](../msg_docs/RaptorInput.md)
|
||||
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
|
||||
- [ActionRequest](../msg_docs/ActionRequest.md)
|
||||
- [ActuatorTest](../msg_docs/ActuatorTest.md)
|
||||
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
|
||||
- [SensorBaro](../msg_docs/SensorBaro.md)
|
||||
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
|
||||
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
|
||||
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
|
||||
- [SensorGyro](../msg_docs/SensorGyro.md)
|
||||
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
|
||||
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
|
||||
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
|
||||
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
|
||||
- [MountOrientation](../msg_docs/MountOrientation.md)
|
||||
- [HealthReport](../msg_docs/HealthReport.md)
|
||||
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
|
||||
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
|
||||
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
|
||||
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
|
||||
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
|
||||
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
|
||||
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
|
||||
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
|
||||
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
|
||||
- [HeaterStatus](../msg_docs/HeaterStatus.md)
|
||||
- [UlogStream](../msg_docs/UlogStream.md)
|
||||
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
|
||||
- [PwmInput](../msg_docs/PwmInput.md)
|
||||
- [EventV0](../msg_docs/EventV0.md)
|
||||
- [FollowTarget](../msg_docs/FollowTarget.md)
|
||||
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
|
||||
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
|
||||
- [Ping](../msg_docs/Ping.md)
|
||||
- [RcParameterMap](../msg_docs/RcParameterMap.md)
|
||||
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
|
||||
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
|
||||
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
|
||||
- [Airspeed](../msg_docs/Airspeed.md)
|
||||
- [EscEepromWrite](../msg_docs/EscEepromWrite.md)
|
||||
- [BatteryInfo](../msg_docs/BatteryInfo.md)
|
||||
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
|
||||
- [LoggerStatus](../msg_docs/LoggerStatus.md)
|
||||
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
|
||||
- [CellularStatus](../msg_docs/CellularStatus.md)
|
||||
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
|
||||
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
|
||||
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
|
||||
- [MavlinkLog](../msg_docs/MavlinkLog.md)
|
||||
- [GpsInjectData](../msg_docs/GpsInjectData.md)
|
||||
- [InputRc](../msg_docs/InputRc.md)
|
||||
- [DebugVect](../msg_docs/DebugVect.md)
|
||||
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
|
||||
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
|
||||
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
|
||||
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
|
||||
- [EscEepromRead](../msg_docs/EscEepromRead.md)
|
||||
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
|
||||
- [SensorAirflow](../msg_docs/SensorAirflow.md)
|
||||
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
|
||||
- [EscStatus](../msg_docs/EscStatus.md)
|
||||
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
|
||||
- [Vtx](../msg_docs/Vtx.md)
|
||||
- [RangingBeacon](../msg_docs/RangingBeacon.md)
|
||||
- [NeuralControl](../msg_docs/NeuralControl.md)
|
||||
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
|
||||
- [OrbitStatus](../msg_docs/OrbitStatus.md)
|
||||
- [VehicleAirData](../msg_docs/VehicleAirData.md)
|
||||
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
|
||||
- [Rpm](../msg_docs/Rpm.md)
|
||||
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
|
||||
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
|
||||
- [CameraCapture](../msg_docs/CameraCapture.md)
|
||||
- [EstimatorBias](../msg_docs/EstimatorBias.md)
|
||||
- [CellularStatus](../msg_docs/CellularStatus.md)
|
||||
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
|
||||
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
|
||||
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
|
||||
- [TuneControl](../msg_docs/TuneControl.md)
|
||||
- [HealthReport](../msg_docs/HealthReport.md)
|
||||
- [MavlinkLog](../msg_docs/MavlinkLog.md)
|
||||
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
|
||||
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
|
||||
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
|
||||
- [TecsStatus](../msg_docs/TecsStatus.md)
|
||||
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
|
||||
- [EventV0](../msg_docs/EventV0.md)
|
||||
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
|
||||
- [VelocityLimits](../msg_docs/VelocityLimits.md)
|
||||
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
|
||||
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
|
||||
- [AirspeedWind](../msg_docs/AirspeedWind.md)
|
||||
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
|
||||
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
|
||||
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
|
||||
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
|
||||
- [VehicleImu](../msg_docs/VehicleImu.md)
|
||||
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
|
||||
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
|
||||
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
|
||||
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
|
||||
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
|
||||
- [RaptorInput](../msg_docs/RaptorInput.md)
|
||||
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
|
||||
- [RangingBeacon](../msg_docs/RangingBeacon.md)
|
||||
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
|
||||
- [CameraStatus](../msg_docs/CameraStatus.md)
|
||||
- [Mission](../msg_docs/Mission.md)
|
||||
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
|
||||
- [RadioStatus](../msg_docs/RadioStatus.md)
|
||||
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
|
||||
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
|
||||
- [Ping](../msg_docs/Ping.md)
|
||||
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
|
||||
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
|
||||
- [MountOrientation](../msg_docs/MountOrientation.md)
|
||||
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
|
||||
- [GpioRequest](../msg_docs/GpioRequest.md)
|
||||
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
|
||||
- [HeaterStatus](../msg_docs/HeaterStatus.md)
|
||||
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
|
||||
- [GimbalControls](../msg_docs/GimbalControls.md)
|
||||
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
|
||||
- [DatamanRequest](../msg_docs/DatamanRequest.md)
|
||||
- [PwmInput](../msg_docs/PwmInput.md)
|
||||
- [LedControl](../msg_docs/LedControl.md)
|
||||
- [EstimatorStates](../msg_docs/EstimatorStates.md)
|
||||
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
|
||||
- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
|
||||
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
|
||||
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
|
||||
- [RcParameterMap](../msg_docs/RcParameterMap.md)
|
||||
- [SensorBaro](../msg_docs/SensorBaro.md)
|
||||
- [UlogStream](../msg_docs/UlogStream.md)
|
||||
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
|
||||
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
|
||||
- [RcChannels](../msg_docs/RcChannels.md)
|
||||
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
|
||||
- [EstimatorFusionControl](../msg_docs/EstimatorFusionControl.md)
|
||||
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
|
||||
- [SensorGyro](../msg_docs/SensorGyro.md)
|
||||
- [LoggerStatus](../msg_docs/LoggerStatus.md)
|
||||
- [RtlStatus](../msg_docs/RtlStatus.md)
|
||||
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
|
||||
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
|
||||
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
|
||||
- [VehicleRoi](../msg_docs/VehicleRoi.md)
|
||||
- [LogMessage](../msg_docs/LogMessage.md)
|
||||
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
|
||||
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
|
||||
- [AdcReport](../msg_docs/AdcReport.md)
|
||||
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
|
||||
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
|
||||
- [GpioIn](../msg_docs/GpioIn.md)
|
||||
- [GeofenceResult](../msg_docs/GeofenceResult.md)
|
||||
- [SensorSelection](../msg_docs/SensorSelection.md)
|
||||
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
|
||||
- [MagWorkerData](../msg_docs/MagWorkerData.md)
|
||||
- [OrbTest](../msg_docs/OrbTest.md)
|
||||
- [GpsDump](../msg_docs/GpsDump.md)
|
||||
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
|
||||
- [Cpuload](../msg_docs/Cpuload.md)
|
||||
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
|
||||
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
|
||||
- [Vtx](../msg_docs/Vtx.md)
|
||||
- [DebugVect](../msg_docs/DebugVect.md)
|
||||
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
|
||||
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
|
||||
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
|
||||
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
|
||||
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
|
||||
- [GpsInjectData](../msg_docs/GpsInjectData.md)
|
||||
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
|
||||
- [Rpm](../msg_docs/Rpm.md)
|
||||
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
|
||||
- [SystemPower](../msg_docs/SystemPower.md)
|
||||
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
|
||||
- [ActuatorTest](../msg_docs/ActuatorTest.md)
|
||||
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
|
||||
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
|
||||
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
|
||||
- [InputRc](../msg_docs/InputRc.md)
|
||||
- [EscEepromWrite](../msg_docs/EscEepromWrite.md)
|
||||
- [SensorCorrection](../msg_docs/SensorCorrection.md)
|
||||
- [SensorMag](../msg_docs/SensorMag.md)
|
||||
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
|
||||
- [Airspeed](../msg_docs/Airspeed.md)
|
||||
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
|
||||
- [DatamanResponse](../msg_docs/DatamanResponse.md)
|
||||
- [GpioOut](../msg_docs/GpioOut.md)
|
||||
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
|
||||
- [FollowTarget](../msg_docs/FollowTarget.md)
|
||||
- [Gripper](../msg_docs/Gripper.md)
|
||||
- [VehicleAirData](../msg_docs/VehicleAirData.md)
|
||||
- [PowerMonitor](../msg_docs/PowerMonitor.md)
|
||||
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
|
||||
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
|
||||
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
|
||||
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
|
||||
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
|
||||
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
|
||||
- [EscReport](../msg_docs/EscReport.md)
|
||||
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
|
||||
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
|
||||
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
|
||||
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
|
||||
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
|
||||
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
|
||||
- [OrbitStatus](../msg_docs/OrbitStatus.md)
|
||||
- [SensorAccel](../msg_docs/SensorAccel.md)
|
||||
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
|
||||
- [CameraTrigger](../msg_docs/CameraTrigger.md)
|
||||
- [GainCompression](../msg_docs/GainCompression.md)
|
||||
- [CameraCapture](../msg_docs/CameraCapture.md)
|
||||
- [PowerButtonState](../msg_docs/PowerButtonState.md)
|
||||
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
|
||||
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
|
||||
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
|
||||
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
|
||||
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
|
||||
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
|
||||
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
|
||||
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
|
||||
- [DebugValue](../msg_docs/DebugValue.md)
|
||||
- [ActionRequest](../msg_docs/ActionRequest.md)
|
||||
- [ButtonEvent](../msg_docs/ButtonEvent.md)
|
||||
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
|
||||
- [MissionResult](../msg_docs/MissionResult.md)
|
||||
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
|
||||
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
|
||||
- [NeuralControl](../msg_docs/NeuralControl.md)
|
||||
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
|
||||
- [QshellRetval](../msg_docs/QshellRetval.md)
|
||||
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
|
||||
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
|
||||
- [BatteryInfo](../msg_docs/BatteryInfo.md)
|
||||
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
|
||||
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
|
||||
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
|
||||
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
|
||||
- [HomePositionV0](../msg_docs/HomePositionV0.md)
|
||||
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
|
||||
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
|
||||
- [DeviceInformation](../msg_docs/DeviceInformation.md)
|
||||
- [IrlockReport](../msg_docs/IrlockReport.md)
|
||||
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
|
||||
- [WheelEncoders](../msg_docs/WheelEncoders.md)
|
||||
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
|
||||
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
|
||||
- [SensorUwb](../msg_docs/SensorUwb.md)
|
||||
- [EstimatorBias](../msg_docs/EstimatorBias.md)
|
||||
- [VehicleStatusV2](../msg_docs/VehicleStatusV2.md)
|
||||
- [GpioConfig](../msg_docs/GpioConfig.md)
|
||||
- [QshellReq](../msg_docs/QshellReq.md)
|
||||
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
|
||||
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
|
||||
- [SensorTemp](../msg_docs/SensorTemp.md)
|
||||
- [PpsCapture](../msg_docs/PpsCapture.md)
|
||||
- [SensorsStatus](../msg_docs/SensorsStatus.md)
|
||||
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
|
||||
- [RaptorStatus](../msg_docs/RaptorStatus.md)
|
||||
- [DebugArray](../msg_docs/DebugArray.md)
|
||||
- [EscStatus](../msg_docs/EscStatus.md)
|
||||
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
|
||||
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
|
||||
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
|
||||
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
|
||||
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
|
||||
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
|
||||
- [Event](../msg_docs/Event.md)
|
||||
:::
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
pageClass: is-wide-page
|
||||
---
|
||||
|
||||
# EstimatorFusionControl (UORB message)
|
||||
|
||||
**TOPICS:** estimator_fusion_control
|
||||
|
||||
## Fields
|
||||
|
||||
| Name | Type | Unit [Frame] | Range/Enum | Description |
|
||||
| --------------- | --------- | ------------ | ---------- | -------------------------------------- |
|
||||
| timestamp | `uint64` | | | time since system start (microseconds) |
|
||||
| gps_intended | `bool[2]` | | |
|
||||
| of_intended | `bool` | | |
|
||||
| ev_intended | `bool` | | |
|
||||
| agp_intended | `bool[4]` | | |
|
||||
| baro_intended | `bool` | | |
|
||||
| rng_intended | `bool` | | |
|
||||
| mag_intended | `bool` | | |
|
||||
| aspd_intended | `bool` | | |
|
||||
| rngbcn_intended | `bool` | | |
|
||||
| gps_active | `bool[2]` | | |
|
||||
| of_active | `bool` | | |
|
||||
| ev_active | `bool` | | |
|
||||
| agp_active | `bool[4]` | | |
|
||||
| baro_active | `bool` | | |
|
||||
| rng_active | `bool` | | |
|
||||
| mag_active | `bool` | | |
|
||||
| aspd_active | `bool` | | |
|
||||
| rngbcn_active | `bool` | | |
|
||||
|
||||
## Source Message
|
||||
|
||||
[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorFusionControl.msg)
|
||||
|
||||
::: details Click here to see original file
|
||||
|
||||
```c
|
||||
uint64 timestamp # time since system start (microseconds)
|
||||
|
||||
# sensor intended for fusion (enabled via EKF2_SENS_EN AND CTRL param != disabled)
|
||||
bool[2] gps_intended
|
||||
bool of_intended
|
||||
bool ev_intended
|
||||
bool[4] agp_intended
|
||||
bool baro_intended
|
||||
bool rng_intended
|
||||
bool mag_intended
|
||||
bool aspd_intended
|
||||
bool rngbcn_intended
|
||||
|
||||
# whether the estimator is actively fusing data from each source
|
||||
bool[2] gps_active
|
||||
bool of_active
|
||||
bool ev_active
|
||||
bool[4] agp_active
|
||||
bool baro_active
|
||||
bool rng_active
|
||||
bool mag_active
|
||||
bool aspd_active
|
||||
bool rngbcn_active
|
||||
```
|
||||
|
||||
:::
|
||||
@@ -1458,6 +1458,20 @@ None
|
||||
| 6 | | | ? |
|
||||
| 7 | | | ? |
|
||||
|
||||
### VEHICLE_CMD_ESTIMATOR_SENSOR_ENABLE (43006)
|
||||
|
||||
Enable/disable estimator sensor fusion.
|
||||
|
||||
| Param | Units | Range/Enum | Description |
|
||||
| ----- | ----- | ---------- | ---------------------------------- |
|
||||
| 1 | | | Source (FUSION*SOURCE*\*) |
|
||||
| 2 | | | Sensor instance (0-based) |
|
||||
| 3 | | | Enable (1) or Disable (0) |
|
||||
| 4 | | | Estimator Instance (NaN: not used) |
|
||||
| 5 | | | Empty |
|
||||
| 6 | | | Empty |
|
||||
| 7 | | | Empty |
|
||||
|
||||
### VEHICLE_CMD_PX4_INTERNAL_START (65537)
|
||||
|
||||
Start of PX4 internal only vehicle commands (> UINT16_MAX).
|
||||
@@ -1544,6 +1558,15 @@ Change mode by specifying nav_state directly.
|
||||
| --------------------------------------------------------------------------------------------------------- | -------- | ----- | ----------------------------------------------------------------------------------------------------- |
|
||||
| <a id="#MESSAGE_VERSION"></a> MESSAGE_VERSION | `uint32` | 0 |
|
||||
| <a id="#PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION"></a> PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION | `uint16` | 3 | Param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration. |
|
||||
| <a id="#FUSION_SOURCE_GPS"></a> FUSION_SOURCE_GPS | `uint8` | 0 | GNSS (EKF2_GPS{i}\_CTRL, use instance param) |
|
||||
| <a id="#FUSION_SOURCE_OF"></a> FUSION_SOURCE_OF | `uint8` | 1 | Optical Flow (EKF2_OF_CTRL) |
|
||||
| <a id="#FUSION_SOURCE_EV"></a> FUSION_SOURCE_EV | `uint8` | 2 | External Vision (EKF2_EV_CTRL) |
|
||||
| <a id="#FUSION_SOURCE_AGP"></a> FUSION_SOURCE_AGP | `uint8` | 3 | Auxiliary Global Position (EKF2_AGP{i}\_CTRL, use instance param) |
|
||||
| <a id="#FUSION_SOURCE_BARO"></a> FUSION_SOURCE_BARO | `uint8` | 4 | Barometer (EKF2_BARO_CTRL) |
|
||||
| <a id="#FUSION_SOURCE_RNG"></a> FUSION_SOURCE_RNG | `uint8` | 5 | Range Finder (EKF2_RNG_CTRL) |
|
||||
| <a id="#FUSION_SOURCE_MAG"></a> FUSION_SOURCE_MAG | `uint8` | 6 | Magnetometer (EKF2_MAG_TYPE) |
|
||||
| <a id="#FUSION_SOURCE_ASPD"></a> FUSION_SOURCE_ASPD | `uint8` | 7 | Airspeed (EKF2_ARSP_THR) |
|
||||
| <a id="#FUSION_SOURCE_RNGBCN"></a> FUSION_SOURCE_RNGBCN | `uint8` | 8 | Ranging Beacon |
|
||||
| <a id="#VEHICLE_MOUNT_MODE_RETRACT"></a> VEHICLE_MOUNT_MODE_RETRACT | `uint8` | 0 | Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization. |
|
||||
| <a id="#VEHICLE_MOUNT_MODE_NEUTRAL"></a> VEHICLE_MOUNT_MODE_NEUTRAL | `uint8` | 1 | Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. |
|
||||
| <a id="#VEHICLE_MOUNT_MODE_MAVLINK_TARGETING"></a> VEHICLE_MOUNT_MODE_MAVLINK_TARGETING | `uint8` | 2 | Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization. |
|
||||
@@ -1710,6 +1733,17 @@ uint16 VEHICLE_CMD_DO_WINCH = 42600 # Command to operate winch.
|
||||
|
||||
uint16 VEHICLE_CMD_EXTERNAL_POSITION_ESTIMATE = 43003 # External reset of estimator global position when dead reckoning.
|
||||
uint16 VEHICLE_CMD_EXTERNAL_WIND_ESTIMATE = 43004
|
||||
uint16 VEHICLE_CMD_ESTIMATOR_SENSOR_ENABLE = 43006 # Enable/disable estimator sensor fusion. |Source (FUSION_SOURCE_*)|Sensor instance (0-based)|Enable (1) or Disable (0)|Estimator Instance (NaN: not used)|Empty|Empty|Empty|
|
||||
# Sensor fusion source types for VEHICLE_CMD_ESTIMATOR_SENSOR_ENABLE
|
||||
uint8 FUSION_SOURCE_GPS = 0 # GNSS (EKF2_GPS{i}_CTRL, use instance param)
|
||||
uint8 FUSION_SOURCE_OF = 1 # Optical Flow (EKF2_OF_CTRL)
|
||||
uint8 FUSION_SOURCE_EV = 2 # External Vision (EKF2_EV_CTRL)
|
||||
uint8 FUSION_SOURCE_AGP = 3 # Auxiliary Global Position (EKF2_AGP{i}_CTRL, use instance param)
|
||||
uint8 FUSION_SOURCE_BARO = 4 # Barometer (EKF2_BARO_CTRL)
|
||||
uint8 FUSION_SOURCE_RNG = 5 # Range Finder (EKF2_RNG_CTRL)
|
||||
uint8 FUSION_SOURCE_MAG = 6 # Magnetometer (EKF2_MAG_TYPE)
|
||||
uint8 FUSION_SOURCE_ASPD = 7 # Airspeed (EKF2_ARSP_THR)
|
||||
uint8 FUSION_SOURCE_RNGBCN = 8 # Ranging Beacon
|
||||
|
||||
# PX4 vehicle commands (beyond 16 bit MAVLink commands).
|
||||
uint32 VEHICLE_CMD_PX4_INTERNAL_START = 65537 # Start of PX4 internal only vehicle commands (> UINT16_MAX).
|
||||
|
||||
@@ -95,6 +95,7 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m
|
||||
- [EstimatorBias](EstimatorBias.md)
|
||||
- [EstimatorBias3d](EstimatorBias3d.md)
|
||||
- [EstimatorEventFlags](EstimatorEventFlags.md)
|
||||
- [EstimatorFusionControl](EstimatorFusionControl.md)
|
||||
- [EstimatorGpsStatus](EstimatorGpsStatus.md)
|
||||
- [EstimatorInnovations](EstimatorInnovations.md)
|
||||
- [EstimatorSelectorStatus](EstimatorSelectorStatus.md)
|
||||
|
||||
@@ -23,6 +23,7 @@ Recommended digital airspeed sensors include:
|
||||
- [Holybro High Precision DroneCAN Airspeed Sensor - DLVR](https://holybro.com/collections/sensors/products/high-precision-dronecan-airspeed-sensor-dlvr)
|
||||
- [RaccoonLab Cyphal/CAN and DroneCAN Airspeed Sensor - MS4525DO](https://raccoonlab.co/tproduct/360882105-652259850171-cyphal-and-dronecan-airspeed-v2)
|
||||
- [Avionics Anonymous Air Data Computer with OAT probe](https://www.tindie.com/products/avionicsanonymous/uavcan-air-data-computer-airspeed-sensor/)
|
||||
- [UAV-DEV GmbH DroneCAN Airspeed and Barometer Sensor - AUAV](https://wiki.uav-dev.com/en/product/airspeed/auav)
|
||||
- Based on [Venturi effect](https://en.wikipedia.org/wiki/Venturi_effect)
|
||||
- [TFSLOT](airspeed_tfslot.md) Venturi effect airspeed sensor.
|
||||
|
||||
|
||||
@@ -22,6 +22,8 @@ For significant changes to the system you should also run general flight tests u
|
||||
These test cards define "standard" flight tests.
|
||||
These are run by the test team as part of release testing, and for more significant system changes.
|
||||
|
||||
### Multicopter
|
||||
|
||||
- [MC_01 - Manual modes](../test_cards/mc_01_manual_modes.md)
|
||||
- [MC_02 - Full Autonomous](../test_cards/mc_02_full_autonomous.md)
|
||||
- [MC_03 - Auto Manual Mix](../test_cards/mc_03_auto_manual_mix.md)
|
||||
@@ -32,3 +34,8 @@ These are run by the test team as part of release testing, and for more signific
|
||||
- [MC_08 - DSHOT ESC](../test_cards/mc_08_dshot.md)
|
||||
- [MC_09 - VIO (Visual-Inertial Odometry)](../test_cards/mc_09_vio.md)
|
||||
- [MC_10 - Optical Flow / GPS Mixed](../test_cards/mc_10_optical_flow_gps_mixed.md)
|
||||
|
||||
### Fixed Wing
|
||||
|
||||
- [FW_01 - Manual Modes](../test_cards/fw_01_manual_modes.md)
|
||||
- [FW_02 - Full Autonomous](../test_cards/fw_02_full_autonomous.md)
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
# Test FW_01 - Manual Modes
|
||||
|
||||
## Objective
|
||||
|
||||
To test that manual flight modes work as expected for fixed wing vehicles.
|
||||
|
||||
## Preflight
|
||||
|
||||
Ensure that the vehicle can go into Stabilized, Altitude, and Position mode while still on the ground.
|
||||
|
||||
## Flight Tests
|
||||
|
||||
❏ Stabilized
|
||||
|
||||
❏ Wings level with stick centered
|
||||
|
||||
❏ Pitch/Roll response with correct bank angle limits
|
||||
|
||||
❏ Yaw coordination
|
||||
|
||||
❏ Throttle response 1:1
|
||||
|
||||
❏ Altitude
|
||||
|
||||
❏ Altitude should hold current value with stick centered
|
||||
|
||||
❏ Pitch input controls climb/descend rate
|
||||
|
||||
❏ Throttle automatically managed to maintain airspeed
|
||||
|
||||
❏ Roll/Yaw respond correctly to stick movement
|
||||
|
||||
❏ Position
|
||||
|
||||
❏ Vehicle should hold current heading and loiter with stick centered
|
||||
|
||||
❏ Altitude should hold current value
|
||||
|
||||
❏ Roll input commands heading change
|
||||
|
||||
## Expected Results
|
||||
|
||||
- Takeoff should be smooth (hand launch or runway)
|
||||
- No oscillations should be present in any of the above flight modes
|
||||
- Vehicle should maintain stable flight throughout all mode transitions
|
||||
- Landing approach should be stable and controllable
|
||||
@@ -0,0 +1,64 @@
|
||||
# Test FW_02 - Full Autonomous
|
||||
|
||||
## Objective
|
||||
|
||||
To test the auto modes such as Mission, Takeoff, Hold, and RTL for fixed wing vehicles.
|
||||
|
||||
## Preflight
|
||||
|
||||
Plan a mission on the ground. Ensure the mission has:
|
||||
|
||||
- Takeoff as first waypoint
|
||||
- Changes in altitude throughout the mission
|
||||
- Last waypoint is an RTL
|
||||
- Duration of 1 to 2 minutes
|
||||
|
||||
## Flight Tests
|
||||
|
||||
❏ Takeoff
|
||||
|
||||
❏ Engage Takeoff mode (hand launch or runway)
|
||||
|
||||
❏ Vehicle should climb to takeoff altitude
|
||||
|
||||
❏ Vehicle should hold/loiter after reaching takeoff altitude
|
||||
|
||||
❏ Mission
|
||||
|
||||
❏ Auto takeoff (hand launch or runway)
|
||||
|
||||
❏ Verify changes in altitude throughout the mission
|
||||
|
||||
❏ Verify Mission Ends in RTL
|
||||
|
||||
❏ Duration of 1 to 2 minutes
|
||||
|
||||
❏ Auto land or hold at end
|
||||
|
||||
❏ Hold
|
||||
|
||||
❏ Engage Hold mode during flight
|
||||
|
||||
❏ Vehicle should orbit at current position and altitude
|
||||
|
||||
❏ Orbit radius and direction should match parameters
|
||||
|
||||
❏ RTL
|
||||
|
||||
❏ Arm and takeoff in any manual mode
|
||||
|
||||
❏ Fly out ~200m from start point
|
||||
|
||||
❏ Engage Return mode
|
||||
|
||||
❏ Vehicle should climb to RTL altitude if below it
|
||||
|
||||
❏ Vehicle should return to home and hold or land
|
||||
|
||||
## Expected Results
|
||||
|
||||
- Mission should upload on first attempt
|
||||
- Vehicle should automatically takeoff upon engaging Auto
|
||||
- Waypoint tracking should be smooth with appropriate turn radius
|
||||
- Vehicle should adjust height to RTL altitude before returning home
|
||||
- Landing approach should be stable (if auto-land is configured)
|
||||
@@ -172,6 +172,7 @@
|
||||
- [CUAV V5 nano (FMUv5)](flight_controller/cuav_v5_nano.md)
|
||||
- [CUAV V5 nano 배선 퀵 스타트](assembly/quick_start_cuav_v5_nano.md)
|
||||
- [CUAV X25 EVO](flight_controller/cuav_x25-evo.md)
|
||||
- [CUAV X25 EVO Wiring Quick Start](assembly/quick_start_cuav_x25_evo.md)
|
||||
- [CUAV X25 SUPER](flight_controller/cuav_x25-super.md)
|
||||
- [CubePilot Cube Orange+ (CubePilot)](flight_controller/cubepilot_cube_orangeplus.md)
|
||||
- [CubePilot Cube Orange (CubePilot)](flight_controller/cubepilot_cube_orange.md)
|
||||
|
||||
@@ -27,6 +27,8 @@ Supported flight controllers include:
|
||||
|
||||
- [ARK Electronics ARKV6X](../flight_controller/ark_v6x.md)
|
||||
- [CUAV Pixhawk V6X](../flight_controller/cuav_pixhawk_v6x.md)
|
||||
- [CUAV X25 EVO](../flight_controller/cuav_x25-evo.md)
|
||||
- [CUAV X25 SUPER](../flight_controller/cuav_x25-super.md)
|
||||
- [Holybro Pixhawk 5X](../flight_controller/pixhawk5x.md)
|
||||
- [Holybro Pixhawk 6X](../flight_controller/pixhawk6x.md)
|
||||
- [RaccoonLab FMUv6X Autopilot](../flight_controller/raccoonlab_fmu6x.md)
|
||||
|
||||
@@ -410,6 +410,7 @@ They recommend sensors, power systems, and other components from the same manufa
|
||||
- [CUAV Pixhawk V6X Wiring QuickStart](../assembly/quick_start_cuav_pixhawk_v6x.md)
|
||||
- [CUAV V5+ Wiring Quickstart](../assembly/quick_start_cuav_v5_plus.md)
|
||||
- [CUAV V5 nano Wiring Quickstart](../assembly/quick_start_cuav_v5_nano.md)
|
||||
- [CUAV X25 EVO Wiring Quickstart](../assembly/quick_start_cuav_x25_evo.md)
|
||||
- [Holybro Pixhawk 6C Wiring Quickstart](../assembly/quick_start_pixhawk6c.md)
|
||||
- [Holybro Pixhawk 6X Wiring Quickstart](../assembly/quick_start_pixhawk6x.md)
|
||||
- [Holybro Pixhawk 5X Wiring Quickstart](../assembly/quick_start_pixhawk5x.md)
|
||||
|
||||
@@ -0,0 +1,154 @@
|
||||
# CUAV X25 EVO Wiring Quick Start
|
||||
|
||||
:::warning
|
||||
PX4 does not manufacture this (or any) autopilot.
|
||||
Contact the [manufacturer](https://store.cuav.net/) for hardware support or compliance issues.
|
||||
:::
|
||||
|
||||
This quick start guide shows how to power the [X25 EVO](../flight_controller/cuav_x25-evo.md) flight controller and connect its most important peripherals.
|
||||
|
||||
:::info
|
||||
The following flight controller models are applicable to this quick start guide.
|
||||
[CUAV X25 SUPER](../flight_controller/cuav_x25-super.md)
|
||||
:::
|
||||
|
||||
## 배선 개요
|
||||
|
||||
아래의 이미지는 주요 센서와 주변 장치(모터 및 서보 출력 제외)들의 연결 방법을 설명합니다.
|
||||
다음 섹션에서 각 장치에 대하여 자세히 설명합니다.
|
||||
|
||||

|
||||
|
||||
| 인터페이스 | **Function** |
|
||||
| :----------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| POWER C1/C2 | Connect the PMU2 Lite to this port; this port is used for connecting the DroneCAN power module |
|
||||
| M1 ~ M16 | PWM signal output ports, usable for controlling motors or servos; support 3.3V/5V PWM configuration |
|
||||
| RC IN | Connect remote controller receivers with one-way protocols (e.g., SBUS/DSM/PPM). Note: ELRS/CRSF receivers should be connected to any serial port, not RC IN |
|
||||
| RSSI | For connecting signal strength feedback modules |
|
||||
| GPS&SAFETY | Connect Neo-series GPS or C-RTK-series RTK; this port includes interfaces for GPS, safety switch, and buzzer |
|
||||
| GPS2 | Usable for connecting additional GPS/RTK modules |
|
||||
| DEBUG (DSU) | For FMU chip debugging and reading debug device information; with ArduPilot firmware, it can be configured for other serial port functions |
|
||||
| ADC3V3 | For analog level signal detection; the maximum detectable level signal is 3.3V |
|
||||
| ADC6V6 | For analog level signal detection; the maximum detectable level signal is 6.6V (PX4 is not supported.) |
|
||||
| TF CARD | Insert an SD card here to enable log storage functionality |
|
||||
| ETH | Ethernet port, usable for connecting Ethernet devices such as companion computers |
|
||||
| I2C1/2/3 | Connect external I2C devices (e.g., external compasses) for communication between the controller and I2C devices |
|
||||
| TELEM1/TELEM2 | Connect telemetry modules (for data transmission) to enable MAVLINK data interaction |
|
||||
| CAN1/2 | For communication between the controller and DroneCAN devices (e.g., connecting NEO4 SE GPS) |
|
||||
| TYPE C | USB port of the controller, usable for connecting to the ground station, flashing firmware, and other operations |
|
||||
| SPI6 | SPI port for external expansion; generally not used |
|
||||
|
||||
## Vehicle Front
|
||||
|
||||
:::info
|
||||
If the controller cannot be mounted in the recommended/default orientation (e.g. due to space constraints) you will need to configure the autopilot software with the orientation that you actually used: [Flight Controller Orientation](../config/flight_controller_orientation.md).
|
||||
:::
|
||||
|
||||

|
||||
|
||||
## GPS + 나침반 + 부저 + 안전 스위치 + LED
|
||||
|
||||
We recommend using a CAN GPS/RTK (such as [Neo 4SE](https://store.cuav.net/shop/cuav-neo-4-se-gps-module/)); simply connect it to the **CAN 1** or **CAN 2** port.
|
||||
|
||||
You can also use a standard GPS/RTK module(such as [NEO3 GPS](https://store.cuav.net/shop/neo-3/) (10-pin connector)) by connecting it to the **GPS&SAFETY** port.
|
||||
Most commonly used GPS modules today integrate GPS, compass, safety switch, buzzer, and LED status light.
|
||||
|
||||
If you need to use assisted GPS, connect to the **GPS2** port.
|
||||
|
||||
The GPS/compass should be [mounted on the frame](../assembly/mount_gps_compass.md) as far away from other electronics as possible (separating the compass from other electronics will reduce interference), with the direction markings towards the front of the vehicle (the arrow on the NEO GPS should match the arrow on the flight controller).
|
||||
|
||||

|
||||
|
||||
:::info
|
||||
The GPS module's integrated safety switch is enabled _by default_ (when enabled, PX4 will not let you arm the vehicle).
|
||||
To disable the safety, press and hold the safety switch for 1 second.
|
||||
안전 스위치를 다시 눌러 안전 장치를 활성화하고 기체 시동을 끌 수 있습니다.
|
||||
조종기나 지상국 프로그램에서 기체 시동을 끌 수 없는 상황에서 유용합니다.
|
||||
:::
|
||||
|
||||
## 무선 조종
|
||||
|
||||
A remote control (RC) radio system is required if you want to _manually_ control your vehicle (PX4 does not require a radio system for autonomous flight modes).
|
||||
|
||||
You will need to [select a compatible transmitter/receiver](../getting_started/rc_transmitter_receiver.md) and then _bind_ them so that they communicate (read the instructions that come with your specific transmitter/receiver).
|
||||
|
||||
Connection methods vary by remote controller and receiver type:
|
||||
|
||||
### Android Remote Controllers
|
||||
|
||||
Take the H16 as an example:
|
||||
|
||||

|
||||
|
||||
Connect **TELEM1/TELEM2** to the UART0 port of the H16 remote controller, and link the H16’s SBUS pin to the **RC IN** port.
|
||||
|
||||
### SBUS/DSM/PPM Protocol Receivers
|
||||
|
||||

|
||||
|
||||
Use wires to connect the receiver to the **RC IN** port at the rear of the controller.
|
||||
|
||||
### ELRS/CRSF Receivers
|
||||
|
||||

|
||||
|
||||
Connect the [ELRS/CRSF](../telemetry/crsf_telemetry.md) receiver to any UART serial port of the X25 EVO (e.g., **TELEM2**).
|
||||
|
||||
## 전원
|
||||
|
||||
The X25 EVO comes standard with the PMU2 Lite power module, which supports 20–70V input and can measure a maximum current of 220A.
|
||||
It can be directly connected to the **Power C1/C2** port of the X25 EVO and is plug-and-play (no configuration required).
|
||||
|
||||

|
||||
|
||||
## Telemetry (Radio) System
|
||||
|
||||
[Telemetry system](../telemetry/index.md) allows you to communicate with the unmanned system via ground station software, enabling you to monitor and control the UAV’s status during flight. Connect the on-board unit of the telemetry system to the **TELEM1** or **TELEM2** port.
|
||||
|
||||
You can also purchase telemetry radios from the [CUAV store](https://store.cuav.net/uav-telemetry-module/).
|
||||
|
||||

|
||||
|
||||
## SD 카드
|
||||
|
||||
SD cards are highly recommended as they are required for [recording and analyzing flight details](../getting_started/flight_reporting.md), running tasks and using UAVCAN bus hardware.
|
||||
An SD card is already installed on X25 EVO when it leaves the factory.
|
||||
|
||||
:::tip
|
||||
For more information see [Basic Concepts > SD Cards (Removable Memory)](../getting_started/px4_basic_concepts.md#sd-cards-removable-memory).
|
||||
:::
|
||||
|
||||
## Motors/Servo
|
||||
|
||||
Motors/servos are connected to the **M1~M16** ports in the order specified for your vehicle in the [Airframe Reference](../airframes/airframe_reference.md).
|
||||
|
||||

|
||||
|
||||
## Servo Power Supply
|
||||
|
||||
The X25 EVO does not supply power to servos. If you need to power servos:
|
||||
|
||||
1. Connect a BEC to the positive and negative terminals of any column among **M1 ~ M16** (the positive and negative terminals of **M1 ~ M16** are interconnected).
|
||||
2. Then connect the servos to the same column.
|
||||
|
||||

|
||||
|
||||
:::info
|
||||
The power rail voltage must be appropriate for the servo being used!
|
||||
:::
|
||||
|
||||
## 기타 주변 장치
|
||||
|
||||
The wiring and configuration of optional/less common components is covered within the topics for individual [peripherals](../peripherals/index.md).
|
||||
|
||||
## 설정
|
||||
|
||||
General configuration information is covered in: [Autopilot Configuration](../config/index.md).
|
||||
|
||||
QuadPlane-specific configuration is covered here: [QuadPlane VTOL Configuration](../config_vtol/vtol_quad_configuration.md)
|
||||
|
||||
## 추가 정보
|
||||
|
||||
- [CUAV Docs](https://doc.cuav.net/) (CUAV)
|
||||
- [X25 EVO](../flight_controller/cuav_x25-evo.md) (PX4 Doc Overview page)
|
||||
- [X25 SUPER](../flight_controller/cuav_x25-super.md) (PX4 Doc Overview page)
|
||||
@@ -176,7 +176,7 @@ The fields are:
|
||||
|
||||
#### Flap Scale and Spoiler Scale Configuration
|
||||
|
||||
"Flap-control" and "Spoiler-control" are aerodynamic configurations that can either be commanded manually by the pilot (using RC, say), or are set automatically by the controller.
|
||||
"Flap-control" and "Spoiler-control" are aerodynamic configurations that can either be commanded manually by the pilot (using RC or a Joystick, say) (see [Flaps and Spoiler Control with Manual Control](#flaps-and-spoiler-control-with-manual-control)), or are set automatically by the controller.
|
||||
For example, a pilot or the landing system might engage "Spoiler-control" in order to reduce the airspeed before landing.
|
||||
|
||||
The configurations are an _abstract_ way for the controller to tell the allocator how much it should adjust the aerodynamic properties of the wings relative to the "full flaps" or "full spoiler" configuration (between `[0,1]`, where "1" indicates the full range).
|
||||
@@ -199,6 +199,20 @@ In the following example, the vehicle has two ailerons, one elevator, one rudder
|
||||
These are the elevator deflections added to compensate for the pitching moments generated by the flaps and spoiler actuators.
|
||||
In the case here the elevator would be deflected 0.3 up when the flaps are fully deployed to counteract the pitching down moment caused by the flaps.
|
||||
|
||||
#### Flaps and Spoiler Control with Manual Control
|
||||
|
||||
The preferred method to manually actuate spoilers and flaps is to map a manual control switch to an `AUX` output (see [Generic Actuator Control with RC](#generic-actuator-control-with-rc)), and then map that AUX output to the flap or spoiler function using [FW_FLAPS_MAN](../advanced_config/parameter_reference.md#FW_FLAPS_MAN) or [FW_SPOILERS_MAN](../advanced_config/parameter_reference.md#FW_SPOILERS_MAN).
|
||||
The source for the manual control can be RC or MAVLink.
|
||||
|
||||
:::warning
|
||||
The following method is not recommended, and will be removed in a future release.
|
||||
If using it you should migrate to using the AUX-based method.
|
||||
|
||||
It is also possible to define a flaps channel directly on the RC using [RC_MAP_FLAPS](../advanced_config/parameter_reference.md#RC_MAP_FLAPS).
|
||||
This channel can also be used to control the spoilers by setting [FW_SPOILERS_MAN](../advanced_config/parameter_reference.md#FW_SPOILERS_MAN) to `Flaps channel`.
|
||||
This method is not possible when the source for the manual control is MAVLink.
|
||||
:::
|
||||
|
||||
#### 액추에이터 롤, 피치 및 요 스케일링
|
||||
|
||||
:::info
|
||||
|
||||
@@ -314,23 +314,24 @@ The failure detector is active in all vehicle types and modes, except for those
|
||||
|
||||
### Motor Failure Trigger
|
||||
|
||||
The failure detector can be configured to detect a motor failure while armed (and trigger an associated action) in the following conditions:
|
||||
The failure detector can be configured to detect a motor failure while armed (and trigger an associated action) if the ESC current falls outside expected bounds for more than [MOTFAIL_TIME](#MOTFAIL_TIME) seconds.
|
||||
Motor failures are non-latching: if the failure condition clears, the failure is cleared.
|
||||
|
||||
- A 300 ms timeout occurs in telemetry from an ESC that was previously available.
|
||||
- The input current in the telemetry of an ESC which was previously positive gets too low for more than [`FD_ACT_MOT_TOUT`](FD_ACT_MOT_TOUT) ms.
|
||||
The "too low" condition is defined by:
|
||||
The undercurrent and overcurrent conditions are defined by:
|
||||
|
||||
```text
|
||||
{esc current} < {parameter FD_ACT_MOT_C2T} * {motor command between 0 and 1}
|
||||
```
|
||||
```text
|
||||
undercurrent: {esc current} < {MOTFAIL_C2T} * {motor command [0,1]} - {MOTFAIL_LOW_OFF}
|
||||
overcurrent: {esc current} > {MOTFAIL_C2T} * {motor command [0,1]} + {MOTFAIL_HIGH_OFF}
|
||||
```
|
||||
|
||||
| 매개변수 | 설명 |
|
||||
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| <a id="FD_ACT_EN"></a>[FD_ACT_EN](../advanced_config/parameter_reference.md#FD_ACT_EN) | Enable/disable the motor failure trigger completely. |
|
||||
| <a id="FD_ACT_MOT_THR"></a>[FD_ACT_MOT_THR](../advanced_config/parameter_reference.md#FD_ACT_MOT_THR) | Minimum normalized [0,1] motor command below which motor under current is ignored. |
|
||||
| <a id="FD_ACT_MOT_C2T"></a>[FD_ACT_MOT_C2T](../advanced_config/parameter_reference.md#FD_ACT_MOT_C2T) | Scale between normalized [0,1] motor command and expected minimally reported current when the rotor is healthy. |
|
||||
| <a id="FD_ACT_MOT_TOUT"></a>[FD_ACT_MOT_TOUT](../advanced_config/parameter_reference.md#FD_ACT_MOT_TOUT) | Time in milliseconds for which the under current detection condition needs to stay true. |
|
||||
| <a id="CA_FAILURE_MODE"></a>[CA_FAILURE_MODE](../advanced_config/parameter_reference.md#CA_FAILURE_MODE) | Configure to not only warn about a motor failure but remove the first motor that detects a failure from the allocation effectiveness which turns off the motor and tries to operate the vehicle without it until disarming the next time. |
|
||||
| 매개변수 | 설명 |
|
||||
| ----------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| <a id="FD_ACT_EN"></a>[FD_ACT_EN](../advanced_config/parameter_reference.md#FD_ACT_EN) | Enable/disable the motor failure trigger completely. |
|
||||
| <a id="MOTFAIL_C2T"></a>[MOTFAIL_C2T](../advanced_config/parameter_reference.md#MOTFAIL_C2T) | Slope between normalized motor command [0–1] and expected steady-state current (FD_ACT_MOT_C2T at 100%) (A/%). |
|
||||
| <a id="MOTFAIL_LOW_OFF"></a>[MOTFAIL_LOW_OFF](../advanced_config/parameter_reference.md#MOTFAIL_LOW_OFF) | Undercurrent detection threshold offset (A). Subtracted from the expected current to form the lower bound. |
|
||||
| <a id="MOTFAIL_HIGH_OFF"></a>[MOTFAIL_HIGH_OFF](../advanced_config/parameter_reference.md#MOTFAIL_HIGH_OFF) | Overcurrent detection threshold offset (A). Added to the expected current to form the upper bound. |
|
||||
| <a id="MOTFAIL_TIME"></a>[MOTFAIL_TIME](../advanced_config/parameter_reference.md#MOTFAIL_TIME) | Hysteresis time (s) for which the current threshold must remain exceeded before a motor failure is triggered. |
|
||||
| <a id="CA_FAILURE_MODE"></a>[CA_FAILURE_MODE](../advanced_config/parameter_reference.md#CA_FAILURE_MODE) | Configure to not only warn about a motor failure but remove the first motor that detects a failure from the allocation effectiveness which turns off the motor and tries to operate the vehicle without it until disarming the next time. |
|
||||
|
||||
### 외부 자동 작동 시스템 (ATS)
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ This category includes boards that are not fully compliant with the pixhawk stan
|
||||
- [CUAV V5+](../flight_controller/cuav_v5_plus.md) (FMUv5)
|
||||
- [CUAV V5 nano](../flight_controller/cuav_v5_nano.md) (FMUv5)
|
||||
- [CUAV X25 EVO](../flight_controller/cuav_x25-evo.md)
|
||||
[CUAV X25 SUPER](../flight_controller/cuav_x25-super.md)
|
||||
- [CUAV X25 SUPER](../flight_controller/cuav_x25-super.md)
|
||||
- [CubePilot Cube Orange+](../flight_controller/cubepilot_cube_orangeplus.md)
|
||||
- [CubePilot Cube Orange](../flight_controller/cubepilot_cube_orange.md)
|
||||
- [CubePilot Cube Yellow](../flight_controller/cubepilot_cube_yellow.md)
|
||||
|
||||
@@ -9,7 +9,7 @@ The _X25-EVO_ is an advanced autopilot manufactured by CUAV<sup>®</sup>.
|
||||
|
||||
The autopilot is recommended for commercial system integration but is also suitable for academic research and any other applications.
|
||||
|
||||

|
||||

|
||||
|
||||
The X25-EVO brings you ultimate performance, stability, and reliability in every aspect.
|
||||
|
||||
@@ -19,12 +19,17 @@ The X25-EVO brings you ultimate performance, stability, and reliability in every
|
||||
|
||||
### 특징
|
||||
|
||||
- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory. Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models.
|
||||
- Automotive-grade RM3100 compass. Designed for better stability and anti-interference capability.
|
||||
- Triple-redundant IMUs and dual-redundant barometers located on separate buses. If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability.
|
||||
- Independent LDO power control supplies power to each sensor group. A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle.
|
||||
- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory.
|
||||
Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models.
|
||||
- Automotive-grade RM3100 compass.
|
||||
Designed for better stability and anti-interference capability.
|
||||
- Triple-redundant IMUs and dual-redundant barometers located on separate buses.
|
||||
If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability.
|
||||
- Independent LDO power control supplies power to each sensor group.
|
||||
A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle.
|
||||
- Integrated Microchip Ethernet PHY for high-speed communication with onboard devices like mission computers via Ethernet.
|
||||
- Dual temperature compensation systems, located on the IMU board and FMU board respectively. Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs.
|
||||
- Dual temperature compensation systems, located on the IMU board and FMU board respectively.
|
||||
Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs.
|
||||
- PWM servo output voltage switchable between 3.3V or 5V.
|
||||
- Modular design for DIY carrier boards.
|
||||
|
||||
@@ -33,7 +38,7 @@ The X25-EVO brings you ultimate performance, stability, and reliability in every
|
||||
- Main Processor: STM32H743XI
|
||||
- 32-bit Arm® Cortex®-M7, 480MHz, 2MB Flash, 1MB RAM
|
||||
- Onboard Sensors:
|
||||
- Accel/Gyro: IIM42652\*2
|
||||
- Accel/Gyro: IIM42652 (x2)
|
||||
- Accel/Gyro: IIM42653
|
||||
- 자력계 : RM3100
|
||||
- Barometer: BMP581
|
||||
@@ -47,14 +52,14 @@ The X25-EVO brings you ultimate performance, stability, and reliability in every
|
||||
- Servo Rail Input: 0~9.9V
|
||||
- Rated Current:
|
||||
- Total Output Max Current: 10A
|
||||
- TELEM1 and TELEM2 Output Current limiter: 4A
|
||||
- CAN1 and CAN2 Output Current limiter: 2.4A
|
||||
- `TELEM1` and `TELEM2` Output Current limiter: 4A
|
||||
- `CAN1` and `CAN2` Output Current limiter: 2.4A
|
||||
- Other Ports Output Current limiter: 1.5A
|
||||
|
||||
### 인터페이스
|
||||
|
||||
- 16x PWM Servo Outputs
|
||||
- 1x Dedicated R/C Input for Spektrum / DSM and S.Bus
|
||||
- 1x Dedicated R/C Input(`RC IN`) for Spektrum / DSM and S.Bus
|
||||
- 1x Analog/PWM RSSI Input
|
||||
- 2x TELEM Ports (with full flow control)
|
||||
- 1x UART4 Port
|
||||
@@ -83,7 +88,12 @@ The X25-EVO brings you ultimate performance, stability, and reliability in every
|
||||
|
||||
### 기계식 부품
|
||||
|
||||
- Not provided.
|
||||
- 중량
|
||||
- Flight Controller Module: 110g
|
||||
- Operating & storage temperature: -20 ~ 85°C
|
||||
- Dimensions:
|
||||
|
||||

|
||||
|
||||
## Purchase Channels {#store}
|
||||
|
||||
@@ -91,11 +101,11 @@ Order from [CUAV](https://store.cuav.net/).
|
||||
|
||||
## 조립 및 설정
|
||||
|
||||
- Not provided.
|
||||
The [X25 EVO Wiring Quick Start](../assembly/quick_start_cuav_x25_evo.md) provides instructions on how to assemble required/important peripherals including GPS, Power Module etc.
|
||||
|
||||
## Pin Definitions
|
||||
## 핀배열
|
||||
|
||||
- Not provided.
|
||||

|
||||
|
||||
## 시리얼 포트 매핑
|
||||
|
||||
@@ -106,12 +116,34 @@ Order from [CUAV](https://store.cuav.net/).
|
||||
| USART3 | /dev/ttyS2 | 디버그 콘솔 |
|
||||
| UART4 | /dev/ttyS3 | UART4 |
|
||||
| UART5 | /dev/ttyS4 | TELEM2 |
|
||||
| USART6 | /dev/ttyS5 | RC |
|
||||
| USART6 | /dev/ttyS5 | RC IN |
|
||||
| UART7 | /dev/ttyS6 | TELEM1 |
|
||||
|
||||
## PWM Outputs {#pwm_outputs}
|
||||
|
||||
This flight controller supports up to 16 FMU PWM outputs (MAIN).
|
||||
|
||||
Outputs:
|
||||
|
||||
- Outputs 1-8 support [DShot](../peripherals/dshot.md).
|
||||
- Outputs 9-16 do not support DShot.
|
||||
- Outputs 1-7 support [Bidirectional DShot](../peripherals/dshot.md#bidirectional-dshot-telemetry).
|
||||
- Output 8 supports Bidirectional DShot output only (no eRPM capture).
|
||||
|
||||
The 16 outputs are in 5 groups:
|
||||
|
||||
- Outputs 1-4 in group1 (Timer5)
|
||||
- Outputs 5-8 in group2 (Timer4)
|
||||
- Outputs 9-11 in group3 (Timer1)
|
||||
- Outputs 12-14 in group4 (Timer8)
|
||||
- Outputs 15-16 in group5 (Timer12)
|
||||
|
||||
All outputs within the same group must use the same output protocol and rate.
|
||||
|
||||
## 정격 전압
|
||||
|
||||
The _X25-EVO_ achieves triple redundancy on power supplies if three power sources are provided. The three power rails are POWERC1, POWERC2, and USB.
|
||||
The _X25-EVO_ achieves triple redundancy on power supplies if three power sources are provided.
|
||||
The three power rails are `POWERC1`, `POWERC2`, and `USB`.
|
||||
|
||||
- **POWER C1** and **POWER C2** are DroneCAN/UAVCAN battery interfaces.
|
||||
|
||||
@@ -154,7 +186,8 @@ The [PX4 System Console](../debug/system_console.md) and [SWD Interface](../debu
|
||||
|
||||
## 지원 플랫폼 및 기체
|
||||
|
||||
Any multirotor/airplane/rover or boat that can be controlled using normal RC servos or Futaba S-Bus servos. The complete set of supported configurations can be found in the [Airframe Reference](../airframes/airframe_reference.md).
|
||||
일반 RC 서보 또는 Futaba S-Bus 서보로 제어 가능한 모든 멀티콥터/비행기/로버 또는 보트.
|
||||
The complete set of supported configurations can be seen in the [Airframes Reference](../airframes/airframe_reference.md).
|
||||
|
||||
## 추가 정보
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# CUAV X25-SUPER
|
||||
|
||||
<Badge type="tip" text="PX4 v1.18)" />
|
||||
<Badge type="tip" text="PX4 v1.18" />
|
||||
|
||||
:::warning
|
||||
PX4 does not manufacture this (or any) autopilot.
|
||||
@@ -21,12 +21,17 @@ The X25-SUPER brings you ultimate performance, stability, and reliability in eve
|
||||
|
||||
### 특징
|
||||
|
||||
- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory. Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models.
|
||||
- Automotive-grade RM3100 compass. Designed for better stability and anti-interference capability.
|
||||
- Triple-redundant IMUs and dual-redundant barometers located on separate buses. If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability.
|
||||
- Independent LDO power control supplies power to each sensor group. A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle.
|
||||
- Arm® Cortex-M7® processor (STM32H743XI) with Floating-Point Unit (FPU), operating at 480MHz, and featuring 2MB Flash memory.
|
||||
Enables developers to enhance productivity and efficiency, allowing for more complex algorithms and models.
|
||||
- Automotive-grade RM3100 compass.
|
||||
Designed for better stability and anti-interference capability.
|
||||
- Triple-redundant IMUs and dual-redundant barometers located on separate buses.
|
||||
If the PX4 autopilot detects a sensor failure, the system seamlessly switches to another sensor to maintain flight control reliability.
|
||||
- Independent LDO power control supplies power to each sensor group.
|
||||
A vibration isolation system filters high-frequency vibrations and reduces noise to ensure accurate readings, enabling better overall flight performance for the vehicle.
|
||||
- Integrated Microchip Ethernet PHY for high-speed communication with onboard devices like mission computers via Ethernet.
|
||||
- Dual temperature compensation systems, located on the IMU board and FMU board respectively. Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs.
|
||||
- Dual temperature compensation systems, located on the IMU board and FMU board respectively.
|
||||
Temperature is controlled by onboard heating resistors to achieve the optimal operating temperature for the IMUs.
|
||||
- PWM servo output voltage switchable between 3.3V or 5V.
|
||||
- Modular design for DIY carrier boards.
|
||||
|
||||
@@ -50,14 +55,14 @@ The X25-SUPER brings you ultimate performance, stability, and reliability in eve
|
||||
- Servo Rail Input: 0~9.9V
|
||||
- Rated Current:
|
||||
- Total Output Max Current: 10A
|
||||
- TELEM1 and TELEM2 Output Current limiter: 4A
|
||||
- CAN1 and CAN2 Output Current limiter: 2.4A
|
||||
- `TELEM1` and `TELEM2` Output Current limiter: 4A
|
||||
- `CAN1` and `CAN2` Output Current limiter: 2.4A
|
||||
- Other Ports Output Current limiter: 1.5A
|
||||
|
||||
### 인터페이스
|
||||
|
||||
- 16x PWM Servo Outputs
|
||||
- 1x Dedicated R/C Input for Spektrum / DSM and S.Bus
|
||||
- 1x Dedicated R/C Input(`RC IN`) for Spektrum / DSM and S.Bus
|
||||
- 1x Analog/PWM RSSI Input
|
||||
- 2x TELEM Ports (with full flow control)
|
||||
- 1x UART4 Port
|
||||
@@ -80,16 +85,15 @@ The X25-SUPER brings you ultimate performance, stability, and reliability in eve
|
||||
- DroneCAN/UAVCAN Power Input
|
||||
- 2x AD Ports
|
||||
- Analog Input (3.3V)
|
||||
- Analog Input (6.6V - not supported)
|
||||
- Analog Input (6.6V - not supported by PX4)
|
||||
- 1x Dedicated Debug Port
|
||||
- FMU Debug
|
||||
|
||||
### 기계식 부품
|
||||
|
||||
- Size
|
||||
- Flight controller
|
||||
- Dimensions:
|
||||
|
||||

|
||||

|
||||
|
||||
## Purchase Channels {#store}
|
||||
|
||||
@@ -97,7 +101,7 @@ Order from [CUAV](https://store.cuav.net/).
|
||||
|
||||
## 조립 및 설정
|
||||
|
||||
- Not provided.
|
||||
The [X25 SUPER Wiring Quick Start](../assembly/quick_start_cuav_x25_evo.md) provides instructions on how to assemble required/important peripherals including GPS, Power Module etc.
|
||||
|
||||
## 핀배열
|
||||
|
||||
@@ -113,7 +117,7 @@ Order from [CUAV](https://store.cuav.net/).
|
||||
| USART3 | /dev/ttyS2 | 디버그 콘솔 |
|
||||
| UART4 | /dev/ttyS3 | UART4 |
|
||||
| UART5 | /dev/ttyS4 | TELEM2 |
|
||||
| USART6 | /dev/ttyS5 | RC |
|
||||
| USART6 | /dev/ttyS5 | RC IN |
|
||||
| UART7 | /dev/ttyS6 | TELEM1 |
|
||||
|
||||
## RC Input
|
||||
@@ -122,7 +126,8 @@ The RC input pin is directly connected to the FMU UART6 TX.
|
||||
|
||||
## 정격 전압
|
||||
|
||||
The _X25-SUPER_ achieves triple redundancy on power supplies if three power sources are provided. The three power rails are POWERC1, POWERC2, and USB.
|
||||
The _X25-SUPER_ achieves triple redundancy on power supplies if three power sources are provided.
|
||||
The three power rails are `POWERC1`, `POWERC2`, and `USB`.
|
||||
|
||||
- **POWER C1** and **POWER C2** are DroneCAN/UAVCAN battery interfaces.
|
||||
|
||||
@@ -140,13 +145,13 @@ Digital DroneCAN/UAVCAN battery monitoring is enabled by default.
|
||||
## 펌웨어 빌드
|
||||
|
||||
:::tip
|
||||
Most users will not need to build this firmware from PX4 v1.18.
|
||||
Most users will not need to build this firmware (from PX4 v1.18).
|
||||
It is pre-built and automatically installed by _QGroundControl_ when appropriate hardware is connected.
|
||||
:::
|
||||
|
||||
To [build PX4](../dev_setup/building_px4.md) for this target, execute:
|
||||
|
||||
```
|
||||
```sh
|
||||
make cuav_x25-super_default
|
||||
```
|
||||
|
||||
|
||||
@@ -159,7 +159,7 @@ Runs after the package is installed. Common tasks:
|
||||
- Board-specific setup (e.g., DSP signature generation)
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
# Create px4-* symlinks
|
||||
@@ -185,7 +185,7 @@ fi
|
||||
Runs before the package is removed:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
# Stop the service
|
||||
|
||||
@@ -70,3 +70,19 @@ The command line and GUI interfaces are shown below.
|
||||
### menuconfig Command Line Interface
|
||||
|
||||

|
||||
|
||||
## Fortified Toolchain Compatibility
|
||||
|
||||
Some toolchains define `_FORTIFY_SOURCE` by default. Those toolchains generally require some optimization, which means PX4 configurations that use `-O0` may fail.
|
||||
|
||||
PX4 keeps the default debug optimization unchanged unless you explicitly opt in. To switch `PX4_DEBUG_OPT_LEVEL` from `-O0` to `-Og`, enable:
|
||||
|
||||
- `Toolchain > Fortified toolchain support`
|
||||
|
||||
This is the Kconfig symbol:
|
||||
|
||||
```sh
|
||||
CONFIG_BOARD_SUPPORT_FORTIFIED_TOOLCHAIN=y
|
||||
```
|
||||
|
||||
You can set it either in `boardconfig`/`boardguiconfig` or directly in your board's `*.px4board` file.
|
||||
|
||||
@@ -96,206 +96,208 @@ They are not build into the module, and hence are neither published or subscribe
|
||||
:::details
|
||||
See messages
|
||||
|
||||
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
|
||||
- [CameraStatus](../msg_docs/CameraStatus.md)
|
||||
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
|
||||
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
|
||||
- [RcParameterMap](../msg_docs/RcParameterMap.md)
|
||||
- [Rpm](../msg_docs/Rpm.md)
|
||||
- [EscStatus](../msg_docs/EscStatus.md)
|
||||
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
|
||||
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
|
||||
- [RadioStatus](../msg_docs/RadioStatus.md)
|
||||
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
|
||||
- [SensorAirflow](../msg_docs/SensorAirflow.md)
|
||||
- [LedControl](../msg_docs/LedControl.md)
|
||||
- [HealthReport](../msg_docs/HealthReport.md)
|
||||
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
|
||||
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
|
||||
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
|
||||
- [GpsInjectData](../msg_docs/GpsInjectData.md)
|
||||
- [NeuralControl](../msg_docs/NeuralControl.md)
|
||||
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
|
||||
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
|
||||
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
|
||||
- [RtlStatus](../msg_docs/RtlStatus.md)
|
||||
- [DebugValue](../msg_docs/DebugValue.md)
|
||||
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
|
||||
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
|
||||
- [PpsCapture](../msg_docs/PpsCapture.md)
|
||||
- [RcChannels](../msg_docs/RcChannels.md)
|
||||
- [SensorMag](../msg_docs/SensorMag.md)
|
||||
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
|
||||
- [DeviceInformation](../msg_docs/DeviceInformation.md)
|
||||
- [FollowTarget](../msg_docs/FollowTarget.md)
|
||||
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
|
||||
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
|
||||
- [Mission](../msg_docs/Mission.md)
|
||||
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
|
||||
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
|
||||
- [VehicleRoi](../msg_docs/VehicleRoi.md)
|
||||
- [InputRc](../msg_docs/InputRc.md)
|
||||
- [GimbalControls](../msg_docs/GimbalControls.md)
|
||||
- [SystemPower](../msg_docs/SystemPower.md)
|
||||
- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
|
||||
- [ActuatorTest](../msg_docs/ActuatorTest.md)
|
||||
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
|
||||
- [VehicleImu](../msg_docs/VehicleImu.md)
|
||||
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
|
||||
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
|
||||
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
|
||||
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
|
||||
- [Cpuload](../msg_docs/Cpuload.md)
|
||||
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
|
||||
- [TuneControl](../msg_docs/TuneControl.md)
|
||||
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
|
||||
- [DebugVect](../msg_docs/DebugVect.md)
|
||||
- [TecsStatus](../msg_docs/TecsStatus.md)
|
||||
- [ButtonEvent](../msg_docs/ButtonEvent.md)
|
||||
- [DebugArray](../msg_docs/DebugArray.md)
|
||||
- [VelocityLimits](../msg_docs/VelocityLimits.md)
|
||||
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
|
||||
- [SensorUwb](../msg_docs/SensorUwb.md)
|
||||
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
|
||||
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
|
||||
- [MavlinkLog](../msg_docs/MavlinkLog.md)
|
||||
- [SensorsStatus](../msg_docs/SensorsStatus.md)
|
||||
- [HomePositionV0](../msg_docs/HomePositionV0.md)
|
||||
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
|
||||
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
|
||||
- [EventV0](../msg_docs/EventV0.md)
|
||||
- [EstimatorStates](../msg_docs/EstimatorStates.md)
|
||||
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
|
||||
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
|
||||
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
|
||||
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
|
||||
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
|
||||
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
|
||||
- [VehicleAirData](../msg_docs/VehicleAirData.md)
|
||||
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
|
||||
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
|
||||
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
|
||||
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
|
||||
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
|
||||
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
|
||||
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
|
||||
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
|
||||
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
|
||||
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
|
||||
- [MagWorkerData](../msg_docs/MagWorkerData.md)
|
||||
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
|
||||
- [Vtx](../msg_docs/Vtx.md)
|
||||
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
|
||||
- [Gripper](../msg_docs/Gripper.md)
|
||||
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
|
||||
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
|
||||
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
|
||||
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
|
||||
- [GeofenceResult](../msg_docs/GeofenceResult.md)
|
||||
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
|
||||
- [BatteryInfo](../msg_docs/BatteryInfo.md)
|
||||
- [ActionRequest](../msg_docs/ActionRequest.md)
|
||||
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
|
||||
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
|
||||
- [EstimatorBias](../msg_docs/EstimatorBias.md)
|
||||
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
|
||||
- [Ping](../msg_docs/Ping.md)
|
||||
- [GainCompression](../msg_docs/GainCompression.md)
|
||||
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
|
||||
- [VehicleStatusV2](../msg_docs/VehicleStatusV2.md)
|
||||
- [RaptorInput](../msg_docs/RaptorInput.md)
|
||||
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
|
||||
- [Event](../msg_docs/Event.md)
|
||||
- [GpioConfig](../msg_docs/GpioConfig.md)
|
||||
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
|
||||
- [RaptorStatus](../msg_docs/RaptorStatus.md)
|
||||
- [GpioOut](../msg_docs/GpioOut.md)
|
||||
- [SensorAccel](../msg_docs/SensorAccel.md)
|
||||
- [SensorTemp](../msg_docs/SensorTemp.md)
|
||||
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
|
||||
- [PowerButtonState](../msg_docs/PowerButtonState.md)
|
||||
- [OrbTest](../msg_docs/OrbTest.md)
|
||||
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
|
||||
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
|
||||
- [DatamanRequest](../msg_docs/DatamanRequest.md)
|
||||
- [EscEepromRead](../msg_docs/EscEepromRead.md)
|
||||
- [OrbitStatus](../msg_docs/OrbitStatus.md)
|
||||
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
|
||||
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
|
||||
- [CameraTrigger](../msg_docs/CameraTrigger.md)
|
||||
- [QshellRetval](../msg_docs/QshellRetval.md)
|
||||
- [NavigatorStatus](../msg_docs/NavigatorStatus.md)
|
||||
- [CameraCapture](../msg_docs/CameraCapture.md)
|
||||
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
|
||||
- [DatamanResponse](../msg_docs/DatamanResponse.md)
|
||||
- [OpenDroneIdSystem](../msg_docs/OpenDroneIdSystem.md)
|
||||
- [VehicleOpticalFlow](../msg_docs/VehicleOpticalFlow.md)
|
||||
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
|
||||
- [EstimatorAidSource3d](../msg_docs/EstimatorAidSource3d.md)
|
||||
- [SatelliteInfo](../msg_docs/SatelliteInfo.md)
|
||||
- [GimbalDeviceInformation](../msg_docs/GimbalDeviceInformation.md)
|
||||
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
|
||||
- [GeofenceResult](../msg_docs/GeofenceResult.md)
|
||||
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
|
||||
- [QshellReq](../msg_docs/QshellReq.md)
|
||||
- [VehicleCommandAckV0](../msg_docs/VehicleCommandAckV0.md)
|
||||
- [VehicleImu](../msg_docs/VehicleImu.md)
|
||||
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
|
||||
- [EstimatorSensorBias](../msg_docs/EstimatorSensorBias.md)
|
||||
- [GpioRequest](../msg_docs/GpioRequest.md)
|
||||
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
|
||||
- [ParameterResetRequest](../msg_docs/ParameterResetRequest.md)
|
||||
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
|
||||
- [CameraStatus](../msg_docs/CameraStatus.md)
|
||||
- [UavcanParameterRequest](../msg_docs/UavcanParameterRequest.md)
|
||||
- [VehicleStatusV1](../msg_docs/VehicleStatusV1.md)
|
||||
- [MountOrientation](../msg_docs/MountOrientation.md)
|
||||
- [Gripper](../msg_docs/Gripper.md)
|
||||
- [RtlStatus](../msg_docs/RtlStatus.md)
|
||||
- [PositionSetpoint](../msg_docs/PositionSetpoint.md)
|
||||
- [GpsInjectData](../msg_docs/GpsInjectData.md)
|
||||
- [Cpuload](../msg_docs/Cpuload.md)
|
||||
- [SensorAccelFifo](../msg_docs/SensorAccelFifo.md)
|
||||
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
|
||||
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
|
||||
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
|
||||
- [HealthReport](../msg_docs/HealthReport.md)
|
||||
- [DatamanRequest](../msg_docs/DatamanRequest.md)
|
||||
- [FailureDetectorStatus](../msg_docs/FailureDetectorStatus.md)
|
||||
- [RangingBeacon](../msg_docs/RangingBeacon.md)
|
||||
- [AirspeedWind](../msg_docs/AirspeedWind.md)
|
||||
- [VelocityLimits](../msg_docs/VelocityLimits.md)
|
||||
- [SensorGyro](../msg_docs/SensorGyro.md)
|
||||
- [GimbalControls](../msg_docs/GimbalControls.md)
|
||||
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
|
||||
- [YawEstimatorStatus](../msg_docs/YawEstimatorStatus.md)
|
||||
- [NeuralControl](../msg_docs/NeuralControl.md)
|
||||
- [DebugArray](../msg_docs/DebugArray.md)
|
||||
- [WheelEncoders](../msg_docs/WheelEncoders.md)
|
||||
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
|
||||
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
|
||||
- [NormalizedUnsignedSetpoint](../msg_docs/NormalizedUnsignedSetpoint.md)
|
||||
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
|
||||
- [SensorGnssRelative](../msg_docs/SensorGnssRelative.md)
|
||||
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
|
||||
- [GpioOut](../msg_docs/GpioOut.md)
|
||||
- [OpenDroneIdSelfId](../msg_docs/OpenDroneIdSelfId.md)
|
||||
- [RaptorStatus](../msg_docs/RaptorStatus.md)
|
||||
- [VehicleGlobalPositionV0](../msg_docs/VehicleGlobalPositionV0.md)
|
||||
- [OrbTestLarge](../msg_docs/OrbTestLarge.md)
|
||||
- [MissionResult](../msg_docs/MissionResult.md)
|
||||
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
|
||||
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
|
||||
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
|
||||
- [IrlockReport](../msg_docs/IrlockReport.md)
|
||||
- [PowerMonitor](../msg_docs/PowerMonitor.md)
|
||||
- [ArmingCheckRequestV0](../msg_docs/ArmingCheckRequestV0.md)
|
||||
- [Ping](../msg_docs/Ping.md)
|
||||
- [DeviceInformation](../msg_docs/DeviceInformation.md)
|
||||
- [VehicleStatusV2](../msg_docs/VehicleStatusV2.md)
|
||||
- [EstimatorStatus](../msg_docs/EstimatorStatus.md)
|
||||
- [HeaterStatus](../msg_docs/HeaterStatus.md)
|
||||
- [SensorMag](../msg_docs/SensorMag.md)
|
||||
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
|
||||
- [EscEepromRead](../msg_docs/EscEepromRead.md)
|
||||
- [TecsStatus](../msg_docs/TecsStatus.md)
|
||||
- [UlogStream](../msg_docs/UlogStream.md)
|
||||
- [ParameterSetValueRequest](../msg_docs/ParameterSetValueRequest.md)
|
||||
- [VehicleConstraints](../msg_docs/VehicleConstraints.md)
|
||||
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
|
||||
- [VehicleImuStatus](../msg_docs/VehicleImuStatus.md)
|
||||
- [SensorBaro](../msg_docs/SensorBaro.md)
|
||||
- [SensorsStatus](../msg_docs/SensorsStatus.md)
|
||||
- [TrajectorySetpoint6dof](../msg_docs/TrajectorySetpoint6dof.md)
|
||||
- [IridiumsbdStatus](../msg_docs/IridiumsbdStatus.md)
|
||||
- [Mission](../msg_docs/Mission.md)
|
||||
- [VehicleLocalPositionV0](../msg_docs/VehicleLocalPositionV0.md)
|
||||
- [EscStatus](../msg_docs/EscStatus.md)
|
||||
- [AutotuneAttitudeControlStatus](../msg_docs/AutotuneAttitudeControlStatus.md)
|
||||
- [CameraCapture](../msg_docs/CameraCapture.md)
|
||||
- [ManualControlSwitches](../msg_docs/ManualControlSwitches.md)
|
||||
- [ActionRequest](../msg_docs/ActionRequest.md)
|
||||
- [InternalCombustionEngineStatus](../msg_docs/InternalCombustionEngineStatus.md)
|
||||
- [LogMessage](../msg_docs/LogMessage.md)
|
||||
- [SensorGyroFifo](../msg_docs/SensorGyroFifo.md)
|
||||
- [FigureEightStatus](../msg_docs/FigureEightStatus.md)
|
||||
- [VehicleMagnetometer](../msg_docs/VehicleMagnetometer.md)
|
||||
- [ActuatorTest](../msg_docs/ActuatorTest.md)
|
||||
- [SensorGnssStatus](../msg_docs/SensorGnssStatus.md)
|
||||
- [TaskStackInfo](../msg_docs/TaskStackInfo.md)
|
||||
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
|
||||
- [AirspeedWind](../msg_docs/AirspeedWind.md)
|
||||
- [PositionControllerLandingStatus](../msg_docs/PositionControllerLandingStatus.md)
|
||||
- [PwmInput](../msg_docs/PwmInput.md)
|
||||
- [GeofenceStatus](../msg_docs/GeofenceStatus.md)
|
||||
- [IrlockReport](../msg_docs/IrlockReport.md)
|
||||
- [QshellReq](../msg_docs/QshellReq.md)
|
||||
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
|
||||
- [ParameterSetUsedRequest](../msg_docs/ParameterSetUsedRequest.md)
|
||||
- [ConfigOverridesV0](../msg_docs/ConfigOverridesV0.md)
|
||||
- [SensorCorrection](../msg_docs/SensorCorrection.md)
|
||||
- [CellularStatus](../msg_docs/CellularStatus.md)
|
||||
- [UlogStream](../msg_docs/UlogStream.md)
|
||||
- [GpioIn](../msg_docs/GpioIn.md)
|
||||
- [SensorGyroFft](../msg_docs/SensorGyroFft.md)
|
||||
- [WheelEncoders](../msg_docs/WheelEncoders.md)
|
||||
- [EscReport](../msg_docs/EscReport.md)
|
||||
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
|
||||
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
|
||||
- [MissionResult](../msg_docs/MissionResult.md)
|
||||
- [LogMessage](../msg_docs/LogMessage.md)
|
||||
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
|
||||
- [PowerMonitor](../msg_docs/PowerMonitor.md)
|
||||
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
|
||||
- [HeaterStatus](../msg_docs/HeaterStatus.md)
|
||||
- [VehicleStatusV0](../msg_docs/VehicleStatusV0.md)
|
||||
- [GpioRequest](../msg_docs/GpioRequest.md)
|
||||
- [EstimatorBias3d](../msg_docs/EstimatorBias3d.md)
|
||||
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
|
||||
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
|
||||
- [VehicleAngularVelocity](../msg_docs/VehicleAngularVelocity.md)
|
||||
- [Ekf2Timestamps](../msg_docs/Ekf2Timestamps.md)
|
||||
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
|
||||
- [DifferentialPressure](../msg_docs/DifferentialPressure.md)
|
||||
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
|
||||
- [SensorBaro](../msg_docs/SensorBaro.md)
|
||||
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
|
||||
- [GpsDump](../msg_docs/GpsDump.md)
|
||||
- [DistanceSensorModeChangeRequest](../msg_docs/DistanceSensorModeChangeRequest.md)
|
||||
- [Airspeed](../msg_docs/Airspeed.md)
|
||||
- [LoggerStatus](../msg_docs/LoggerStatus.md)
|
||||
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
|
||||
- [SensorGyro](../msg_docs/SensorGyro.md)
|
||||
- [EstimatorSelectorStatus](../msg_docs/EstimatorSelectorStatus.md)
|
||||
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
|
||||
- [HoverThrustEstimate](../msg_docs/HoverThrustEstimate.md)
|
||||
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
|
||||
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
|
||||
- [LandingTargetInnovations](../msg_docs/LandingTargetInnovations.md)
|
||||
- [MountOrientation](../msg_docs/MountOrientation.md)
|
||||
- [EscEepromWrite](../msg_docs/EscEepromWrite.md)
|
||||
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
|
||||
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
|
||||
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
|
||||
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
|
||||
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
|
||||
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
|
||||
- [EstimatorAidSource2d](../msg_docs/EstimatorAidSource2d.md)
|
||||
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
|
||||
- [FixedWingLateralGuidanceStatus](../msg_docs/FixedWingLateralGuidanceStatus.md)
|
||||
- [SensorSelection](../msg_docs/SensorSelection.md)
|
||||
- [TiltrotorExtraControls](../msg_docs/TiltrotorExtraControls.md)
|
||||
- [PositionControllerStatus](../msg_docs/PositionControllerStatus.md)
|
||||
- [AdcReport](../msg_docs/AdcReport.md)
|
||||
- [UlogStreamAck](../msg_docs/UlogStreamAck.md)
|
||||
- [TakeoffStatus](../msg_docs/TakeoffStatus.md)
|
||||
- [FollowTargetEstimator](../msg_docs/FollowTargetEstimator.md)
|
||||
- [OpenDroneIdArmStatus](../msg_docs/OpenDroneIdArmStatus.md)
|
||||
- [VehicleOpticalFlowVel](../msg_docs/VehicleOpticalFlowVel.md)
|
||||
- [FixedWingRunwayControl](../msg_docs/FixedWingRunwayControl.md)
|
||||
- [GpioConfig](../msg_docs/GpioConfig.md)
|
||||
- [SensorPreflightMag](../msg_docs/SensorPreflightMag.md)
|
||||
- [OrbitStatus](../msg_docs/OrbitStatus.md)
|
||||
- [Rpm](../msg_docs/Rpm.md)
|
||||
- [InputRc](../msg_docs/InputRc.md)
|
||||
- [SensorTemp](../msg_docs/SensorTemp.md)
|
||||
- [TuneControl](../msg_docs/TuneControl.md)
|
||||
- [SensorAccel](../msg_docs/SensorAccel.md)
|
||||
- [CameraTrigger](../msg_docs/CameraTrigger.md)
|
||||
- [GimbalManagerSetManualControl](../msg_docs/GimbalManagerSetManualControl.md)
|
||||
- [PurePursuitStatus](../msg_docs/PurePursuitStatus.md)
|
||||
- [CanInterfaceStatus](../msg_docs/CanInterfaceStatus.md)
|
||||
- [AirspeedValidatedV0](../msg_docs/AirspeedValidatedV0.md)
|
||||
- [EstimatorBias](../msg_docs/EstimatorBias.md)
|
||||
- [RtlTimeEstimate](../msg_docs/RtlTimeEstimate.md)
|
||||
- [MagWorkerData](../msg_docs/MagWorkerData.md)
|
||||
- [PowerButtonState](../msg_docs/PowerButtonState.md)
|
||||
- [QshellRetval](../msg_docs/QshellRetval.md)
|
||||
- [RcChannels](../msg_docs/RcChannels.md)
|
||||
- [Px4ioStatus](../msg_docs/Px4ioStatus.md)
|
||||
- [ActuatorControlsStatus](../msg_docs/ActuatorControlsStatus.md)
|
||||
- [FlightPhaseEstimation](../msg_docs/FlightPhaseEstimation.md)
|
||||
- [EstimatorGpsStatus](../msg_docs/EstimatorGpsStatus.md)
|
||||
- [EscEepromWrite](../msg_docs/EscEepromWrite.md)
|
||||
- [OpenDroneIdOperatorId](../msg_docs/OpenDroneIdOperatorId.md)
|
||||
- [GimbalDeviceSetAttitude](../msg_docs/GimbalDeviceSetAttitude.md)
|
||||
- [VehicleAttitudeSetpointV0](../msg_docs/VehicleAttitudeSetpointV0.md)
|
||||
- [CellularStatus](../msg_docs/CellularStatus.md)
|
||||
- [BatteryStatusV0](../msg_docs/BatteryStatusV0.md)
|
||||
- [ButtonEvent](../msg_docs/ButtonEvent.md)
|
||||
- [SystemPower](../msg_docs/SystemPower.md)
|
||||
- [FuelTankStatus](../msg_docs/FuelTankStatus.md)
|
||||
- [LandingGearWheel](../msg_docs/LandingGearWheel.md)
|
||||
- [VehicleLocalPositionSetpoint](../msg_docs/VehicleLocalPositionSetpoint.md)
|
||||
- [DronecanNodeStatus](../msg_docs/DronecanNodeStatus.md)
|
||||
- [UavcanParameterValue](../msg_docs/UavcanParameterValue.md)
|
||||
- [SensorCorrection](../msg_docs/SensorCorrection.md)
|
||||
- [SensorHygrometer](../msg_docs/SensorHygrometer.md)
|
||||
- [EscReport](../msg_docs/EscReport.md)
|
||||
- [EstimatorAidSource1d](../msg_docs/EstimatorAidSource1d.md)
|
||||
- [MavlinkTunnel](../msg_docs/MavlinkTunnel.md)
|
||||
- [ParameterUpdate](../msg_docs/ParameterUpdate.md)
|
||||
- [GimbalManagerStatus](../msg_docs/GimbalManagerStatus.md)
|
||||
- [GimbalManagerInformation](../msg_docs/GimbalManagerInformation.md)
|
||||
- [SensorSelection](../msg_docs/SensorSelection.md)
|
||||
- [DebugValue](../msg_docs/DebugValue.md)
|
||||
- [GpioIn](../msg_docs/GpioIn.md)
|
||||
- [RateCtrlStatus](../msg_docs/RateCtrlStatus.md)
|
||||
- [EstimatorFusionControl](../msg_docs/EstimatorFusionControl.md)
|
||||
- [LaunchDetectionStatus](../msg_docs/LaunchDetectionStatus.md)
|
||||
- [DatamanResponse](../msg_docs/DatamanResponse.md)
|
||||
- [ControlAllocatorStatus](../msg_docs/ControlAllocatorStatus.md)
|
||||
- [Vtx](../msg_docs/Vtx.md)
|
||||
- [Event](../msg_docs/Event.md)
|
||||
- [OrbTest](../msg_docs/OrbTest.md)
|
||||
- [BatteryInfo](../msg_docs/BatteryInfo.md)
|
||||
- [RoverRateStatus](../msg_docs/RoverRateStatus.md)
|
||||
- [VehicleAcceleration](../msg_docs/VehicleAcceleration.md)
|
||||
- [RcParameterMap](../msg_docs/RcParameterMap.md)
|
||||
- [InternalCombustionEngineControl](../msg_docs/InternalCombustionEngineControl.md)
|
||||
- [RoverSpeedStatus](../msg_docs/RoverSpeedStatus.md)
|
||||
- [MagnetometerBiasEstimate](../msg_docs/MagnetometerBiasEstimate.md)
|
||||
- [PwmInput](../msg_docs/PwmInput.md)
|
||||
- [NavigatorMissionItem](../msg_docs/NavigatorMissionItem.md)
|
||||
- [RadioStatus](../msg_docs/RadioStatus.md)
|
||||
- [ArmingCheckReplyV0](../msg_docs/ArmingCheckReplyV0.md)
|
||||
- [VehicleAirData](../msg_docs/VehicleAirData.md)
|
||||
- [ActuatorOutputs](../msg_docs/ActuatorOutputs.md)
|
||||
- [GimbalManagerSetAttitude](../msg_docs/GimbalManagerSetAttitude.md)
|
||||
- [EstimatorInnovations](../msg_docs/EstimatorInnovations.md)
|
||||
- [RoverAttitudeStatus](../msg_docs/RoverAttitudeStatus.md)
|
||||
- [EstimatorStates](../msg_docs/EstimatorStates.md)
|
||||
- [LedControl](../msg_docs/LedControl.md)
|
||||
- [RegisterExtComponentRequestV0](../msg_docs/RegisterExtComponentRequestV0.md)
|
||||
- [EstimatorEventFlags](../msg_docs/EstimatorEventFlags.md)
|
||||
- [FixedWingLateralStatus](../msg_docs/FixedWingLateralStatus.md)
|
||||
- [VehicleAngularAccelerationSetpoint](../msg_docs/VehicleAngularAccelerationSetpoint.md)
|
||||
- [ActuatorArmed](../msg_docs/ActuatorArmed.md)
|
||||
- [SensorsStatusImu](../msg_docs/SensorsStatusImu.md)
|
||||
- [OrbTestMedium](../msg_docs/OrbTestMedium.md)
|
||||
- [MavlinkLog](../msg_docs/MavlinkLog.md)
|
||||
- [ParameterSetValueResponse](../msg_docs/ParameterSetValueResponse.md)
|
||||
- [EventV0](../msg_docs/EventV0.md)
|
||||
- [GpsDump](../msg_docs/GpsDump.md)
|
||||
- [GeneratorStatus](../msg_docs/GeneratorStatus.md)
|
||||
- [LandingTargetPose](../msg_docs/LandingTargetPose.md)
|
||||
- [DebugKeyValue](../msg_docs/DebugKeyValue.md)
|
||||
- [GainCompression](../msg_docs/GainCompression.md)
|
||||
- [VehicleRoi](../msg_docs/VehicleRoi.md)
|
||||
- [FollowTargetStatus](../msg_docs/FollowTargetStatus.md)
|
||||
- [FollowTarget](../msg_docs/FollowTarget.md)
|
||||
- [SensorUwb](../msg_docs/SensorUwb.md)
|
||||
- [PpsCapture](../msg_docs/PpsCapture.md)
|
||||
- [HomePositionV0](../msg_docs/HomePositionV0.md)
|
||||
- [LoggerStatus](../msg_docs/LoggerStatus.md)
|
||||
- [RegisterExtComponentReplyV0](../msg_docs/RegisterExtComponentReplyV0.md)
|
||||
- [SensorAirflow](../msg_docs/SensorAirflow.md)
|
||||
- [DebugVect](../msg_docs/DebugVect.md)
|
||||
- [ActuatorServosTrim](../msg_docs/ActuatorServosTrim.md)
|
||||
- [Airspeed](../msg_docs/Airspeed.md)
|
||||
- [RaptorInput](../msg_docs/RaptorInput.md)
|
||||
|
||||
:::
|
||||
|
||||
@@ -4,7 +4,7 @@ pageClass: is-wide-page
|
||||
|
||||
# EstimatorAidSource1d (UORB message)
|
||||
|
||||
**TOPICS:** estimator_aid_src_baro_hgt estimator_aid_src_ev_hgt estimator_aid_src_gnss_hgt estimator_aid_src_rng_hgt estimator_aid_src_airspeed estimator_aid_src_sideslip estimator_aid_src_fake_hgt estimator_aid_src_gnss_yaw estimator_aid_src_ev_yaw
|
||||
**TOPICS:** estimator_aid_src_baro_hgt estimator_aid_src_ev_hgt estimator_aid_src_gnss_hgt estimator_aid_src_rng_hgt estimator_aid_src_ranging_beacon estimator_aid_src_airspeed estimator_aid_src_sideslip estimator_aid_src_fake_hgt estimator_aid_src_gnss_yaw estimator_aid_src_ev_yaw
|
||||
|
||||
## Fields
|
||||
|
||||
@@ -56,7 +56,7 @@ float32 test_ratio_filtered # signed filtered test ratio
|
||||
bool innovation_rejected # true if the observation has been rejected
|
||||
bool fused # true if the sample was successfully fused
|
||||
|
||||
# TOPICS estimator_aid_src_baro_hgt estimator_aid_src_ev_hgt estimator_aid_src_gnss_hgt estimator_aid_src_rng_hgt
|
||||
# TOPICS estimator_aid_src_baro_hgt estimator_aid_src_ev_hgt estimator_aid_src_gnss_hgt estimator_aid_src_rng_hgt estimator_aid_src_ranging_beacon
|
||||
# TOPICS estimator_aid_src_airspeed estimator_aid_src_sideslip
|
||||
# TOPICS estimator_aid_src_fake_hgt
|
||||
# TOPICS estimator_aid_src_gnss_yaw estimator_aid_src_ev_yaw
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
---
|
||||
pageClass: is-wide-page
|
||||
---
|
||||
|
||||
# EstimatorFusionControl (UORB message)
|
||||
|
||||
**TOPICS:** estimator_fusion_control
|
||||
|
||||
## Fields
|
||||
|
||||
| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 |
|
||||
| ------------------------------------ | --------- | ---------------------------------------------------------------- | ---------- | --------------------------------------------------------- |
|
||||
| timestamp | `uint64` | | | time since system start (microseconds) |
|
||||
| gps_intended | `bool[2]` | | | |
|
||||
| of_intended | `bool` | | | |
|
||||
| ev_intended | `bool` | | | |
|
||||
| agp_intended | `bool[4]` | | | |
|
||||
| baro_intended | `bool` | | | |
|
||||
| rng_intended | `bool` | | | |
|
||||
| mag_intended | `bool` | | | |
|
||||
| aspd_intended | `bool` | | | |
|
||||
| rngbcn_intended | `bool` | | | |
|
||||
| gps_active | `bool[2]` | | | |
|
||||
| of_active | `bool` | | | |
|
||||
| ev_active | `bool` | | | |
|
||||
| agp_active | `bool[4]` | | | |
|
||||
| baro_active | `bool` | | | |
|
||||
| rng_active | `bool` | | | |
|
||||
| mag_active | `bool` | | | |
|
||||
| aspd_active | `bool` | | | |
|
||||
| rngbcn_active | `bool` | | | |
|
||||
|
||||
## Source Message
|
||||
|
||||
[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/EstimatorFusionControl.msg)
|
||||
|
||||
:::details
|
||||
Click here to see original file
|
||||
|
||||
```c
|
||||
uint64 timestamp # time since system start (microseconds)
|
||||
|
||||
# sensor intended for fusion (enabled via EKF2_SENS_EN AND CTRL param != disabled)
|
||||
bool[2] gps_intended
|
||||
bool of_intended
|
||||
bool ev_intended
|
||||
bool[4] agp_intended
|
||||
bool baro_intended
|
||||
bool rng_intended
|
||||
bool mag_intended
|
||||
bool aspd_intended
|
||||
bool rngbcn_intended
|
||||
|
||||
# whether the estimator is actively fusing data from each source
|
||||
bool[2] gps_active
|
||||
bool of_active
|
||||
bool ev_active
|
||||
bool[4] agp_active
|
||||
bool baro_active
|
||||
bool rng_active
|
||||
bool mag_active
|
||||
bool aspd_active
|
||||
bool rngbcn_active
|
||||
```
|
||||
|
||||
:::
|
||||
@@ -0,0 +1,73 @@
|
||||
---
|
||||
pageClass: is-wide-page
|
||||
---
|
||||
|
||||
# RangingBeacon (UORB message)
|
||||
|
||||
Ranging beacon measurement data (e.g. LoRa, UWB).
|
||||
|
||||
**TOPICS:** ranging_beacon
|
||||
|
||||
## Fields
|
||||
|
||||
| 명칭 | 형식 | Unit [Frame] | Range/Enum | 설명 |
|
||||
| ------------------------------------- | --------- | ---------------------------------------------------------------- | ------------------------------------------ | ----------------------------------------------------------------------------------- |
|
||||
| timestamp | `uint64` | us | | time since system start |
|
||||
| timestamp_sample | `uint64` | us | | the timestamp of the raw data |
|
||||
| beacon_id | `uint8` | | | |
|
||||
| range | `float32` | m | | Range measurement |
|
||||
| lat | `float64` | deg | | Latitude |
|
||||
| lon | `float64` | deg | | Longitude |
|
||||
| alt | `float32` | m | | Beacon altitude (frame defined in alt_type) |
|
||||
| alt_type | `uint8` | | [ALT_TYPE](#ALT_TYPE) | Altitude frame for alt field |
|
||||
| hacc | `float32` | m | | Groundbeacon horizontal accuracy |
|
||||
| vacc | `float32` | m | | Groundbeacon vertical accuracy |
|
||||
| sequence_nr | `uint8` | | | |
|
||||
| status | `uint8` | | | |
|
||||
| carrier_freq | `uint16` | MHz | | Carrier frequency |
|
||||
| range_accuracy | `float32` | m | | Range accuracy estimate |
|
||||
|
||||
## Enums
|
||||
|
||||
### ALT_TYPE {#ALT_TYPE}
|
||||
|
||||
| 명칭 | 형식 | Value | 설명 |
|
||||
| ------------------------------------------------------------------------------------- | ------- | ----- | ------------------------------------------------------- |
|
||||
| <a id="#ALT_TYPE_WGS84"></a> ALT_TYPE_WGS84 | `uint8` | 0 | Altitude above WGS84 ellipsoid |
|
||||
| <a id="#ALT_TYPE_MSL"></a> ALT_TYPE_MSL | `uint8` | 1 | Altitude above Mean Sea Level (AMSL) |
|
||||
|
||||
## Source Message
|
||||
|
||||
[Source file (GitHub)](https://github.com/PX4/PX4-Autopilot/blob/main/msg/RangingBeacon.msg)
|
||||
|
||||
:::details
|
||||
Click here to see original file
|
||||
|
||||
```c
|
||||
# Ranging beacon measurement data (e.g. LoRa, UWB)
|
||||
|
||||
uint64 timestamp # [us] time since system start
|
||||
uint64 timestamp_sample # [us] the timestamp of the raw data
|
||||
uint8 beacon_id
|
||||
float32 range # [m] Range measurement
|
||||
|
||||
float64 lat # [deg] Latitude
|
||||
float64 lon # [deg] Longitude
|
||||
float32 alt # [m] Beacon altitude (frame defined in alt_type)
|
||||
uint8 alt_type # [@enum ALT_TYPE] Altitude frame for alt field
|
||||
uint8 ALT_TYPE_WGS84 = 0 # Altitude above WGS84 ellipsoid
|
||||
uint8 ALT_TYPE_MSL = 1 # Altitude above Mean Sea Level (AMSL)
|
||||
|
||||
float32 hacc # [m] Groundbeacon horizontal accuracy
|
||||
float32 vacc # [m] Groundbeacon vertical accuracy
|
||||
|
||||
uint8 sequence_nr
|
||||
uint8 status
|
||||
uint16 carrier_freq # [MHz] Carrier frequency
|
||||
float32 range_accuracy # [m] Range accuracy estimate
|
||||
|
||||
|
||||
# TOPICS ranging_beacon
|
||||
```
|
||||
|
||||
:::
|
||||
@@ -1458,6 +1458,20 @@ None
|
||||
| 6 | | | ? |
|
||||
| 7 | | | ? |
|
||||
|
||||
### VEHICLE_CMD_ESTIMATOR_SENSOR_ENABLE (43006)
|
||||
|
||||
Enable/disable estimator sensor fusion.
|
||||
|
||||
| Param | 단위 | Range/Enum | 설명 |
|
||||
| ----- | -- | ---------- | --------------------------------------------------------------------- |
|
||||
| 1 | | | Source (FUSION_SOURCE_\*) |
|
||||
| 2 | | | Sensor instance (0-based) |
|
||||
| 3 | | | Enable (1) or Disable (0) |
|
||||
| 4 | | | Estimator Instance (NaN: not used) |
|
||||
| 5 | | | 비어 있음 |
|
||||
| 6 | | | 비어 있음 |
|
||||
| 7 | | | 비어 있음 |
|
||||
|
||||
### VEHICLE_CMD_PX4_INTERNAL_START (65537)
|
||||
|
||||
Start of PX4 internal only vehicle commands (> UINT16_MAX).
|
||||
@@ -1544,6 +1558,15 @@ Change mode by specifying nav_state directly.
|
||||
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| <a id="#MESSAGE_VERSION"></a> MESSAGE_VERSION | `uint32` | 0 | |
|
||||
| <a id="#PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION"></a> PREFLIGHT_CALIBRATION_TEMPERATURE_CALIBRATION | `uint16` | 3 | Param value for VEHICLE_CMD_PREFLIGHT_CALIBRATION to start temperature calibration. |
|
||||
| <a id="#FUSION_SOURCE_GPS"></a> FUSION_SOURCE_GPS | `uint8` | 0 | GNSS (EKF2_GPS{i}\_CTRL, use instance param) |
|
||||
| <a id="#FUSION_SOURCE_OF"></a> FUSION_SOURCE_OF | `uint8` | 1 | Optical Flow (EKF2_OF_CTRL) |
|
||||
| <a id="#FUSION_SOURCE_EV"></a> FUSION_SOURCE_EV | `uint8` | 2 | External Vision (EKF2_EV_CTRL) |
|
||||
| <a id="#FUSION_SOURCE_AGP"></a> FUSION_SOURCE_AGP | `uint8` | 3 | Auxiliary Global Position (EKF2_AGP{i}\_CTRL, use instance param) |
|
||||
| <a id="#FUSION_SOURCE_BARO"></a> FUSION_SOURCE_BARO | `uint8` | 4 | Barometer (EKF2_BARO_CTRL) |
|
||||
| <a id="#FUSION_SOURCE_RNG"></a> FUSION_SOURCE_RNG | `uint8` | 5 | Range Finder (EKF2_RNG_CTRL) |
|
||||
| <a id="#FUSION_SOURCE_MAG"></a> FUSION_SOURCE_MAG | `uint8` | 6 | Magnetometer (EKF2_MAG_TYPE) |
|
||||
| <a id="#FUSION_SOURCE_ASPD"></a> FUSION_SOURCE_ASPD | `uint8` | 7 | Airspeed (EKF2_ARSP_THR) |
|
||||
| <a id="#FUSION_SOURCE_RNGBCN"></a> FUSION_SOURCE_RNGBCN | `uint8` | 8 | Ranging Beacon |
|
||||
| <a id="#VEHICLE_MOUNT_MODE_RETRACT"></a> VEHICLE_MOUNT_MODE_RETRACT | `uint8` | 0 | Load and keep safe position (Roll,Pitch,Yaw) from permanent memory and stop stabilization. |
|
||||
| <a id="#VEHICLE_MOUNT_MODE_NEUTRAL"></a> VEHICLE_MOUNT_MODE_NEUTRAL | `uint8` | 1 | Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. |
|
||||
| <a id="#VEHICLE_MOUNT_MODE_MAVLINK_TARGETING"></a> VEHICLE_MOUNT_MODE_MAVLINK_TARGETING | `uint8` | 2 | Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization. |
|
||||
@@ -1711,6 +1734,17 @@ uint16 VEHICLE_CMD_DO_WINCH = 42600 # Command to operate winch.
|
||||
|
||||
uint16 VEHICLE_CMD_EXTERNAL_POSITION_ESTIMATE = 43003 # External reset of estimator global position when dead reckoning.
|
||||
uint16 VEHICLE_CMD_EXTERNAL_WIND_ESTIMATE = 43004
|
||||
uint16 VEHICLE_CMD_ESTIMATOR_SENSOR_ENABLE = 43006 # Enable/disable estimator sensor fusion. |Source (FUSION_SOURCE_*)|Sensor instance (0-based)|Enable (1) or Disable (0)|Estimator Instance (NaN: not used)|Empty|Empty|Empty|
|
||||
# Sensor fusion source types for VEHICLE_CMD_ESTIMATOR_SENSOR_ENABLE
|
||||
uint8 FUSION_SOURCE_GPS = 0 # GNSS (EKF2_GPS{i}_CTRL, use instance param)
|
||||
uint8 FUSION_SOURCE_OF = 1 # Optical Flow (EKF2_OF_CTRL)
|
||||
uint8 FUSION_SOURCE_EV = 2 # External Vision (EKF2_EV_CTRL)
|
||||
uint8 FUSION_SOURCE_AGP = 3 # Auxiliary Global Position (EKF2_AGP{i}_CTRL, use instance param)
|
||||
uint8 FUSION_SOURCE_BARO = 4 # Barometer (EKF2_BARO_CTRL)
|
||||
uint8 FUSION_SOURCE_RNG = 5 # Range Finder (EKF2_RNG_CTRL)
|
||||
uint8 FUSION_SOURCE_MAG = 6 # Magnetometer (EKF2_MAG_TYPE)
|
||||
uint8 FUSION_SOURCE_ASPD = 7 # Airspeed (EKF2_ARSP_THR)
|
||||
uint8 FUSION_SOURCE_RNGBCN = 8 # Ranging Beacon
|
||||
|
||||
# PX4 vehicle commands (beyond 16 bit MAVLink commands).
|
||||
uint32 VEHICLE_CMD_PX4_INTERNAL_START = 65537 # Start of PX4 internal only vehicle commands (> UINT16_MAX).
|
||||
|
||||
@@ -95,6 +95,7 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m
|
||||
- [EstimatorBias](EstimatorBias.md)
|
||||
- [EstimatorBias3d](EstimatorBias3d.md)
|
||||
- [EstimatorEventFlags](EstimatorEventFlags.md)
|
||||
- [EstimatorFusionControl](EstimatorFusionControl.md)
|
||||
- [EstimatorGpsStatus](EstimatorGpsStatus.md)
|
||||
- [EstimatorInnovations](EstimatorInnovations.md)
|
||||
- [EstimatorSelectorStatus](EstimatorSelectorStatus.md)
|
||||
@@ -192,6 +193,7 @@ Graphs showing how these are used [can be found here](../middleware/uorb_graph.m
|
||||
- [QshellReq](QshellReq.md)
|
||||
- [QshellRetval](QshellRetval.md)
|
||||
- [RadioStatus](RadioStatus.md)
|
||||
- [RangingBeacon](RangingBeacon.md) — Ranging beacon measurement data (e.g. LoRa, UWB).
|
||||
- [RateCtrlStatus](RateCtrlStatus.md)
|
||||
- [RcChannels](RcChannels.md)
|
||||
- [RcParameterMap](RcParameterMap.md)
|
||||
|
||||
@@ -23,6 +23,7 @@ For fixed-wing flight it is the airspeed that guarantees lift — not ground spe
|
||||
- [Holybro High Precision DroneCAN Airspeed Sensor - DLVR](https://holybro.com/collections/sensors/products/high-precision-dronecan-airspeed-sensor-dlvr)
|
||||
- [RaccoonLab Cyphal/CAN and DroneCAN Airspeed Sensor - MS4525DO](https://raccoonlab.co/tproduct/360882105-652259850171-cyphal-and-dronecan-airspeed-v2)
|
||||
- [Avionics Anonymous Air Data Computer with OAT probe](https://www.tindie.com/products/avionicsanonymous/uavcan-air-data-computer-airspeed-sensor/)
|
||||
- [UAV-DEV GmbH DroneCAN Airspeed and Barometer Sensor - AUAV](https://wiki.uav-dev.com/en/product/airspeed/auav)
|
||||
- Based on [Venturi effect](https://en.wikipedia.org/wiki/Venturi_effect)
|
||||
- [TFSLOT](airspeed_tfslot.md) Venturi effect airspeed sensor.
|
||||
|
||||
|
||||
@@ -14,13 +14,7 @@
|
||||
"docs:get_alt_sidebar_windows": "python ./scripts/gen_alt_sidebar.py",
|
||||
"start": "yarn docs:dev",
|
||||
"linkcheck": "markdown_link_checker_sc -r .. -d docs -e en -i assets",
|
||||
"build_docs_metadata_ubuntu": "(cd .. && Tools/ci/metadata_sync.sh --generate && Tools/ci/metadata_sync.sh --sync) && echo 'NOTE: These metadata changes are for local testing only and do not need to be merged.'",
|
||||
"gen_fc_sections": "python3 ./scripts/fc_doc_generator/fc_doc_generator.py --apply",
|
||||
"new_fc_doc": "python3 ./scripts/fc_doc_generator/fc_doc_generator.py --new-doc --since-version v1.18",
|
||||
"check_fc_doc": "python3 ./scripts/fc_doc_generator/fc_doc_generator.py --check-doc",
|
||||
"check_fc_docs": "python3 ./scripts/fc_doc_generator/fc_doc_generator.py --check-all",
|
||||
"test_fc_doc": "python3 -m pytest scripts/fc_doc_generator/ -v",
|
||||
"update_fc_snapshots": "python3 -m pytest scripts/fc_doc_generator/ -v --update-snapshots"
|
||||
"build_docs_metadata_ubuntu": "(cd .. && Tools/ci/metadata_sync.sh --generate && Tools/ci/metadata_sync.sh --sync) && echo 'NOTE: These metadata changes are for local testing only and do not need to be merged.'"
|
||||
},
|
||||
"dependencies": {
|
||||
"@red-asuka/vitepress-plugin-tabs": "0.0.4",
|
||||
|
||||
@@ -1,156 +0,0 @@
|
||||
# fc_doc_generator
|
||||
|
||||
Auto-generates flight controller documentation sections for PX4-Autopilot
|
||||
from board source files (`boards/<vendor>/<board>/`).
|
||||
|
||||
## What it does
|
||||
|
||||
Parses PX4 board C/Kconfig source files and generates Markdown sections
|
||||
inserted into `docs/en/flight_controller/*.md` docs. Sections generated:
|
||||
|
||||
- `## Specifications` — processor, sensors, interfaces
|
||||
- `## PWM Outputs` — timer groups, DShot/BDShot capability per output
|
||||
- `## Serial` — UART → /dev/ttyS* mapping with labels and flow control
|
||||
- `## Radio Control` — RC input protocols and ports
|
||||
- `## GPS & Compass` — GPS/safety connector info
|
||||
- `## Power` — power input ports and monitor type
|
||||
- `## Telemetry Radios` — TELEM port listing
|
||||
- `## SD Card` — presence/absence
|
||||
|
||||
## File layout
|
||||
|
||||
```
|
||||
fc_doc_generator/
|
||||
├── fc_doc_generator.py # Main script (~3700 lines)
|
||||
├── pytest.ini # testpaths = tests
|
||||
├── metadata/ # Per-board cached JSON (data + wizard overrides)
|
||||
│ ├── <vendor>_<board>_data.json # Parsed board data
|
||||
│ └── <vendor>_<board>_wizard.json # User-supplied wizard overrides
|
||||
└── tests/
|
||||
├── conftest.py # snapshot fixture + board_* path fixtures
|
||||
├── fixtures/ # Minimal fake board trees
|
||||
│ ├── stm32h7_all_dshot/
|
||||
│ ├── stm32h7_mixed_io/
|
||||
│ ├── stm32h7_ppm_shared/
|
||||
│ ├── stm32h7_capture_channels/ # 8 regular + 8 initIOTimerChannelCapture outputs
|
||||
│ ├── stm32f4_no_dshot/
|
||||
│ └── imxrt_all_dshot/
|
||||
├── snapshots/ # Expected markdown output (.md files)
|
||||
├── test_parsers.py # Unit tests for parse_* functions
|
||||
├── test_compute.py # Unit tests for compute_groups / compute_bdshot
|
||||
├── test_generators.py # Snapshot tests for generate_*_section functions
|
||||
├── test_helpers.py # Unit tests for helper functions
|
||||
└── test_wizard.py # Tests for wizard cache and generate_full_template
|
||||
```
|
||||
|
||||
## Running the script
|
||||
|
||||
Run from the repo root (requires the PX4 `boards/` tree to be present):
|
||||
|
||||
```sh
|
||||
# Generate metadata JSON + fc_sections.md (no file edits):
|
||||
python docs/scripts/fc_doc_generator/fc_doc_generator.py
|
||||
|
||||
# Apply sections to existing FC docs:
|
||||
python docs/scripts/fc_doc_generator/fc_doc_generator.py --apply
|
||||
|
||||
# Apply a single section only:
|
||||
python docs/scripts/fc_doc_generator/fc_doc_generator.py --apply --section pwm_outputs
|
||||
|
||||
# Apply all sections to a single doc only (stem or filename, implies --apply):
|
||||
python docs/scripts/fc_doc_generator/fc_doc_generator.py --doc cuav_x25-evo.md
|
||||
|
||||
# Apply a single section to a single doc:
|
||||
python docs/scripts/fc_doc_generator/fc_doc_generator.py --doc cuav_x25-evo.md --section pwm_outputs
|
||||
|
||||
# Create a new stub FC doc (interactive wizard):
|
||||
python docs/scripts/fc_doc_generator/fc_doc_generator.py --new-doc
|
||||
|
||||
# Check a single doc against quality specs:
|
||||
python docs/scripts/fc_doc_generator/fc_doc_generator.py --check-doc docs/en/flight_controller/holybro_kakuteh7.md
|
||||
|
||||
# Check all FC docs:
|
||||
python docs/scripts/fc_doc_generator/fc_doc_generator.py --check-all
|
||||
```
|
||||
|
||||
Via yarn (from the `docs/` directory): `cd docs && yarn gen_fc_sections`
|
||||
|
||||
## Running tests
|
||||
|
||||
From `docs/scripts/fc_doc_generator/`:
|
||||
|
||||
```sh
|
||||
pytest # run all tests
|
||||
pytest --update-snapshots # regenerate snapshot files after intentional changes
|
||||
pytest tests/test_generators.py # specific test file
|
||||
```
|
||||
|
||||
## Snapshot tests
|
||||
|
||||
Tests in `test_generators.py` use the `snapshot` fixture from `conftest.py`.
|
||||
- Snapshot files live in `tests/snapshots/*.md`
|
||||
- To add a new snapshot test: call `snapshot("my_name.md", result)` — then run `pytest --update-snapshots` to create the file
|
||||
- After intentional generator changes: run `pytest --update-snapshots` then review diffs with `git diff tests/snapshots/`
|
||||
|
||||
## Extension pattern (adding a new section)
|
||||
|
||||
1. Write `parse_<thing>(board_path: Path) -> dict` and call it in `gather_board_data()`, merging into the entry
|
||||
2. Write `generate_<thing>_section(board_key, entry) -> str`
|
||||
3. Register both in `SECTION_GENERATORS` and `SECTION_ORDER`
|
||||
4. Add snapshot tests in `test_generators.py`
|
||||
5. Re-run `cd docs && yarn gen_fc_sections` to regenerate metadata JSON + `fc_sections.md`
|
||||
|
||||
## Key architecture notes
|
||||
|
||||
- **Parsers** read from `boards/<vendor>/<board>/` source files:
|
||||
- `nuttx-config/nsh/defconfig` — chip family, enabled UARTs, SD card
|
||||
- `src/board_config.h` — PWM count, IO board presence, GPIOs
|
||||
- `src/timer_config.cpp` — timer groups and channels
|
||||
- `default.px4board` — Kconfig board settings (serial labels, RC, GPS, drivers)
|
||||
- `nuttx-config/include/board.h` — flow control GPIO definitions
|
||||
- `init/rc.board_sensors` — sensor driver start commands; comments immediately
|
||||
preceding a sensor start line are parsed for port labels (e.g.
|
||||
`# External compass on GPS1/I2C1:` → `port_label: 'GPS1'` on that sensor entry);
|
||||
power monitor drivers (INA226/INA228/INA238) are also captured in
|
||||
`sensor_bus_info['power_monitor']`
|
||||
- `src/i2c.cpp` — authoritative I2C bus routing:
|
||||
`initI2CBusExternal(N)` = external connector; `initI2CBusInternal(N)` = on-board only.
|
||||
When present, stored in `i2c_bus_config` and enables the detailed per-bus I2C output.
|
||||
|
||||
- **Metadata JSON** in `metadata/` caches parsed data (`*_data.json`) and
|
||||
wizard-supplied overrides (`*_wizard.json`). Wizard data persists across runs
|
||||
and provides connector types, sensor names, dimensions, etc.
|
||||
|
||||
- **`BOARD_TO_DOC`** — static mapping from `vendor/board` key to doc filename.
|
||||
Boards mapped to `None` have no existing doc page yet.
|
||||
|
||||
- **Section insertion** — `_apply_section()` finds existing headings and
|
||||
replaces them, or inserts before anchor headings like `## Where to Buy`.
|
||||
The `specifications` section is special: it preserves hand-written content
|
||||
and appends generated content as a `<!-- specifications-proposed -->` comment.
|
||||
|
||||
- **Wizard** — `--new-doc` runs an interactive prompts session and caches
|
||||
answers to `metadata/<stem>_wizard.json` for future re-use.
|
||||
|
||||
## Conventions
|
||||
|
||||
- British English in doc output
|
||||
- Asset files lowercase with underscores; asset folder named after doc stem
|
||||
- Section generators emit embedded `<!-- *-source-data ... -->` JSON comments
|
||||
so the raw parsed values are visible in the doc for manual verification
|
||||
- `TODO:` placeholders are left wherever data cannot be auto-detected
|
||||
|
||||
## Development rules
|
||||
|
||||
**When modifying `fc_doc_generator.py`:**
|
||||
1. All existing tests must pass: run `pytest` from `docs/scripts/fc_doc_generator/`
|
||||
2. New functionality must have new tests (unit tests and/or snapshot tests as appropriate)
|
||||
3. Update this `CLAUDE.md` if the change affects how to run the script, the architecture, extension patterns, or conventions
|
||||
4. **Wizard JSON backward compatibility** — `metadata/*_wizard.json` files are persisted user
|
||||
data. A new tool version must work correctly with an old wizard JSON:
|
||||
- **Adding** a new field to `_WIZARD_CACHE_FIELDS`: safe — missing keys are read via
|
||||
`cached.get(...)` which returns `None`, triggering re-prompting.
|
||||
- **Renaming** an existing field or **changing its structure** (e.g. the shape of
|
||||
`i2c_buses_wizard` entries): **breaking change** — old data is silently lost or
|
||||
misinterpreted. This must be explicitly flagged in the plan and requires a migration
|
||||
strategy (e.g. read both old and new key names, or add a one-time upgrade step).
|
||||
@@ -1,214 +0,0 @@
|
||||
{
|
||||
"board": "3dr/ctrl-zero-h7-oem-revg",
|
||||
"chip_family": "stm32h7",
|
||||
"chip_model": "STM32H743",
|
||||
"total_outputs": 8,
|
||||
"has_io_board": false,
|
||||
"io_outputs": 0,
|
||||
"groups": [
|
||||
{
|
||||
"group": 1,
|
||||
"timer": "Timer1",
|
||||
"outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"dshot": true,
|
||||
"dshot_outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"non_dshot_outputs": [],
|
||||
"bdshot_outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 2,
|
||||
"timer": "Timer4",
|
||||
"outputs": [
|
||||
5,
|
||||
6
|
||||
],
|
||||
"dshot": true,
|
||||
"dshot_outputs": [
|
||||
5,
|
||||
6
|
||||
],
|
||||
"non_dshot_outputs": [],
|
||||
"bdshot_outputs": [
|
||||
5,
|
||||
6
|
||||
],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 3,
|
||||
"timer": "Timer8",
|
||||
"outputs": [
|
||||
7,
|
||||
8
|
||||
],
|
||||
"dshot": true,
|
||||
"dshot_outputs": [
|
||||
7,
|
||||
8
|
||||
],
|
||||
"non_dshot_outputs": [],
|
||||
"bdshot_outputs": [
|
||||
7,
|
||||
8
|
||||
],
|
||||
"bdshot_output_only": []
|
||||
}
|
||||
],
|
||||
"serial_ports": [
|
||||
{
|
||||
"uart": "USART2",
|
||||
"device": "/dev/ttyS0",
|
||||
"label": "TELEM1",
|
||||
"flow_control": true
|
||||
},
|
||||
{
|
||||
"uart": "USART3",
|
||||
"device": "/dev/ttyS1",
|
||||
"label": "TELEM2",
|
||||
"flow_control": true
|
||||
},
|
||||
{
|
||||
"uart": "UART4",
|
||||
"device": "/dev/ttyS2",
|
||||
"label": "GPS1",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "USART6",
|
||||
"device": "/dev/ttyS3",
|
||||
"label": "",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART7",
|
||||
"device": "/dev/ttyS4",
|
||||
"label": "TELEM3",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART8",
|
||||
"device": "/dev/ttyS5",
|
||||
"label": "Debug Console",
|
||||
"flow_control": false
|
||||
}
|
||||
],
|
||||
"has_rc_input": true,
|
||||
"has_common_rc": false,
|
||||
"rc_serial_device": null,
|
||||
"has_ppm_pin": true,
|
||||
"ppm_shared_with_rc_serial": false,
|
||||
"has_pps_capture": false,
|
||||
"has_safety_switch": true,
|
||||
"has_safety_led": false,
|
||||
"has_buzzer": true,
|
||||
"num_power_inputs": 1,
|
||||
"has_redundant_power": false,
|
||||
"has_dual_battery_monitoring": false,
|
||||
"has_dronecan_power_input": false,
|
||||
"power_monitor_type": "ina226",
|
||||
"has_sd_card": true,
|
||||
"has_ethernet": false,
|
||||
"has_heater": false,
|
||||
"sensor_imu_drivers": [
|
||||
"BMI088",
|
||||
"ICM-20602",
|
||||
"ICM-20948"
|
||||
],
|
||||
"sensor_baro_drivers": [
|
||||
"DPS310"
|
||||
],
|
||||
"sensor_mag_drivers": [],
|
||||
"sensor_osd_drivers": [],
|
||||
"sensor_bus_info": {
|
||||
"imu": [
|
||||
{
|
||||
"name": "ICM-20602",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": 1,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "BMI088",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": 5,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "ICM-20948",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": 1,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"baro": [
|
||||
{
|
||||
"name": "DPS310",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": 2,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"mag": [],
|
||||
"osd": []
|
||||
},
|
||||
"sensor_variant_info": {
|
||||
"has_variants": false,
|
||||
"unconditional": {
|
||||
"imu": [
|
||||
{
|
||||
"name": "ICM-20602",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": 1,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "BMI088",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": 5,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "ICM-20948",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": 1,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"baro": [
|
||||
{
|
||||
"name": "DPS310",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": 2,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"mag": [],
|
||||
"osd": []
|
||||
},
|
||||
"variants": {}
|
||||
},
|
||||
"num_i2c_buses": 3,
|
||||
"num_spi_buses": 3,
|
||||
"num_can_buses": 2,
|
||||
"has_usb": true,
|
||||
"doc_url": null,
|
||||
"doc_file": null,
|
||||
"doc_exists": false,
|
||||
"documented": false
|
||||
}
|
||||
@@ -1,282 +0,0 @@
|
||||
{
|
||||
"board": "accton-godwit/ga1",
|
||||
"chip_family": "stm32h7",
|
||||
"chip_model": "STM32H753",
|
||||
"total_outputs": 9,
|
||||
"has_io_board": true,
|
||||
"io_outputs": 8,
|
||||
"groups": [
|
||||
{
|
||||
"group": 1,
|
||||
"timer": "Timer5",
|
||||
"outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"dshot": true,
|
||||
"dshot_outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"non_dshot_outputs": [],
|
||||
"bdshot_outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 2,
|
||||
"timer": "Timer4",
|
||||
"outputs": [
|
||||
5,
|
||||
6
|
||||
],
|
||||
"dshot": true,
|
||||
"dshot_outputs": [
|
||||
5,
|
||||
6
|
||||
],
|
||||
"non_dshot_outputs": [],
|
||||
"bdshot_outputs": [
|
||||
5,
|
||||
6
|
||||
],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 3,
|
||||
"timer": "Timer12",
|
||||
"outputs": [
|
||||
7,
|
||||
8
|
||||
],
|
||||
"dshot": false,
|
||||
"dshot_outputs": [],
|
||||
"non_dshot_outputs": [
|
||||
7,
|
||||
8
|
||||
],
|
||||
"bdshot_outputs": [],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 4,
|
||||
"timer": "Timer1",
|
||||
"outputs": [
|
||||
9
|
||||
],
|
||||
"dshot": false,
|
||||
"dshot_outputs": [],
|
||||
"non_dshot_outputs": [
|
||||
9
|
||||
],
|
||||
"bdshot_outputs": [],
|
||||
"bdshot_output_only": []
|
||||
}
|
||||
],
|
||||
"serial_ports": [
|
||||
{
|
||||
"uart": "USART1",
|
||||
"device": "/dev/ttyS0",
|
||||
"label": "GPS1",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "USART2",
|
||||
"device": "/dev/ttyS1",
|
||||
"label": "TELEM3",
|
||||
"flow_control": true
|
||||
},
|
||||
{
|
||||
"uart": "USART3",
|
||||
"device": "/dev/ttyS2",
|
||||
"label": "Debug Console",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART4",
|
||||
"device": "/dev/ttyS3",
|
||||
"label": "EXT2",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART5",
|
||||
"device": "/dev/ttyS4",
|
||||
"label": "TELEM2",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "USART6",
|
||||
"device": "/dev/ttyS5",
|
||||
"label": "PX4IO",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART7",
|
||||
"device": "/dev/ttyS6",
|
||||
"label": "TELEM1",
|
||||
"flow_control": true
|
||||
},
|
||||
{
|
||||
"uart": "UART8",
|
||||
"device": "/dev/ttyS7",
|
||||
"label": "GPS2",
|
||||
"flow_control": false
|
||||
}
|
||||
],
|
||||
"has_rc_input": true,
|
||||
"has_common_rc": false,
|
||||
"rc_serial_device": null,
|
||||
"has_ppm_pin": true,
|
||||
"ppm_shared_with_rc_serial": false,
|
||||
"has_pps_capture": false,
|
||||
"has_safety_switch": true,
|
||||
"has_safety_led": true,
|
||||
"has_buzzer": true,
|
||||
"num_power_inputs": 2,
|
||||
"has_redundant_power": true,
|
||||
"has_dual_battery_monitoring": true,
|
||||
"has_dronecan_power_input": true,
|
||||
"power_monitor_type": "ina238",
|
||||
"has_sd_card": true,
|
||||
"has_ethernet": true,
|
||||
"has_heater": true,
|
||||
"sensor_imu_drivers": [
|
||||
"BMI088",
|
||||
"ICM-42688P"
|
||||
],
|
||||
"sensor_baro_drivers": [
|
||||
"BMP388",
|
||||
"ICP-20100",
|
||||
"MS5611"
|
||||
],
|
||||
"sensor_mag_drivers": [
|
||||
"BMM150",
|
||||
"IST8308",
|
||||
"IST8310",
|
||||
"MMC5983MA",
|
||||
"RM3100"
|
||||
],
|
||||
"sensor_osd_drivers": [],
|
||||
"sensor_bus_info": {
|
||||
"imu": [
|
||||
{
|
||||
"name": "BMI088",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "ICM-42688P",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": 2,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "ICM-42688P",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": 1,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"baro": [
|
||||
{
|
||||
"name": "ICP-20100",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "ICP-20100",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
}
|
||||
],
|
||||
"mag": [
|
||||
{
|
||||
"name": "RM3100",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 4,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "IST8310",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 1,
|
||||
"external": true
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"sensor_variant_info": {
|
||||
"has_variants": false,
|
||||
"unconditional": {
|
||||
"imu": [
|
||||
{
|
||||
"name": "BMI088",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "ICM-42688P",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": 2,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "ICM-42688P",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": 1,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"baro": [
|
||||
{
|
||||
"name": "ICP-20100",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "ICP-20100",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
}
|
||||
],
|
||||
"mag": [
|
||||
{
|
||||
"name": "RM3100",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 4,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "IST8310",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 1,
|
||||
"external": true
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"variants": {}
|
||||
},
|
||||
"num_i2c_buses": 4,
|
||||
"num_spi_buses": 5,
|
||||
"num_can_buses": 2,
|
||||
"has_usb": true,
|
||||
"doc_url": "https://docs.px4.io/main/en/flight_controller/accton-godwit_ga1",
|
||||
"doc_file": "accton-godwit_ga1.md",
|
||||
"doc_exists": true,
|
||||
"documented": true
|
||||
}
|
||||
@@ -1,158 +0,0 @@
|
||||
{
|
||||
"board": "airmind/mindpx-v2",
|
||||
"chip_family": "stm32f4",
|
||||
"chip_model": "STM32F42",
|
||||
"total_outputs": 8,
|
||||
"has_io_board": false,
|
||||
"io_outputs": 0,
|
||||
"groups": [
|
||||
{
|
||||
"group": 1,
|
||||
"timer": "Timer1",
|
||||
"outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"dshot": false,
|
||||
"dshot_outputs": [],
|
||||
"non_dshot_outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"bdshot_outputs": [],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 2,
|
||||
"timer": "Timer4",
|
||||
"outputs": [
|
||||
5,
|
||||
6,
|
||||
7,
|
||||
8
|
||||
],
|
||||
"dshot": false,
|
||||
"dshot_outputs": [],
|
||||
"non_dshot_outputs": [
|
||||
5,
|
||||
6,
|
||||
7,
|
||||
8
|
||||
],
|
||||
"bdshot_outputs": [],
|
||||
"bdshot_output_only": []
|
||||
}
|
||||
],
|
||||
"serial_ports": [],
|
||||
"has_rc_input": true,
|
||||
"has_common_rc": false,
|
||||
"rc_serial_device": null,
|
||||
"has_ppm_pin": true,
|
||||
"ppm_shared_with_rc_serial": false,
|
||||
"has_pps_capture": false,
|
||||
"has_safety_switch": false,
|
||||
"has_safety_led": false,
|
||||
"has_buzzer": false,
|
||||
"num_power_inputs": 1,
|
||||
"has_redundant_power": false,
|
||||
"has_dual_battery_monitoring": false,
|
||||
"has_dronecan_power_input": false,
|
||||
"power_monitor_type": "ina226",
|
||||
"has_sd_card": true,
|
||||
"has_ethernet": false,
|
||||
"has_heater": false,
|
||||
"sensor_imu_drivers": [
|
||||
"ICM-20948",
|
||||
"MPU-6000"
|
||||
],
|
||||
"sensor_baro_drivers": [
|
||||
"MS5611"
|
||||
],
|
||||
"sensor_mag_drivers": [
|
||||
"HMC5883L",
|
||||
"QMC5883L"
|
||||
],
|
||||
"sensor_osd_drivers": [],
|
||||
"sensor_bus_info": {
|
||||
"imu": [
|
||||
{
|
||||
"name": "MPU-6000",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"baro": [
|
||||
{
|
||||
"name": "MS5611",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"mag": [
|
||||
{
|
||||
"name": "HMC5883L",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "QMC5883L",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"sensor_variant_info": {
|
||||
"has_variants": false,
|
||||
"unconditional": {
|
||||
"imu": [
|
||||
{
|
||||
"name": "MPU-6000",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"baro": [
|
||||
{
|
||||
"name": "MS5611",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"mag": [
|
||||
{
|
||||
"name": "HMC5883L",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "QMC5883L",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"variants": {}
|
||||
},
|
||||
"num_i2c_buses": 2,
|
||||
"num_spi_buses": 3,
|
||||
"num_can_buses": 0,
|
||||
"has_usb": true,
|
||||
"doc_url": "https://docs.px4.io/main/en/flight_controller/mindpx",
|
||||
"doc_file": "mindpx.md",
|
||||
"doc_exists": true,
|
||||
"documented": true
|
||||
}
|
||||
@@ -1,249 +0,0 @@
|
||||
{
|
||||
"board": "ark/cannode",
|
||||
"chip_family": "stm32f4",
|
||||
"chip_model": "STM32F412",
|
||||
"total_outputs": 8,
|
||||
"has_io_board": false,
|
||||
"io_outputs": 0,
|
||||
"groups": [
|
||||
{
|
||||
"group": 1,
|
||||
"timer": "Timer2",
|
||||
"outputs": [
|
||||
1,
|
||||
2,
|
||||
3
|
||||
],
|
||||
"dshot": true,
|
||||
"dshot_outputs": [
|
||||
1,
|
||||
2,
|
||||
3
|
||||
],
|
||||
"non_dshot_outputs": [],
|
||||
"bdshot_outputs": [],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 2,
|
||||
"timer": "Timer3",
|
||||
"outputs": [
|
||||
4,
|
||||
5,
|
||||
6,
|
||||
7
|
||||
],
|
||||
"dshot": true,
|
||||
"dshot_outputs": [
|
||||
4,
|
||||
5,
|
||||
6,
|
||||
7
|
||||
],
|
||||
"non_dshot_outputs": [],
|
||||
"bdshot_outputs": [],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 3,
|
||||
"timer": "Timer4",
|
||||
"outputs": [
|
||||
8
|
||||
],
|
||||
"dshot": true,
|
||||
"dshot_outputs": [
|
||||
8
|
||||
],
|
||||
"non_dshot_outputs": [],
|
||||
"bdshot_outputs": [],
|
||||
"bdshot_output_only": []
|
||||
}
|
||||
],
|
||||
"serial_ports": [],
|
||||
"has_rc_input": false,
|
||||
"has_common_rc": false,
|
||||
"rc_serial_device": null,
|
||||
"has_ppm_pin": false,
|
||||
"ppm_shared_with_rc_serial": false,
|
||||
"has_pps_capture": false,
|
||||
"has_safety_switch": false,
|
||||
"has_safety_led": false,
|
||||
"has_buzzer": false,
|
||||
"num_power_inputs": 1,
|
||||
"has_redundant_power": false,
|
||||
"has_dual_battery_monitoring": false,
|
||||
"has_dronecan_power_input": false,
|
||||
"power_monitor_type": null,
|
||||
"has_sd_card": false,
|
||||
"has_ethernet": false,
|
||||
"has_heater": false,
|
||||
"sensor_imu_drivers": [
|
||||
"ADIS16507",
|
||||
"ICM-20948",
|
||||
"ICM-42688P"
|
||||
],
|
||||
"sensor_baro_drivers": [
|
||||
"SPL06"
|
||||
],
|
||||
"sensor_mag_drivers": [
|
||||
"HMC5883L",
|
||||
"IST8308",
|
||||
"IST8310",
|
||||
"IIS2MDC",
|
||||
"LIS3MDL",
|
||||
"QMC5883L",
|
||||
"RM3100",
|
||||
"AK09916"
|
||||
],
|
||||
"sensor_osd_drivers": [],
|
||||
"sensor_bus_info": {
|
||||
"imu": [
|
||||
{
|
||||
"name": "ICM-42688P",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"baro": [
|
||||
{
|
||||
"name": "SPL06",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
}
|
||||
],
|
||||
"mag": [
|
||||
{
|
||||
"name": "HMC5883L",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
},
|
||||
{
|
||||
"name": "IST8308",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
},
|
||||
{
|
||||
"name": "IST8310",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
},
|
||||
{
|
||||
"name": "IIS2MDC",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
},
|
||||
{
|
||||
"name": "LIS3MDL",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
},
|
||||
{
|
||||
"name": "QMC5883L",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
},
|
||||
{
|
||||
"name": "RM3100",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
},
|
||||
{
|
||||
"name": "AK09916",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"sensor_variant_info": {
|
||||
"has_variants": false,
|
||||
"unconditional": {
|
||||
"imu": [
|
||||
{
|
||||
"name": "ICM-42688P",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"baro": [
|
||||
{
|
||||
"name": "SPL06",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
}
|
||||
],
|
||||
"mag": [
|
||||
{
|
||||
"name": "HMC5883L",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
},
|
||||
{
|
||||
"name": "IST8308",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
},
|
||||
{
|
||||
"name": "IST8310",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
},
|
||||
{
|
||||
"name": "IIS2MDC",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
},
|
||||
{
|
||||
"name": "LIS3MDL",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
},
|
||||
{
|
||||
"name": "QMC5883L",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
},
|
||||
{
|
||||
"name": "RM3100",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
},
|
||||
{
|
||||
"name": "AK09916",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"variants": {}
|
||||
},
|
||||
"num_i2c_buses": 1,
|
||||
"num_spi_buses": 2,
|
||||
"num_can_buses": 1,
|
||||
"has_usb": false,
|
||||
"doc_url": null,
|
||||
"doc_file": null,
|
||||
"doc_exists": false,
|
||||
"documented": false
|
||||
}
|
||||
@@ -1,245 +0,0 @@
|
||||
{
|
||||
"board": "ark/fmu-v6x",
|
||||
"chip_family": "stm32h7",
|
||||
"chip_model": "STM32H753",
|
||||
"total_outputs": 9,
|
||||
"has_io_board": true,
|
||||
"io_outputs": 8,
|
||||
"groups": [
|
||||
{
|
||||
"group": 1,
|
||||
"timer": "Timer5",
|
||||
"outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"dshot": true,
|
||||
"dshot_outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"non_dshot_outputs": [],
|
||||
"bdshot_outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 2,
|
||||
"timer": "Timer4",
|
||||
"outputs": [
|
||||
5,
|
||||
6
|
||||
],
|
||||
"dshot": true,
|
||||
"dshot_outputs": [
|
||||
5,
|
||||
6
|
||||
],
|
||||
"non_dshot_outputs": [],
|
||||
"bdshot_outputs": [
|
||||
5,
|
||||
6
|
||||
],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 3,
|
||||
"timer": "Timer12",
|
||||
"outputs": [
|
||||
7,
|
||||
8
|
||||
],
|
||||
"dshot": false,
|
||||
"dshot_outputs": [],
|
||||
"non_dshot_outputs": [
|
||||
7,
|
||||
8
|
||||
],
|
||||
"bdshot_outputs": [],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 4,
|
||||
"timer": "Timer1",
|
||||
"outputs": [
|
||||
9
|
||||
],
|
||||
"dshot": false,
|
||||
"dshot_outputs": [],
|
||||
"non_dshot_outputs": [
|
||||
9
|
||||
],
|
||||
"bdshot_outputs": [],
|
||||
"bdshot_output_only": []
|
||||
}
|
||||
],
|
||||
"serial_ports": [
|
||||
{
|
||||
"uart": "USART1",
|
||||
"device": "/dev/ttyS0",
|
||||
"label": "GPS1",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "USART2",
|
||||
"device": "/dev/ttyS1",
|
||||
"label": "TELEM3",
|
||||
"flow_control": true
|
||||
},
|
||||
{
|
||||
"uart": "USART3",
|
||||
"device": "/dev/ttyS2",
|
||||
"label": "Debug Console",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART4",
|
||||
"device": "/dev/ttyS3",
|
||||
"label": "TELEM4",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART5",
|
||||
"device": "/dev/ttyS4",
|
||||
"label": "TELEM2",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "USART6",
|
||||
"device": "/dev/ttyS5",
|
||||
"label": "PX4IO/RC",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART7",
|
||||
"device": "/dev/ttyS6",
|
||||
"label": "TELEM1",
|
||||
"flow_control": true
|
||||
},
|
||||
{
|
||||
"uart": "UART8",
|
||||
"device": "/dev/ttyS7",
|
||||
"label": "GPS2",
|
||||
"flow_control": false
|
||||
}
|
||||
],
|
||||
"has_rc_input": false,
|
||||
"has_common_rc": true,
|
||||
"rc_serial_device": "/dev/ttyS5",
|
||||
"has_ppm_pin": true,
|
||||
"ppm_shared_with_rc_serial": false,
|
||||
"has_pps_capture": true,
|
||||
"has_safety_switch": true,
|
||||
"has_safety_led": true,
|
||||
"has_buzzer": true,
|
||||
"num_power_inputs": 2,
|
||||
"has_redundant_power": true,
|
||||
"has_dual_battery_monitoring": true,
|
||||
"has_dronecan_power_input": true,
|
||||
"power_monitor_type": "ina238",
|
||||
"has_sd_card": true,
|
||||
"has_ethernet": true,
|
||||
"has_heater": true,
|
||||
"sensor_imu_drivers": [
|
||||
"ADIS16507",
|
||||
"ICM-42688P",
|
||||
"IIM-42652"
|
||||
],
|
||||
"sensor_baro_drivers": [
|
||||
"BMP388"
|
||||
],
|
||||
"sensor_mag_drivers": [
|
||||
"BMM150",
|
||||
"IST8310",
|
||||
"LIS3MDL",
|
||||
"RM3100",
|
||||
"IIS2MDC"
|
||||
],
|
||||
"sensor_osd_drivers": [],
|
||||
"sensor_bus_info": {
|
||||
"imu": [],
|
||||
"baro": [
|
||||
{
|
||||
"name": "BMP388",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"mag": [
|
||||
{
|
||||
"name": "BMM150",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"sensor_variant_info": {
|
||||
"has_variants": true,
|
||||
"unconditional": {
|
||||
"imu": [],
|
||||
"baro": [
|
||||
{
|
||||
"name": "BMP388",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"mag": [
|
||||
{
|
||||
"name": "BMM150",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"variants": {
|
||||
"ARKV6X000": {
|
||||
"imu": [
|
||||
{
|
||||
"name": "IIM-42652",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": 1,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "ICM-42688P",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": 2,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "ICM-42688P",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": 3,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"baro": [],
|
||||
"mag": [],
|
||||
"osd": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"num_i2c_buses": 4,
|
||||
"num_spi_buses": 5,
|
||||
"num_can_buses": 2,
|
||||
"has_usb": true,
|
||||
"doc_url": "https://docs.px4.io/main/en/flight_controller/ark_v6x",
|
||||
"doc_file": "ark_v6x.md",
|
||||
"doc_exists": true,
|
||||
"documented": true
|
||||
}
|
||||
@@ -1,203 +0,0 @@
|
||||
{
|
||||
"board": "ark/fpv",
|
||||
"chip_family": "stm32h7",
|
||||
"chip_model": "STM32H743",
|
||||
"total_outputs": 9,
|
||||
"has_io_board": false,
|
||||
"io_outputs": 0,
|
||||
"groups": [
|
||||
{
|
||||
"group": 1,
|
||||
"timer": "Timer5",
|
||||
"outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"dshot": true,
|
||||
"dshot_outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"non_dshot_outputs": [],
|
||||
"bdshot_outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 2,
|
||||
"timer": "Timer8",
|
||||
"outputs": [
|
||||
5,
|
||||
6,
|
||||
7,
|
||||
8
|
||||
],
|
||||
"dshot": true,
|
||||
"dshot_outputs": [
|
||||
5,
|
||||
6,
|
||||
7,
|
||||
8
|
||||
],
|
||||
"non_dshot_outputs": [],
|
||||
"bdshot_outputs": [
|
||||
5,
|
||||
6,
|
||||
7,
|
||||
8
|
||||
],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 3,
|
||||
"timer": "Timer4",
|
||||
"outputs": [
|
||||
9
|
||||
],
|
||||
"dshot": false,
|
||||
"dshot_outputs": [],
|
||||
"non_dshot_outputs": [
|
||||
9
|
||||
],
|
||||
"bdshot_outputs": [],
|
||||
"bdshot_output_only": []
|
||||
}
|
||||
],
|
||||
"serial_ports": [
|
||||
{
|
||||
"uart": "USART1",
|
||||
"device": "/dev/ttyS0",
|
||||
"label": "GPS1",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "USART2",
|
||||
"device": "/dev/ttyS1",
|
||||
"label": "TELEM3",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "USART3",
|
||||
"device": "/dev/ttyS2",
|
||||
"label": "Debug Console",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART4",
|
||||
"device": "/dev/ttyS3",
|
||||
"label": "TELEM4",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART5",
|
||||
"device": "/dev/ttyS4",
|
||||
"label": "TELEM2",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "USART6",
|
||||
"device": "/dev/ttyS5",
|
||||
"label": "RC",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART7",
|
||||
"device": "/dev/ttyS6",
|
||||
"label": "TELEM1",
|
||||
"flow_control": true
|
||||
}
|
||||
],
|
||||
"has_rc_input": false,
|
||||
"has_common_rc": true,
|
||||
"rc_serial_device": "/dev/ttyS5",
|
||||
"has_ppm_pin": false,
|
||||
"ppm_shared_with_rc_serial": false,
|
||||
"has_pps_capture": false,
|
||||
"has_safety_switch": false,
|
||||
"has_safety_led": false,
|
||||
"has_buzzer": false,
|
||||
"num_power_inputs": 1,
|
||||
"has_redundant_power": false,
|
||||
"has_dual_battery_monitoring": false,
|
||||
"has_dronecan_power_input": false,
|
||||
"power_monitor_type": "analog",
|
||||
"has_sd_card": true,
|
||||
"has_ethernet": false,
|
||||
"has_heater": true,
|
||||
"sensor_imu_drivers": [],
|
||||
"sensor_baro_drivers": [
|
||||
"BMP388"
|
||||
],
|
||||
"sensor_mag_drivers": [
|
||||
"BMM150",
|
||||
"HMC5883L",
|
||||
"QMC5883L",
|
||||
"IST8308",
|
||||
"IST8310",
|
||||
"LIS3MDL",
|
||||
"LSM303AGR",
|
||||
"RM3100",
|
||||
"IIS2MDC"
|
||||
],
|
||||
"sensor_osd_drivers": [],
|
||||
"sensor_bus_info": {
|
||||
"imu": [],
|
||||
"baro": [
|
||||
{
|
||||
"name": "BMP388",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 2,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"mag": [
|
||||
{
|
||||
"name": "IIS2MDC",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 4,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"sensor_variant_info": {
|
||||
"has_variants": false,
|
||||
"unconditional": {
|
||||
"imu": [],
|
||||
"baro": [
|
||||
{
|
||||
"name": "BMP388",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 2,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"mag": [
|
||||
{
|
||||
"name": "IIS2MDC",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 4,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"variants": {}
|
||||
},
|
||||
"num_i2c_buses": 3,
|
||||
"num_spi_buses": 2,
|
||||
"num_can_buses": 1,
|
||||
"has_usb": true,
|
||||
"doc_url": "https://docs.px4.io/main/en/flight_controller/ark_fpv",
|
||||
"doc_file": "ark_fpv.md",
|
||||
"doc_exists": true,
|
||||
"documented": true
|
||||
}
|
||||
@@ -1,208 +0,0 @@
|
||||
{
|
||||
"board": "ark/pi6x",
|
||||
"chip_family": "stm32h7",
|
||||
"chip_model": "STM32H743",
|
||||
"total_outputs": 8,
|
||||
"has_io_board": false,
|
||||
"io_outputs": 0,
|
||||
"groups": [
|
||||
{
|
||||
"group": 1,
|
||||
"timer": "Timer5",
|
||||
"outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"dshot": true,
|
||||
"dshot_outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"non_dshot_outputs": [],
|
||||
"bdshot_outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 2,
|
||||
"timer": "Timer4",
|
||||
"outputs": [
|
||||
5,
|
||||
6
|
||||
],
|
||||
"dshot": true,
|
||||
"dshot_outputs": [
|
||||
5,
|
||||
6
|
||||
],
|
||||
"non_dshot_outputs": [],
|
||||
"bdshot_outputs": [
|
||||
5,
|
||||
6
|
||||
],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 3,
|
||||
"timer": "Timer12",
|
||||
"outputs": [
|
||||
7,
|
||||
8
|
||||
],
|
||||
"dshot": false,
|
||||
"dshot_outputs": [],
|
||||
"non_dshot_outputs": [
|
||||
7,
|
||||
8
|
||||
],
|
||||
"bdshot_outputs": [],
|
||||
"bdshot_output_only": []
|
||||
}
|
||||
],
|
||||
"serial_ports": [
|
||||
{
|
||||
"uart": "USART1",
|
||||
"device": "/dev/ttyS0",
|
||||
"label": "GPS1",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "USART3",
|
||||
"device": "/dev/ttyS1",
|
||||
"label": "Debug Console",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART4",
|
||||
"device": "/dev/ttyS2",
|
||||
"label": "TELEM4",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART5",
|
||||
"device": "/dev/ttyS3",
|
||||
"label": "TELEM2",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "USART6",
|
||||
"device": "/dev/ttyS4",
|
||||
"label": "RC",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART7",
|
||||
"device": "/dev/ttyS5",
|
||||
"label": "TELEM1",
|
||||
"flow_control": true
|
||||
}
|
||||
],
|
||||
"has_rc_input": false,
|
||||
"has_common_rc": true,
|
||||
"rc_serial_device": "/dev/ttyS4",
|
||||
"has_ppm_pin": false,
|
||||
"ppm_shared_with_rc_serial": false,
|
||||
"has_pps_capture": false,
|
||||
"has_safety_switch": false,
|
||||
"has_safety_led": false,
|
||||
"has_buzzer": true,
|
||||
"num_power_inputs": 1,
|
||||
"has_redundant_power": false,
|
||||
"has_dual_battery_monitoring": false,
|
||||
"has_dronecan_power_input": true,
|
||||
"power_monitor_type": "ina226",
|
||||
"has_sd_card": true,
|
||||
"has_ethernet": false,
|
||||
"has_heater": true,
|
||||
"sensor_imu_drivers": [
|
||||
"ICM-42688P"
|
||||
],
|
||||
"sensor_baro_drivers": [
|
||||
"BMP388"
|
||||
],
|
||||
"sensor_mag_drivers": [
|
||||
"MMC5983MA",
|
||||
"IIS2MDC"
|
||||
],
|
||||
"sensor_osd_drivers": [],
|
||||
"sensor_bus_info": {
|
||||
"imu": [],
|
||||
"baro": [
|
||||
{
|
||||
"name": "BMP388",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 4,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"mag": [
|
||||
{
|
||||
"name": "MMC5983MA",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 4,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"sensor_variant_info": {
|
||||
"has_variants": true,
|
||||
"unconditional": {
|
||||
"imu": [],
|
||||
"baro": [
|
||||
{
|
||||
"name": "BMP388",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 4,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"mag": [
|
||||
{
|
||||
"name": "MMC5983MA",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 4,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"variants": {
|
||||
"ARKPI6X000": {
|
||||
"imu": [
|
||||
{
|
||||
"name": "ICM-42688P",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": 1,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "ICM-42688P",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": 2,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"baro": [],
|
||||
"mag": [],
|
||||
"osd": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"num_i2c_buses": 3,
|
||||
"num_spi_buses": 4,
|
||||
"num_can_buses": 1,
|
||||
"has_usb": true,
|
||||
"doc_url": "https://docs.px4.io/main/en/flight_controller/ark_pi6x",
|
||||
"doc_file": "ark_pi6x.md",
|
||||
"doc_exists": true,
|
||||
"documented": true
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
{
|
||||
"manufacturer": "Arkin Labs",
|
||||
"product": "A2M6X",
|
||||
"fmu_version": null,
|
||||
"since_version": "v1.18",
|
||||
"manufacturer_url": "TODO",
|
||||
"rc_ports_wizard": [
|
||||
{
|
||||
"label": "TODO: RC port label",
|
||||
"side": "IO"
|
||||
},
|
||||
{
|
||||
"label": "PPM",
|
||||
"side": "IO",
|
||||
"ppm_only": true
|
||||
}
|
||||
],
|
||||
"gps_ports_wizard": [
|
||||
{
|
||||
"port_key": "GPS1",
|
||||
"label": "GPS1",
|
||||
"pixhawk_standard": true,
|
||||
"full_port": true
|
||||
},
|
||||
{
|
||||
"port_key": "GPS2",
|
||||
"label": "GPS2",
|
||||
"pixhawk_standard": true,
|
||||
"full_port": false
|
||||
}
|
||||
],
|
||||
"power_ports_wizard": [
|
||||
{
|
||||
"label": "POWER",
|
||||
"connector_type": "TODO: connector type",
|
||||
"monitor_type": "analog"
|
||||
},
|
||||
{
|
||||
"label": "POWER 2",
|
||||
"connector_type": "TODO: connector type",
|
||||
"monitor_type": "dronecan"
|
||||
}
|
||||
],
|
||||
"overview_wizard": {
|
||||
"imu": [
|
||||
"ADIS16470",
|
||||
"BMI088",
|
||||
"ICM-20602",
|
||||
"ICM-20649",
|
||||
"ICM-20948",
|
||||
"ICM-42670P",
|
||||
"ICM-42688P",
|
||||
"ICM-45686",
|
||||
"IIM-42652"
|
||||
],
|
||||
"baro": [
|
||||
"BMP388",
|
||||
"ICP-20100",
|
||||
"MS5611"
|
||||
],
|
||||
"mag": null,
|
||||
"osd": null,
|
||||
"dimensions_mm": null,
|
||||
"weight_g": null,
|
||||
"voltage_range": null,
|
||||
"usb_connector": null,
|
||||
"num_additional_adc_inputs": null,
|
||||
"sensor_variant_labels": null
|
||||
}
|
||||
}
|
||||
@@ -1,72 +0,0 @@
|
||||
{
|
||||
"manufacturer": "Arkin Labs",
|
||||
"product": "AeroMind 6x",
|
||||
"board": "arkin/a2m6x",
|
||||
"fmu_version": null,
|
||||
"since_version": "v1.18",
|
||||
"manufacturer_url": "https://www.arkinlabs.in/aeromind-6x",
|
||||
"rc_ports_wizard": [
|
||||
{
|
||||
"label": "DSM",
|
||||
"side": "IO"
|
||||
},
|
||||
{
|
||||
"label": "PPM",
|
||||
"side": "IO",
|
||||
"ppm_only": true
|
||||
}
|
||||
],
|
||||
"gps_ports_wizard": [
|
||||
{
|
||||
"port_key": "GPS1",
|
||||
"label": "GPS & SAFETY",
|
||||
"pixhawk_standard": true,
|
||||
"full_port": true
|
||||
},
|
||||
{
|
||||
"port_key": "GPS2",
|
||||
"label": "GPS 2",
|
||||
"pixhawk_standard": true,
|
||||
"full_port": false
|
||||
}
|
||||
],
|
||||
"power_ports_wizard": [
|
||||
{
|
||||
"label": "POWER 1",
|
||||
"connector_type": "TODOCONNECTORTYPE",
|
||||
"monitor_type": "analog"
|
||||
},
|
||||
{
|
||||
"label": "POWER 2",
|
||||
"connector_type": "TODOCONNECTORTYPE",
|
||||
"monitor_type": "dronecan"
|
||||
}
|
||||
],
|
||||
"overview_wizard": {
|
||||
"imu": [
|
||||
"ICM-45686",
|
||||
"ICM-45686",
|
||||
"ICM-45686"
|
||||
],
|
||||
"baro": [
|
||||
"ICP-20100",
|
||||
"ICP-20100"
|
||||
],
|
||||
"mag": [
|
||||
"RM3100"
|
||||
],
|
||||
"osd": null,
|
||||
"width_mm": "46",
|
||||
"length_mm": "94",
|
||||
"height_mm": "38",
|
||||
"weight_g": 150.0,
|
||||
"min_voltage": null,
|
||||
"max_voltage": "6V",
|
||||
"usb_connectors": [
|
||||
"USB-C",
|
||||
"JST GH"
|
||||
],
|
||||
"num_additional_adc_inputs": null,
|
||||
"sensor_variant_labels": null
|
||||
}
|
||||
}
|
||||
@@ -1,152 +0,0 @@
|
||||
{
|
||||
"board": "atl/mantis-edu",
|
||||
"chip_family": "stm32f7",
|
||||
"chip_model": "STM32F765",
|
||||
"total_outputs": null,
|
||||
"has_io_board": false,
|
||||
"io_outputs": 0,
|
||||
"groups": [],
|
||||
"serial_ports": [
|
||||
{
|
||||
"uart": "USART1",
|
||||
"device": "/dev/ttyS0",
|
||||
"label": "",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "USART2",
|
||||
"device": "/dev/ttyS1",
|
||||
"label": "",
|
||||
"flow_control": true
|
||||
},
|
||||
{
|
||||
"uart": "USART3",
|
||||
"device": "/dev/ttyS2",
|
||||
"label": "",
|
||||
"flow_control": true
|
||||
},
|
||||
{
|
||||
"uart": "UART4",
|
||||
"device": "/dev/ttyS3",
|
||||
"label": "",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART5",
|
||||
"device": "/dev/ttyS4",
|
||||
"label": "",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "USART6",
|
||||
"device": "/dev/ttyS5",
|
||||
"label": "",
|
||||
"flow_control": true
|
||||
},
|
||||
{
|
||||
"uart": "UART7",
|
||||
"device": "/dev/ttyS6",
|
||||
"label": "",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART8",
|
||||
"device": "/dev/ttyS7",
|
||||
"label": "Debug Console",
|
||||
"flow_control": false
|
||||
}
|
||||
],
|
||||
"has_rc_input": false,
|
||||
"has_common_rc": false,
|
||||
"rc_serial_device": null,
|
||||
"has_ppm_pin": false,
|
||||
"ppm_shared_with_rc_serial": false,
|
||||
"has_pps_capture": false,
|
||||
"has_safety_switch": false,
|
||||
"has_safety_led": false,
|
||||
"has_buzzer": false,
|
||||
"num_power_inputs": 1,
|
||||
"has_redundant_power": false,
|
||||
"has_dual_battery_monitoring": false,
|
||||
"has_dronecan_power_input": false,
|
||||
"power_monitor_type": "analog",
|
||||
"has_sd_card": true,
|
||||
"has_ethernet": false,
|
||||
"has_heater": false,
|
||||
"sensor_imu_drivers": [
|
||||
"ICM-20602"
|
||||
],
|
||||
"sensor_baro_drivers": [
|
||||
"MPC2520"
|
||||
],
|
||||
"sensor_mag_drivers": [
|
||||
"IST8310"
|
||||
],
|
||||
"sensor_osd_drivers": [],
|
||||
"sensor_bus_info": {
|
||||
"imu": [
|
||||
{
|
||||
"name": "ICM-20602",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": 1,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"baro": [
|
||||
{
|
||||
"name": "MPC2520",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 4,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"mag": [
|
||||
{
|
||||
"name": "IST8310",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 2,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"sensor_variant_info": {
|
||||
"has_variants": false,
|
||||
"unconditional": {
|
||||
"imu": [
|
||||
{
|
||||
"name": "ICM-20602",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": 1,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"baro": [
|
||||
{
|
||||
"name": "MPC2520",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 4,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"mag": [
|
||||
{
|
||||
"name": "IST8310",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 2,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"variants": {}
|
||||
},
|
||||
"num_i2c_buses": 2,
|
||||
"num_spi_buses": 2,
|
||||
"num_can_buses": 0,
|
||||
"has_usb": true,
|
||||
"doc_url": null,
|
||||
"doc_file": null,
|
||||
"doc_exists": false,
|
||||
"documented": false
|
||||
}
|
||||
@@ -1,267 +0,0 @@
|
||||
{
|
||||
"board": "auterion/fmu-v6s",
|
||||
"chip_family": "stm32h7",
|
||||
"chip_model": "STM32H743",
|
||||
"total_outputs": 10,
|
||||
"has_io_board": false,
|
||||
"io_outputs": 0,
|
||||
"groups": [
|
||||
{
|
||||
"group": 1,
|
||||
"timer": "Timer1",
|
||||
"outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"dshot": true,
|
||||
"dshot_outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"non_dshot_outputs": [],
|
||||
"bdshot_outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 2,
|
||||
"timer": "Timer3",
|
||||
"outputs": [
|
||||
5,
|
||||
6,
|
||||
7,
|
||||
8
|
||||
],
|
||||
"dshot": true,
|
||||
"dshot_outputs": [
|
||||
5,
|
||||
6,
|
||||
7,
|
||||
8
|
||||
],
|
||||
"non_dshot_outputs": [],
|
||||
"bdshot_outputs": [
|
||||
5,
|
||||
6,
|
||||
7,
|
||||
8
|
||||
],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 3,
|
||||
"timer": "Timer5",
|
||||
"outputs": [
|
||||
9
|
||||
],
|
||||
"dshot": false,
|
||||
"dshot_outputs": [],
|
||||
"non_dshot_outputs": [
|
||||
9
|
||||
],
|
||||
"bdshot_outputs": [],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 4,
|
||||
"timer": "Timer8",
|
||||
"outputs": [
|
||||
10
|
||||
],
|
||||
"dshot": false,
|
||||
"dshot_outputs": [],
|
||||
"non_dshot_outputs": [
|
||||
10
|
||||
],
|
||||
"bdshot_outputs": [],
|
||||
"bdshot_output_only": []
|
||||
}
|
||||
],
|
||||
"serial_ports": [
|
||||
{
|
||||
"uart": "USART1",
|
||||
"device": "/dev/ttyS0",
|
||||
"label": "TELEM1",
|
||||
"flow_control": true
|
||||
},
|
||||
{
|
||||
"uart": "USART2",
|
||||
"device": "/dev/ttyS1",
|
||||
"label": "Debug Console",
|
||||
"flow_control": true
|
||||
},
|
||||
{
|
||||
"uart": "USART3",
|
||||
"device": "/dev/ttyS2",
|
||||
"label": "TELEM2",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART4",
|
||||
"device": "/dev/ttyS3",
|
||||
"label": "",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART5",
|
||||
"device": "/dev/ttyS4",
|
||||
"label": "RC",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART7",
|
||||
"device": "/dev/ttyS5",
|
||||
"label": "",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART8",
|
||||
"device": "/dev/ttyS6",
|
||||
"label": "GPS1",
|
||||
"flow_control": false
|
||||
}
|
||||
],
|
||||
"has_rc_input": false,
|
||||
"has_common_rc": true,
|
||||
"rc_serial_device": "/dev/ttyS4",
|
||||
"has_ppm_pin": false,
|
||||
"ppm_shared_with_rc_serial": false,
|
||||
"has_pps_capture": true,
|
||||
"has_safety_switch": false,
|
||||
"has_safety_led": false,
|
||||
"has_buzzer": false,
|
||||
"num_power_inputs": 1,
|
||||
"has_redundant_power": false,
|
||||
"has_dual_battery_monitoring": false,
|
||||
"has_dronecan_power_input": false,
|
||||
"power_monitor_type": "ina238",
|
||||
"has_sd_card": true,
|
||||
"has_ethernet": true,
|
||||
"has_heater": false,
|
||||
"sensor_imu_drivers": [
|
||||
"BMI088"
|
||||
],
|
||||
"sensor_baro_drivers": [
|
||||
"BMP388"
|
||||
],
|
||||
"sensor_mag_drivers": [
|
||||
"BMM150",
|
||||
"BMM350",
|
||||
"IST8310"
|
||||
],
|
||||
"sensor_osd_drivers": [],
|
||||
"sensor_bus_info": {
|
||||
"imu": [
|
||||
{
|
||||
"name": "BMI088",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"baro": [
|
||||
{
|
||||
"name": "BMP388",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 4,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"mag": [
|
||||
{
|
||||
"name": "IST8310",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 1,
|
||||
"external": true
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"sensor_variant_info": {
|
||||
"has_variants": true,
|
||||
"unconditional": {
|
||||
"imu": [
|
||||
{
|
||||
"name": "BMI088",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"baro": [
|
||||
{
|
||||
"name": "BMP388",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 4,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"mag": [
|
||||
{
|
||||
"name": "IST8310",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 1,
|
||||
"external": true
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"variants": {
|
||||
"V6S013": {
|
||||
"imu": [],
|
||||
"baro": [],
|
||||
"mag": [
|
||||
{
|
||||
"name": "BMM150",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"V6S015": {
|
||||
"imu": [],
|
||||
"baro": [],
|
||||
"mag": [
|
||||
{
|
||||
"name": "BMM150",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"__other__": {
|
||||
"imu": [],
|
||||
"baro": [],
|
||||
"mag": [
|
||||
{
|
||||
"name": "BMM350",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"num_i2c_buses": 2,
|
||||
"num_spi_buses": 2,
|
||||
"num_can_buses": 1,
|
||||
"has_usb": false,
|
||||
"doc_url": null,
|
||||
"doc_file": null,
|
||||
"doc_exists": false,
|
||||
"documented": false
|
||||
}
|
||||
@@ -1,278 +0,0 @@
|
||||
{
|
||||
"board": "auterion/fmu-v6x",
|
||||
"chip_family": "stm32h7",
|
||||
"chip_model": "STM32H753",
|
||||
"total_outputs": 9,
|
||||
"has_io_board": true,
|
||||
"io_outputs": 8,
|
||||
"groups": [
|
||||
{
|
||||
"group": 1,
|
||||
"timer": "Timer5",
|
||||
"outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"dshot": true,
|
||||
"dshot_outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"non_dshot_outputs": [],
|
||||
"bdshot_outputs": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 2,
|
||||
"timer": "Timer4",
|
||||
"outputs": [
|
||||
5,
|
||||
6
|
||||
],
|
||||
"dshot": true,
|
||||
"dshot_outputs": [
|
||||
5,
|
||||
6
|
||||
],
|
||||
"non_dshot_outputs": [],
|
||||
"bdshot_outputs": [
|
||||
5,
|
||||
6
|
||||
],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 3,
|
||||
"timer": "Timer12",
|
||||
"outputs": [
|
||||
7,
|
||||
8
|
||||
],
|
||||
"dshot": false,
|
||||
"dshot_outputs": [],
|
||||
"non_dshot_outputs": [
|
||||
7,
|
||||
8
|
||||
],
|
||||
"bdshot_outputs": [],
|
||||
"bdshot_output_only": []
|
||||
},
|
||||
{
|
||||
"group": 4,
|
||||
"timer": "Timer1",
|
||||
"outputs": [
|
||||
9
|
||||
],
|
||||
"dshot": false,
|
||||
"dshot_outputs": [],
|
||||
"non_dshot_outputs": [
|
||||
9
|
||||
],
|
||||
"bdshot_outputs": [],
|
||||
"bdshot_output_only": []
|
||||
}
|
||||
],
|
||||
"serial_ports": [
|
||||
{
|
||||
"uart": "USART1",
|
||||
"device": "/dev/ttyS0",
|
||||
"label": "GPS1",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "USART2",
|
||||
"device": "/dev/ttyS1",
|
||||
"label": "TELEM3",
|
||||
"flow_control": true
|
||||
},
|
||||
{
|
||||
"uart": "USART3",
|
||||
"device": "/dev/ttyS2",
|
||||
"label": "Debug Console",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART4",
|
||||
"device": "/dev/ttyS3",
|
||||
"label": "EXT2",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART5",
|
||||
"device": "/dev/ttyS4",
|
||||
"label": "TELEM2",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "USART6",
|
||||
"device": "/dev/ttyS5",
|
||||
"label": "PX4IO/RC",
|
||||
"flow_control": false
|
||||
},
|
||||
{
|
||||
"uart": "UART7",
|
||||
"device": "/dev/ttyS6",
|
||||
"label": "TELEM1",
|
||||
"flow_control": true
|
||||
},
|
||||
{
|
||||
"uart": "UART8",
|
||||
"device": "/dev/ttyS7",
|
||||
"label": "GPS2",
|
||||
"flow_control": false
|
||||
}
|
||||
],
|
||||
"has_rc_input": false,
|
||||
"has_common_rc": true,
|
||||
"rc_serial_device": "/dev/ttyS5",
|
||||
"has_ppm_pin": true,
|
||||
"ppm_shared_with_rc_serial": false,
|
||||
"has_pps_capture": true,
|
||||
"has_safety_switch": true,
|
||||
"has_safety_led": true,
|
||||
"has_buzzer": true,
|
||||
"num_power_inputs": 2,
|
||||
"has_redundant_power": true,
|
||||
"has_dual_battery_monitoring": true,
|
||||
"has_dronecan_power_input": true,
|
||||
"power_monitor_type": "ina238",
|
||||
"has_sd_card": true,
|
||||
"has_ethernet": true,
|
||||
"has_heater": false,
|
||||
"sensor_imu_drivers": [
|
||||
"BMI088",
|
||||
"ICM-20602",
|
||||
"ICM-42688P"
|
||||
],
|
||||
"sensor_baro_drivers": [
|
||||
"BMP388"
|
||||
],
|
||||
"sensor_mag_drivers": [
|
||||
"BMM150",
|
||||
"IST8310"
|
||||
],
|
||||
"sensor_osd_drivers": [],
|
||||
"sensor_bus_info": {
|
||||
"imu": [
|
||||
{
|
||||
"name": "BMI088",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "ICM-42688P",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "ICM-20602",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"baro": [
|
||||
{
|
||||
"name": "BMP388",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "BMP388",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
}
|
||||
],
|
||||
"mag": [
|
||||
{
|
||||
"name": "BMM150",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "IST8310",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 1,
|
||||
"external": true
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"sensor_variant_info": {
|
||||
"has_variants": false,
|
||||
"unconditional": {
|
||||
"imu": [
|
||||
{
|
||||
"name": "BMI088",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "ICM-42688P",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "ICM-20602",
|
||||
"bus_type": "SPI",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
}
|
||||
],
|
||||
"baro": [
|
||||
{
|
||||
"name": "BMP388",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "BMP388",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": true
|
||||
}
|
||||
],
|
||||
"mag": [
|
||||
{
|
||||
"name": "BMM150",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": null,
|
||||
"external": false
|
||||
},
|
||||
{
|
||||
"name": "IST8310",
|
||||
"bus_type": "I2C",
|
||||
"bus_num": 1,
|
||||
"external": true
|
||||
}
|
||||
],
|
||||
"osd": []
|
||||
},
|
||||
"variants": {}
|
||||
},
|
||||
"num_i2c_buses": 4,
|
||||
"num_spi_buses": 5,
|
||||
"num_can_buses": 2,
|
||||
"has_usb": true,
|
||||
"doc_url": null,
|
||||
"doc_file": null,
|
||||
"doc_exists": false,
|
||||
"documented": false
|
||||
}
|
||||